Django 如何使用“请求用户”属性获取非主管用户的用户权限
我开发了一个django应用程序,它可以注册用户并根据资源级别权限提供资源。在这个应用程序中,我在我的模型和模板上使用django基本级别权限,我在模型中为查看权限设置了权限元组,如:Django 如何使用“请求用户”属性获取非主管用户的用户权限,django,django-templates,user-permissions,perms,Django,Django Templates,User Permissions,Perms,我开发了一个django应用程序,它可以注册用户并根据资源级别权限提供资源。在这个应用程序中,我在我的模型和模板上使用django基本级别权限,我在模型中为查看权限设置了权限元组,如: class Model(AbstractUser): group = models.ForeignKey(AppGroup) class Meta: permissions = ( ('view_app', 'user can view app'), ) 在像上面那样创建模型之后
class Model(AbstractUser):
group = models.ForeignKey(AppGroup)
class Meta:
permissions = ( ('view_app', 'user can view app'), )
在像上面那样创建模型之后,我迁移了我的模型
现在,对于权限,我从admin创建了一个组,包括所有app view/change/delete权限,并使用该组在form类中生成了一个下拉列表。现在,用户(管理员)可以根据所选权限创建其他用户,成功注册后,新用户可以成功登录并访问所有资源,但当我尝试访问用户权限时,这是一种多对多关系,使用like
class UserListView(ListView):
def get_queryset(self):
print(self.request.user.user_permissions.all())
return super(UserListView, self).get_queryset()
当我列出我的视图时,它会给我一个关系错误(500错误):
关系视图\列表\用户\权限不存在
现在,当我通过超级用户访问同一个视图时,它会给我所有的权限,但是从一个既不是超级用户也不是职员的用户那里,它会抛出上面的错误。通过查看
djancgo.contrib.auth.models
PermissionMixin类代码,我觉得user\u permissions m2m字段只能由超级用户访问,但我对此表示怀疑。因此,这就是我正在做的事情,并且遇到了问题,如果我错误地理解了这一点,请纠正我超级用户拥有所有授予的权限集。因此,您可以查看所有权限。但是当一个新用户被创建时,他将没有任何权限设置,因此用户和权限之间没有关系,因此您将得到上述错误
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):
...
现在,具有“投票”权限的用户将被允许获得访问授权
有关更多详细用途,请参考:-
身份验证后端负责用户权限。我猜您正在使用自己的自定义身份验证后端。但是,如果这样做,您可能忘记导入ModelBackend<代码>
从django.contrib.auth.backends导入模型后端
现在,请确保将此后端扩展到您自己的自定义后端
class EmailBackend(ModelBackend):
在注册时,我通过
user.user\u permissions.add(*perms)
向user\u permission表添加了一些特定的权限。在通过user.user\u permissions.all()访问权限时,它给出了上述错误。这是我不明白的。