首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于django-guardian权限覆盖get_queryset

基于django-guardian权限覆盖get_queryset
EN

Stack Overflow用户
提问于 2018-03-04 22:00:19
回答 1查看 930关注 0票数 2

我试图基于django guardian中用户拥有的对象权限来覆盖get_queryset,这样只有用户拥有权限的对象才是可见的。

代码语言:javascript
复制
def get_queryset(self, request):
    if request.user.is_superuser:
        qs = super(MyAdminInline, self).get_queryset(request)
        return qs  

    for item in MyModel.objects.all():
        for perm in get_perms(request.user, item):
            things_user_can_see = get_objects_for_user(request.user, perm)
            return things_user_can_see

遗憾的是,这实际上什么也不做,并且所有项目都是可见的,而不管用户拥有什么权限。

EN

回答 1

Stack Overflow用户

发布于 2018-03-04 22:32:59

首先,您需要了解您的视图需要哪些权限。然后,根据这些权限获取对象。

如果你不知道对象的权限,那么你可以通过与模型相关的所有权限来过滤你的对象。

拉取Docs

代码语言:javascript
复制
from guardian.shortcuts import get_objects_for_user, get_perms_for_model

class MyAdminInline():
    def get_queryset(self, request):
        if request.user.is_superuser:
            qs = super(MyAdminInline, self).get_queryset(request)
            return qs  

        all_model_perms = get_perms_for_model(MyModel)
        return get_objects_for_user(request.user, all_model_perms)

仅此而已!无需循环遍历每个对象,检查权限并以错误的方式返回。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49096242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档