python - 如何获取用户在 django guardian 中具有特定权限的所有对象?

标签 python django permissions

我目前正在对所有对象进行非常笨拙的循环,但这会变得很慢:

videos = Video.objects.all()
video_list = []
for video in videos:
    checker = ObjectPermissionChecker(request.user)
    if checker.has_perm('view_video', video):
        video_list.append(video)

我想一定有一种方法可以获取该用户有权访问的所有对象。

最佳答案

几天前更新了名为“get_objects_for_user”的新快捷函数。如果您使用旧版本的监护人并且无法更新,您可以简单地从那里复制代码。

from guardian.shortcuts import get_objects_for_user
...
videos = get_objects_for_user(request.user, "view_video", Video.objects.all())

它总是做 3 次查询。如果将“use_groups”参数指定为 False,则会执行 2 个查询,但返回的查询集将不包含用户组对其具有权限的对象。如果需要,您还可以指定代号列表,而不是单一权限。 Read more here .

关于python - 如何获取用户在 django guardian 中具有特定权限的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663694/

相关文章:

python - 导入时没有名为 'PyPDF2' 的模块

c++ - 如何获取当前用户权限组?

python - Django Celery apply_async 不起作用

android - 将 Android 权限拆分为多个应用程序/插件的最佳方式

php - CakePHP 连接查询

python - Scrapyd 错误 : exceptions. AttributeError: 'dict' object has no attribute 'fields'

python - 如何在 lambda、python 中保存索引

python - 如何从 python 中的 pywikibot 获取重定向

javascript - 如何通过 django View 将参数传递给外部 javascript

python - 没有身份验证的 Django 管理员