Exemple #1
0
async def delete_roles(domain_id: str, roles):
    roles = list(set(roles))
    for role in roles:
        validator.check_role(role)
    for domain in builtin.DOMAINS:
        if domain['_id'] == domain_id:
            raise error.BuiltinDomainError(domain_id)
    user_coll = db.coll('domain.user')
    await user_coll.update_many(
        {
            'domain_id': domain_id,
            'role': {
                '$in': list(roles)
            }
        }, {'$unset': {
            'role': ''
        }})
    coll = db.coll('domain')
    return await coll.find_one_and_update(filter={'_id': domain_id},
                                          update={
                                              '$unset':
                                              dict(('roles.{0}'.format(role),
                                                    '') for role in roles)
                                          },
                                          return_document=ReturnDocument.AFTER)
Exemple #2
0
async def set_role(domain_id: str, role: str, perm: int):
    validator.check_role(role)
    for domain in builtin.DOMAINS:
        if domain['_id'] == domain_id:
            raise error.BuiltinDomainError(domain_id)
    coll = db.coll('domain')
    return await coll.find_one_and_update(
        filter={'_id': domain_id},
        update={'$set': {
            'roles.{0}'.format(role): perm
        }},
        return_document=ReturnDocument.AFTER)
Exemple #3
0
async def transfer(domain_id: str, old_owner_uid: int, new_owner_uid: int):
    for domain in builtin.DOMAINS:
        if domain['_id'] == domain_id:
            raise error.BuiltinDomainError(domain_id)
    coll = db.coll('domain')
    return await coll.find_one_and_update(
        filter={
            '_id': domain_id,
            'owner_uid': old_owner_uid
        },
        update={'$set': {
            'owner_uid': new_owner_uid
        }},
        return_document=ReturnDocument.AFTER)
Exemple #4
0
async def edit(domain_id: str, **kwargs):
    for domain in builtin.DOMAINS:
        if domain['_id'] == domain_id:
            raise error.BuiltinDomainError(domain_id)
    coll = db.coll('domain')
    if 'owner_uid' in kwargs:
        del kwargs['owner_uid']
    if 'name' in kwargs:
        validator.check_name(kwargs['name'])
    # TODO(twd2): check kwargs
    return await coll.find_one_and_update(filter={'_id': domain_id},
                                          update={'$set': {
                                              **kwargs
                                          }},
                                          return_document=ReturnDocument.AFTER)
Exemple #5
0
async def set_roles(domain_id: str, roles):
    roles = {str(role): int(perm) for role, perm in roles.items()}
    update = {}
    for role in roles:
        validator.check_role(role)
        if role in builtin.BUILTIN_ROLE_DESCRIPTORS:
            if not builtin.BUILTIN_ROLE_DESCRIPTORS[role].modifiable:
                raise error.ModifyBuiltinRoleError(domain_id, role)
        update['roles.{0}'.format(role)] = roles[role]
    for domain in builtin.DOMAINS:
        if domain['_id'] == domain_id:
            raise error.BuiltinDomainError(domain_id)
    coll = db.coll('domain')
    return await coll.find_one_and_update(filter={'_id': domain_id},
                                          update={'$set': update},
                                          return_document=ReturnDocument.AFTER)