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 add_user_role(domain_id: str, uid: int, role: str, join_at=None): validator.check_role(role) if join_at is None: join_at = datetime.datetime.utcnow() coll = db.coll('domain.user') try: await coll.update_one({'domain_id': domain_id, 'uid': uid, 'role': {'$exists': False}}, {'$set': {'role': role, 'join_at': join_at}}, upsert=True) except errors.DuplicateKeyError: raise error.UserAlreadyDomainMemberError(domain_id, uid) from None return True
async def add_user_role(domain_id: str, uid: int, role: str, join_at=None): validator.check_role(role) if join_at is None: join_at = datetime.datetime.utcnow() coll = db.coll('domain.user') try: await coll.update_one({'domain_id': domain_id, 'uid': uid, 'role': {'$exists': False}}, {'$set': {'role': role, 'join_at': join_at}}, upsert=True) except errors.DuplicateKeyError: raise error.UserAlreadyDomainMemberError(domain_id, uid) from None return True
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)
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)
async def delete_roles(domain_id: str, roles): roles = list(set(roles)) for role in roles: validator.check_role(role) if role in builtin.BUILTIN_ROLE_DESCRIPTORS: raise error.ModifyBuiltinRoleError(domain_id, 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_users_role(domain_id: str, uids, role: str): validator.check_role(role) await set_users(domain_id, uids, role=role)
async def set_user_role(domain_id: str, uid: int, role: str): validator.check_role(role) return await set_user(domain_id, uid, role=role)
async def set_user_role(domain_id: str, uid: int, role: str): validator.check_role(role) # use set_users to utilize "upsert=False" return await set_users(domain_id, [uid], role=role)
async def set_users_role(domain_id: str, uids, role: str): validator.check_role(role) await set_users(domain_id, uids, role=role)