检查Django中模板内的权限

Dan*_*iel 72 django django-authentication

我可以在Django的模板中使用Auth应用程序的权限检查吗?(我想在特权用户的模板末尾显示一个简单的表单)

更重要的是,我应该这样做还是不是"Django方式"?

Vic*_*Neo 164

如果您要检查模板中的权限,以下代码就足够了:

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

模型指的是用户需要权限才能看到表单的模型.

有关更多示例,请参阅https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions.

当前登录用户的权限存储在模板变量中 {{ perms }}

(这需要下面的上下文处理器被使能:django.contrib.auth.context_processors.auth)

  • 请注意,如果您以超级用户身份登录,即使您拼错了权限名称,`perms.app_label.foobar`也将始终为true. (10认同)
  • 这里还要注意,“can_do_something”是权限的名称,所以你不需要在权限名称前加上前缀“can”。例如, perms.my_app.add_object (2认同)

Ari*_*ury 18

在 Django 2.0 + 上测试

如果您想查看登录用户拥有的所有权限,请在您的模板 (.html) 上打印:

{{ perms.app_name }}
Run Code Online (Sandbox Code Playgroud)

或者

{{ perms }}

为了检查用户是否有权限,请使用:

{% if perms.app_name.change_model_name_lower_cased %}
Run Code Online (Sandbox Code Playgroud)

例如:

{% if perms.Utilization.change_invoice %}
Run Code Online (Sandbox Code Playgroud)

这里: Utilization 是我的应用程序名称。发票是型号名称。

注意,一般来说,会有4种权限:

  • 更改 [例如 Utilization.change_projectemail]
  • 查看 [例如 Utilization.view_invoice]
  • 删除 [例如 Utilization.delete_invoicetype]
  • 添加 [例如 Utilization.add_invoicetype]

另外,如果您想查看用户由于其所属组而拥有的所有权限,请启动 Django shell...

user = User.objects.get(username='somename')
user.get_group_permissions()
Run Code Online (Sandbox Code Playgroud)

此处列出的所有权限均属于他所属的组。

  • 是的。确实:小写。不是蛇形外壳。使用 {{perms}} 查看权限的想法很棒,所以我认为这是最好的答案。 (3认同)

Ama*_*mar 7

另一种独特的方法是:

{% if 'app_label.permission' in perms %}
<form here>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

例子:

{% if 'auth.view_group' in perms %}
<p> Hello World! </p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

当您想要使用默认/自定义身份验证权限(无论是否为模型创建应用程序)时,这会很方便,因为此方法不需要应用程序名称。它只需要权限表中的权限名称。

您还可以使用 and/or 命令进行多项检查:

{% if 'auth.view_group' in perms and 'auth.add_group' in perms %}
<form here>
{% endif %}
Run Code Online (Sandbox Code Playgroud)