【发布时间】:2017-05-29 08:53:11
【问题描述】:
我在我的 django 应用上实现了一个方法,该方法将检查用户是否具有特定权限,或者它是否属于包含此特定权限的组。
def user_has_perm(user, *permissions_to_check):
permission_check = True
permissions_not_found = []
user_groups = user.groups.all().prefetch_related('permissions')
for permission in permissions_to_check:
content_type, permission_codename = permission.split('.')
if not user.has_perm(permission) and not user_groups.filter(
permissions__content_type__model__icontains=content_type,
permissions__codename__icontains=permission_codename).exists(): # Goes down from Groups to the single user permission
permission_check = False
permissions_not_found.append(permission)
return permission_check, permissions_not_found
现在,一切都像一个魅力,但是,Django-Debug-Toolbar 它抱怨查询,它被重复多次作为要检查的组。
对我来说这是一个瓶颈,因为一些用户将关联 50 个组,我真的不知道如何优化这个查询...
有什么建议吗?
谢谢
【问题讨论】:
-
权限检查可能很昂贵。在登录时检索用户的所有权限并将其缓存一段时间可能是个好主意。
-
有一些不同的选择吗?
-
真的这么难吗?