Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何使用“请求用户”属性获取非主管用户的用户权限_Django_Django Templates_User Permissions_Perms - Fatal编程技术网

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'), ) 在像上面那样创建模型之后

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

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()访问权限时,它给出了上述错误。这是我不明白的。