コード例 #1
0
ファイル: permission.py プロジェクト: fossabot/sdust-acmer
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
コード例 #2
0
ファイル: oj.py プロジェクト: fossabot/sdust-acmer
def get_oj(name):
    """
    获取指定OJ信息。
    :param name: OJ的标识
    :return: 如果OJ存在,返回包含OJ信息的字典,否则返回None
    """
    ret = first_one(OJ, name=name)
    return to_dict(ret)
コード例 #3
0
def get_user(username):
    """
    获取指定用户信息。
    :param username: 用户名
    :return: 如果用户存在,返回包含用户信息的字典,否则返回None
    """
    ret = first_one(UserProfile, user_id=username)
    return to_dict(ret)
コード例 #4
0
ファイル: permission.py プロジェクト: fossabot/sdust-acmer
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
コード例 #5
0
ファイル: oj.py プロジェクト: fossabot/sdust-acmer
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
コード例 #6
0
def user_updating(username):
    """
    查询用户是否在更新提交记录状态。
    :param username:
    :return:
    """
    user = first_one(UserProfile, username=username)
    if user is None:
        return None
    return user.updating
コード例 #7
0
ファイル: permission.py プロジェクト: fossabot/sdust-acmer
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
コード例 #8
0
ファイル: permission.py プロジェクト: fossabot/sdust-acmer
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()
    }
コード例 #9
0
ファイル: permission.py プロジェクト: fossabot/sdust-acmer
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
コード例 #10
0
ファイル: permission.py プロジェクト: fossabot/sdust-acmer
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