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)
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)
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)
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)
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)