我有一个Django应用程序,我需要将特定Views
限制为Users
的子集。我还想通过Django Admin编辑哪个Users
拥有此权限。因此,在管理员中,我希望能够看到所有用户,并且可以选中一个复选框,以便查看此特定Views
的权限。
我认为解决这个问题的方法是问题Views
上的权限装饰器:
from django.contrib.auth.decorators import permission_required
@login_required
@permission_required('user.can_view_restricted', login_url='/accounts/login/')
def Restrictedview(request, template_name='restricted.html'):
...
# restricted stuff
现在我知道我需要定义此权限(在permissions.py?中),并将其注册到Admin。我不确定如何执行此操作以及如何将权限与特定User
实例正确关联。这应该是“用户”上的额外字段,还是用于将模型保存到用户和权限的单独模型?
答案 0 :(得分:3)
您可以在文档中详细了解django权限 https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions-and-authorization
基本上Django权限使用的Permission
模型位于django.contrib.auth.models
,但对于大多数应用程序,您不需要直接导入或使用该模型。
默认情况下,Django会为您应用中的任何模型创建3个默认权限。如果您在名为MyModel
的应用中有一个名为myapp
的模型,那么Django默认会创建create_mymodel
,change_mymodel
和delete_mymodel
权限。
您可以通过致电
来检查用户是否拥有某项权限user.has_perm('myapp.create_mymodel')
如果您正在检查create
权限,例如。或者,就像你一样,你可以使用装饰器
permission_required('myapp.create_mymodel')
除了django提供的默认权限之外,您还可以通过在模型的permissions
类中指定Meta
属性来定义模型的自定义权限,如下所示:
class MyModel(models.Model):
[...]
class Meta:
permissions = (
("can_deliver_pizzas", "Can deliver pizzas"),
)
有关在此处定义自定义权限的更多信息:https://docs.djangoproject.com/en/dev/ref/models/options/#permissions
默认情况下,可以使用管理界面为每个用户轻松编辑权限。只需访问某个用户的页面,就会出现一个名为“用户权限”的字段,其中包含项目中所有权限的列表,您可以从中添加或删除特定用户的权限。