Django管理员,如何在django模板中正确检查用户的权限?

时间:2013-12-09 05:13:38

标签: permissions django-templates django-admin

新手在这里。我的申请名称是ccad。型号名称为logbook。用户A无权从可用的用户权限编辑,添加或删除日志模型。

所以我尝试隐藏保存,保存并继续编辑,保存并添加来自用户A的其他按钮。

我跟着我在SO中找到的建议。 来自picid调查的Here's由Sid回答。并daniel the same inquiry

我最终将下面的代码写入我的模板。

位于{{template folder}} / admin / app_name / model_name / 的

change_form.html
 {% if perms.ccad.add_logbook %}
    <li><input type="submit" value="{% trans 'Save ' %}" class="grp-button grp-default" name="_save" {{ onclick_attrib }}/></li>     
    <li><input type="submit" value="{% trans 'Save and add another' %}" class="grp-button" name="_addanother" {{ onclick_attrib }} /></li>
    <li><input type="submit" value="{% trans 'Save and continue editing' %}" class="grp-button" name="_continue" {{ onclick_attrib }}/></li>        
 {% endif %}

但是没有权限的用户仍然可以看到我提到的按钮。

我也尝试将{% if perms.ccad.add_logbook %}更改为{% if perms.ccad.can_add_logbook %}但无济于事。

最好的方法是什么?

1 个答案:

答案 0 :(得分:5)

首先检查模板上下文中的perms变量。在模板可见的位置添加...{{ perms }}...。它应该像...<django.contrib.auth.context_processors.PermWrapper object at X>...一样呈现。

如果不是这种情况,则表示您缺少模板中的权限。

确认您的设置TEMPLATE_CONTEXT_PROCESSORS元组包含django.contrib.auth.context_processors.auth

在渲染模板时,请确保使用RequestContext而不是Context

如果您最终看到PermWrapper,但您的权限检查仍然无效,请将之前的调试更改为...{{ perms.ccad }}...。 这应该输出类似于“set([u'ccad.add _...',...])的内容。

如果没有,那么您的应用可能不会被称为ccad

最后在创建if条件之前,请确保权限返回“... {{perms.ccad.add_logbook}}} ...”。这应该返回True或False。

现在我到最后我注意到你的问题是相反的,到目前为止我写的所有内容都没用。 :)

{{ user.is_superuser }}添加到您的模板中。如果为True,则当前用户具有超级用户权限,即使对于{{ perms.omg.can_facepalm }}

,该权限也始终为True