首页 > 解决方案 > 为 django user.has_perms 创建批量权限检索以提高代码速度

问题描述

我有一个运行多个projectsand的函数users

def has_project_permissions(project, user, can_edit=False, is_owner=False):
    permission_level = CAN_VIEW
    if can_edit:
        permission_level = CAN_EDIT
    if is_owner:
        permission_level = IS_OWNER

    return user.has_perm(permission_level, project) or (user.is_staff and not project.disable_staff_access)

目前我正在使用for loop迭代每个用户和每个项目并获得权限。有没有办法重写它并获得所有用户和项目的所有权限Django?我需要它来提高速度,因为当用户和项目太多时,显然速度会非常糟糕。我希望它以Django某种方式成为可能。

这是我正在迭代的函数projects。对用户的迭代发生在上一层(不包括在内):

def _get_json_for_user(projects, user):
    """Returns JSON representation of the given User object

    Args:
        user (object): Django user model

    Returns:
        dict: json object
    """

    if hasattr(user, '_wrapped'):
        user = user._wrapped   # Django request.user actually stores the Django User objects in a ._wrapped attribute

    user_json = {_to_camel_case(field): getattr(user, field) for field in
                ['username', 'email', 'first_name', 'last_name', 'last_login', 'is_staff', 'date_joined', 'id']}
    user_json['displayName'] = user.get_full_name()
    csi_user = True
    if user:
        if len(projects) == 0:
            csi_user = False
        else:
            for project in projects:
                if not has_project_permissions(project, user):
                    csi_user = False
                    break
    user_json['csiUser'] = csi_user
    return user_json

标签: djangoauthentication

解决方案


推荐阅读