我开发了一个django应用程序,注册用户并根据资源级别权限提供资源。这个我在我的模型和模板上使用django基本级别权限,有查看权限我在我的模型中设置了权限元组,如:
class Model(AbstractUser):
group = models.ForeignKey(AppGroup)
class Meta:
permissions = ( ('view_app', 'user can view app'), )
我在创建上面的模型后迁移我的模型。
现在对于权限,我从管理员创建了一个组并包括所有应用程序视图/更改/删除权限,使用该组我在表单类中生成了一个下拉列表。现在,用户(admin)可以根据所选权限创建其他用户,并在成功注册后,新用户能够成功登录并访问所有资源,但是当我尝试访问用户权限时,使用类似的多对多关系p>
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.models
PermissionMixin类代码,我觉得user_permissions m2m字段只能由超级用户访问,但我对此表示怀疑。所以这就是我正在做的并且遇到了问题,如果我采取错误的方式,请纠正我
答案 0 :(得分: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 documentation on permissions.
身份验证后端负责用户权限。我猜你正在使用自己的自定义身份验证后端。但是,如果您这样做,您可能忘记导入ModelBackend。
from django.contrib.auth.backends import ModelBackend
现在确保将此后端扩展到您自己的自定义后端
class EmailBackend(ModelBackend):