def can_manage(username1, username2): """ 不考虑页特殊权限,判断指定用户能否管理另一指定用户。 :param username1: 需要判断是否为管理者的用户的用户名 :param username2: 需要判断是否为被管理者的用户的用户名 :return: 如果两个用户均存在,返回判断结果;如果两个用户中的任意一个不存在,返回None """ identity1 = first_one(UserIdentity, user_id=username1) identity2 = first_one(UserIdentity, user_id=username2) if identity1 is None or identity2 is None: return None elif identity1 == 0: return False else: return identity1.level < UserIdentity.IDENTITY_VALUE['normal'] and identity1.level < identity2.level
def get_oj(name): """ 获取指定OJ信息。 :param name: OJ的标识 :return: 如果OJ存在,返回包含OJ信息的字典,否则返回None """ ret = first_one(OJ, name=name) return to_dict(ret)
def get_user(username): """ 获取指定用户信息。 :param username: 用户名 :return: 如果用户存在,返回包含用户信息的字典,否则返回None """ ret = first_one(UserProfile, user_id=username) return to_dict(ret)
def can_promote(username, identity_word): identity = first_one(UserIdentity, user_id=username) if identity is None: return None level = identity.level target_level = UserIdentity.IDENTITY_VALUE[identity_word] return level < UserIdentity.IDENTITY_VALUE['normal'] and level < target_level
def oj_updating(oj_name): """ 查询OJ是否在更新状态。 :param oj_name: :return: """ oj = first_one(OJ, name=oj_name) if oj is None: return None return oj.updating
def user_updating(username): """ 查询用户是否在更新提交记录状态。 :param username: :return: """ user = first_one(UserProfile, username=username) if user is None: return None return user.updating
def has_identity(username, identity_word): """ 判断指定用户是否具有具体身份的权限。 :param username: 用户名 :param identity_word: 权限身份,字符串,参见models.py中定义 :return: 如果用户和权限身份均存在,返回判断结果;否则返回None """ identity = first_one(UserIdentity, user_id=username) if identity is None: return None if identity_word not in UserIdentity.IDENTITY_VALUE: return None level = UserIdentity.IDENTITY_VALUE[identity_word] return identity.level != 0 and identity.level <= level
def user_identity(username): """ 获得指定用户的权限等级。 :param username: 待查询用户的用户名 :return: 若用户存在,返回字典,"level"键对应权限值,"name"键对应权限代表的等级;否则返回None """ identity = first_one(UserIdentity, user_id=username) if identity is None: return None return { 'level': identity.level, 'name': identity.get_level_display() }
def permitted_to_manage(username1, username2, function_name): """ 结合用户特殊权限判断用户是否能够管理另一指定用户。 :param username1: 需要判断是否为管理者的用户的用户名 :param username2: 需要判断是否为被管理者的用户的用户名 :param function_name: 执行的动作名称 :return: 如果两个用户均存在,返回判断结果;如果两个用户中的任意一个不存在,返回None """ identity1 = first_one(UserIdentity, user_id=username1) identity2 = first_one(UserIdentity, user_id=username2) if identity1 is None or identity2 is None: return None elif identity1 == 0: return False elif identity1.level < UserIdentity.IDENTITY_VALUE['normal'] and identity1.level < identity2.level: return True special_permission = UserPermissionRelation.objects.filter( user_id=username1, function_id=function_name, allowed=True ) for permission in special_permission: if permission.level < UserIdentity.IDENTITY_VALUE['normal'] and permission.level < identity2.level: return True return False
def get_identity_map(username): """ 获得用户身份权限的情况。 :param username: 用户名 :return: 字典,key为身份名称,value为是否具有该身份的权限 """ identity = first_one(UserIdentity, user_id=username) if identity is None: return None level = identity.level ret = {} for (number, word) in UserIdentity.IDENTITY_WORD.items(): if level != 0 and identity.level <= number: ret[word] = True else: ret[word] = False if level == 0: ret['disabled'] = True return ret