django - 为 django user.has_perms 创建批量权限检索以提高代码速度
问题描述
我有一个运行多个projects
and的函数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