【发布时间】:2012-06-13 13:18:42
【问题描述】:
我的 Django 应用当前有受“permission_required()”函数保护的 URL。
此函数以三种不同的方式调用。
- 作为views.py 中的装饰器,带有硬编码参数。
- 作为普通函数,具有自动生成的参数,在自定义基于类的通用视图中。
- 作为在 urls.py 中调用视图的函数,带有硬编码参数。
我现在正在向应用程序添加一个菜单系统,我需要让菜单条目反映用户是否有权请求每个菜单条目的 URL。 (通过灰显或隐藏所述条目。)
有没有办法在不请求 URL 的情况下查询 URL 所需的权限?
到目前为止,我想到的唯一解决方案是将装饰器替换为无参数的“menu_permssion_required()”装饰器,并将所有权限硬编码到 Python 结构中。这似乎是倒退了一步,因为我的自定义基于类的通用视图已经自动生成了它们所需的权限。
关于如何制作一个反映当前用户的 URL 权限的菜单系统有什么建议吗?
【问题讨论】:
-
我总是在模板中硬编码菜单,它很简单并且允许使用 {% extends %} 的上下文菜单。
-
@jplc 道歉,我无法理解您的评论与问题的关系。这是专门关于权限的。权限是跨领域的,不链接到 URL 前缀或类似的。
-
您可以检查模板中的权限:gist.github.com/25c03f286337c66cc860 从我所见,这在 django 项目中是相当标准的,这里是有关 django perms 模块的文档:docs.djangoproject.com/en/1.0/topics/auth/#id6 不过,我的观点是,花时间为 HTML 菜单制作“系统”可能会更好地花在其他事情上。
-
@jpic 感谢您的澄清。我的目标是避免在 both 菜单模板 和 其他地方重复指定权限。如果我不这样做,他们将在某些时候不同步,并且客户将看到不必要的错误页面。
标签: django menu authorization