1

我开发了一个 django 应用程序,它根据资源级别权限注册用户并提供资源在此我在我的模型和模板上使用 django 基本级别权限,为了查看权限,我在我的模型中设置了权限元组,例如:

class Model(AbstractUser):
    group = models.ForeignKey(AppGroup)
    class Meta:
        permissions = ( ('view_app', 'user can view app'), )

我在创建上面的模型后迁移我的模型。

现在对于权限,我从管理员创建了一个组,并包括所有应用程序查看/更改/删除权限,使用该组我在表单类中生成了一个下拉列表。现在用户(管理员)可以根据选定的权限创建其他用户,成功注册后,新用户能够成功登录并访问所有资源,但是当我尝试访问用户权限时,这是一个使用 like 的多对多关系

class UserListView(ListView):
     def get_queryset(self):
         print(self.request.user.user_permissions.all())
         return super(UserListView, self).get_queryset()

当我列出我的视图时,它给了我一个关系错误(500 错误): 在此处输入图像描述 关系 views_list_user_permission 不存在

现在,当我通过超级用户访问同一个视图时,它会授予我所有权限,但是对于既不是超级用户也不是员工的用户,它会吐出上述错误。通过查看djancgo.contrib.auth.modelsPermissionMixin 类代码,在我看来 user_permissions m2m 字段只能由超级用户访问,但我对此表示怀疑。所以这就是我正在做的事情并遇到了问题,如果我采取错误的方式,请纠正我

4

1 回答 1

1

超级用户拥有授予的所有权限集。因此,您可以看到所有权限。但是当创建一个新用户时,他将没有任何权限集,因此用户和权限之间没有任何关系,所以您会收到上述错误。

Note:-

您可以使用以下方法检查模板内登录用户的可用权限

{{ perms }}

对于特定的应用程序:-

{{ perms.app_name }}

对于特定型号:-

{{ perms.app_name.model_name }}

假设您想授予对特定模型具有特定权限的用户访问视图,您可以使用权限所需的装饰器,如下所示:-

from django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote')
def my_view(request):
...

现在,拥有can_vote“投票”权限的用户将被允许访问权限。

更详细的使用方法可以参考:-

关于权限的 Django 文档。

身份验证后端负责用户权限。我猜您正在使用自己的自定义身份验证后端。但是,如果您这样做,您可能忘记了导入 ModelBackend。 from django.contrib.auth.backends import ModelBackend

现在确保将此后端扩展到您自己的自定义后端

class EmailBackend(ModelBackend):
于 2016-11-29T12:16:25.157 回答