我需要根据验证用户使用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})
在这里,我需要根据正确的@permission_required
检查userid
装饰器功能。假设登录用户具有权限("view_reactor", "1"),
,那么view_reactor
函数可以访问("view_reactor", "0")
,然后无法访问。
答案 0 :(得分:1)
您为模型添加了额外的权限,其中第一个值是权限名称,第二个是人类可读的名称(详情请meta permissions),所以如果我理解您需要将其添加到Reactor
例如:
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):
抱歉,如果我误解了
答案 1 :(得分:0)
为什么不使用Django默认使用的User,Permission,Group Class?
models.py in exampleApp
class ExampleModel(models.Model):
somefield = models.CharField(max_length=4)
如果您执行'makemigration'和'migrate',它会自动创建'add_examplemodel','change_examplemodel','delete_examplemodel'。您可以在DB中检查auto_permission表。
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类中命名的权限。 (它在您创建模型时起作用,而不是在您编辑时起作用)
您只需在管理页面中添加权限。
它只是在Permission类中添加权限名称。您需要为User设置权限。
您可以像这样在用户中授予权限。
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_required decorator
如果您希望用户1拥有view_reactor权限。只需通过User.objects.get(id=user1_id).permissions_set.add(view_reactor permission)
授予用户1权限。然后@permission_required decorator
将会检查。
请阅读以下手册。