Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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和Python根据经过身份验证的用户检查权限_Python_Django - Fatal编程技术网

如何使用Django和Python根据经过身份验证的用户检查权限

如何使用Django和Python根据经过身份验证的用户检查权限,python,django,Python,Django,我需要使用Django和Python检查每个用户所需的权限。我在下面提供我的代码 class Permission(models.Model): """docstring for Permission""" user_id = models.ForeignKey(User) class Meta: permissions = ( ("view_reactor", "1"), ("find_reactor",

我需要使用Django和Python检查每个用户所需的权限。我在下面提供我的代码

class Permission(models.Model):
    """docstring for Permission"""

    user_id = models.ForeignKey(User)
    class Meta:
        permissions = (
            ("view_reactor", "1"),
            ("find_reactor", "1"),
            ("controll_reactor", "0"),
        )
Views.py:

from django.contrib.auth.decorators import permission_required


def view_reactor(request):
    """ This function for to get serch screen. """

    return render(request, 'plant/view_reactor.html',
                        {'count': 1})

在这里,我需要根据适当的
用户ID检查
@permission\u required
装饰器功能。假设登录的用户拥有权限
(“查看反应器”、“1”),
,则
查看反应器
功能可以访问,如果
(“查看反应器”、“0”)
则无法访问该功能。

您向模型添加了额外的权限,其中第一个值是权限名称,第二个值是人类可读的名称(详细信息见此处)因此,如果我知道您需要将其添加到您的
反应堆
模型中,例如:

class Reactor(models.Model):
    # ^^^^^^
    # ....
    user_id = models.ForeignKey(User)

    class Meta:
        permissions = (
            ("view_reactor", "can view reactor"),
            ("find_reactor", "can find reactor"),
            ("controll_reactor", "can controll reactor"),
        )
以及您可以在视图中使用的

from django.contrib.auth.decorators import permission_required

@permission_required('reactor.view_reactor')
def view_reactor(request):

抱歉,如果我误解了

为什么不使用Django默认的User、Permission、Group类

models.py in exampleApp
class ExampleModel(models.Model):
    somefield = models.CharField(max_length=4)
如果执行“makemigration”和“migrate”,则会自动创建“add\u examplemodel”、“change\u examplemodel”、“delete\u examplemodel”。您可以在DB中检查auto_权限表

models.py in exampleApp
class ExampleModel2(models.Model):
    somefield = models.CharField(max_length=4)
    class Meta:
        permissions = ( (permission_code, human_readable_permission_name), )
如果您使用该模型执行“makemigrations”和“migrate”,它不会创建三个默认权限,而只创建一个您在Meta类中命名的权限。(创建模型时有效,编辑时无效)

您只需在管理页面中添加权限即可

它只是在权限类中添加权限名称。您需要为用户设置权限

您可以这样在用户中授予权限

user = User.objects.get(id=someidnumber)
# User and Permissions Class have manytomany relationship.
user.permissions_set.add(permission, ... )
# you can set user 1 have one permission like view_reactor.
# you can set user 2 have two permission like view_reactor, find_reactor.
# you can give permissions to each user independently.
然后,您可以使用
@permission\u required decorator

如果您希望用户1具有查看权限。只需通过
user.objects.get(id=user1\u id).permissions\u set.add(view\u permission)
为用户1授予权限即可。然后,
@permission\u所需的装饰师将进行检查

请阅读下面的手册


您将用户权限存储在哪里?meta当然不能存储这些东西。你必须有一个类变量来存储权限,然后检查你能根据我的要求通过一篇文章分享你的想法吗?可能会帮助您如何更改权限意味着假设我不想将所有三个权限都授予特定用户。这种情况会怎样。您需要进行迁移和迁移,然后以标准方式分发此权限元数据类对于数据库中的不同行不能不同,因此用户的权限如何与其他用户不同?你可能想解释一下你上面提到的标准方式,我认为这个问题与@subhra的问题是重复的。好吧,我给了你答案,我知道你做了自己的许可课程。有什么理由不需要Django中内置的权限、组和用户关系吗?我将在models.py文件中声明这个类
classexamplemodel(models.Model):
,对吗?@Jayground。你不必这样做。您只需在管理页面中添加权限即可。若你们是为了在permission类中添加权限而创建空模型,我认为只在Admin页面中添加权限会更好。我指的是这些我必须编写的已定义类。