Django通过可在Admin中编辑的用户权限来限制视图

时间:2014-11-13 18:53:04

标签: django

我有一个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实例正确关联。这应该是“用户”上的额外字段,还是用于将模型保存到用户和权限的单独模型?

1 个答案:

答案 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_mymodelchange_mymodeldelete_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

默认情况下,可以使用管理界面为每个用户轻松编辑权限。只需访问某个用户的页面,就会出现一个名为“用户权限”的字段,其中包含项目中所有权限的列表,您可以从中添加或删除特定用户的权限。