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

Posted

技术标签:

【中文标题】Django admin,如何在 django 模板中正确检查用户的权限?【英文标题】:Django admin, how to check properly user's permission in django template? 【发布时间】:2013-12-26 03:34:55 【问题描述】:

这里是新手。我的应用程序名称是 ccad。型号名称为 logbook。用户 A 没有从可用用户权限中编辑、添加或删除日志模型的权限。

所以我尝试隐藏保存、保存并继续编辑、保存并从用户 A 添加另一个按钮。

我遵循了我在 SO 中找到的建议。 Here's 来自 Sid 回答的 picomon 查询。还有daniel the same inquiry。

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

change_form.html 位于 template folder/admin/app_name/model_name/

 % 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】:

首先检查模板上下文中的 perms 变量。在模板可见的某处添加... perms ...。它应该像这样呈现...&lt;django.contrib.auth.context_processors.PermWrapper object at X&gt;...

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

验证您的设置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

【讨论】:

我未能将 TEMPLATE_CONTEXT_PROCESSORS 放在我的 settings.py 上,而且我正在使用我的超级用户帐户来测试模板 。 +1 给我一个测试模板变量的想法。我忘了那个。 TEMPLATE_CONTEXT_PROCESSORS 有一个默认列表。我认为django.contrib.auth.context_processors.auth 在该列表中

以上是关于Django admin,如何在 django 模板中正确检查用户的权限?的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin Cookbook-8如何在Django admin中优化查询

Django Admin Cookbook-23如何在Django admin中添加嵌套的内联

Django Admin Cookbook-14如何在Django Admin后台移除“删除所选”操作

Django Admin Cookbook-18如何限制对Django Admin管理部分功能的使用

如何在 Django-admin 中添加自定义搜索框?

如何在 django admin 中进行分类?