找到 Django URL 所需的权限而不调用它们?

2023-12-23

我的 Django 应用程序当前具有受“permission_required()”函数保护的 URL。

该函数以三种不同的方式调用。

  1. 作为views.py中的装饰器,具有硬编码的参数。
  2. 作为一个简单的函数,具有自动生成的参数,在自定义的基于类的通用视图中。
  3. 作为调用 urls.py 中视图的函数,带有硬编码参数。

我现在正在向应用程序添加一个菜单系统,我需要使菜单条目反映用户是否有权请求每个菜单条目的 URL。 (通过灰显或隐藏所述条目。)

有没有办法查询某个URL所需的权限without请求网址?

到目前为止,我想到的唯一解决方案是将装饰器替换为无参数的“menu_permssion_required()”装饰器,并将所有权限硬编码到Python结构中。这似乎是一种倒退,因为我的自定义基于类的通用视图已经自动生成了所需的权限。

关于如何制作反映当前用户 URL 权限的菜单系统有什么建议吗?


以下是如何解决您的问题的示例:

首先,创建一个装饰器包装器来代替permission_required使用:

from django.contrib.auth.decorators import login_required, permission_required, user_passes_test
from django.core.exceptions import PermissionDenied
from functools import wraps
from  django.utils.decorators import available_attrs

def require_perms(*perms):
    def decorator(view_func):
        view_func.permissions = perms
        @wraps(view_func, assigned=available_attrs(view_func))
        def _wrapped_view(request, *args, **kwargs):
            for perm in perms:
                return view_func(request, *args, **kwargs)
            raise PermissionDenied()
        return _wrapped_view
    return decorator

然后,用它来装饰你的视图:

@require_perms('my_perm',)
def home(request):
.....

然后,添加一个用于菜单项的标签:

from django.core.urlresolvers import resolve

def check_menu_permissions(menu_path, user):
    view = resolve(menu_path)
    if hasattr(view.func, "permissions"):
        permissions = view.func.permissions
        for perm in permissions:
            if user.has_perm(perm):
                return True # Yep, the user can access this url
            else:
                return False # Nope, the user cannot access this url
    return True #  or False - depending on what is the default behavior

最后,在模板中构建菜单树时:

<button href="{{ some_path }} {% if not check_menu_permissions some_path request.user %}disabled="disabled"{% endif %} />

注意:我还没有用标签测试最后一部分,但我希望你明白了。这里的神奇之处在于将权限添加到装饰器中的view_func,然后您可以使用resolve(path)访问它。我不确定这在性能方面会如何表现,但毕竟这只是一个想法。

EDIT: 刚刚修复了示例中的一个错误..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找到 Django URL 所需的权限而不调用它们? 的相关文章

  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • Django模型递归关系

    为什么要创建递归关系 aField models ForeignKey self 这和上面的一样吗 class aClass models Model aField models ForeignKey aClass 当您希望父节点和子节点具
  • 没有 Neo4Django 的 Django 和 Neo4j

    我正在使用 Neo4j 以及 Postgres 构建一个 Django 应用程序 我发现这个 Django 集成称为新4django https github com scholrly neo4django 我想知道是否可以只使用neo4r
  • 使用单选按钮渲染 ChoiceField

    我从模型构建了这个表格 class Configure template forms Form subject type forms ChoiceField choices Subject type objects all 我想使用单选按钮
  • Python 和 Django IDE 具有远程编辑功能吗?

    我正在寻找一个 IDE 它允许我编辑远程 Python 项目 并且还具有良好的 Django 支持 远程命令执行以及远程调试 我已经尝试使用 PyCharm 和 Aptana 与 PyDev 但我在配置它们进行远程编辑时运气不佳 感谢您的帮
  • 基于连接表的 Django 过滤器

    我有两张桌子 class Client models Model name models TextField lastname models TextField class Meta managed False db table clien
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • Django admin:通过 URL 传递变量

    我想通过 URL 将变量传递到 django admin 中的另一个页面 看起来它不起作用 我想传递变量 name hello 并通过request GET get name 捕获它 但是url变成 e 1 经过之后 如果我使用默认参数 q
  • django 根据 UserProfile.language() 字段数据发送本地化电子邮件

    在我的优惠网站中 如果优惠满足某些要求 模型中指定的过滤器 用户可以设置电子邮件警报 因此 当用户 A 添加报价时 post save 信号将发送到 celery 并检查是否应用了用户警报过滤器 如果有 则发送电子邮件 问题是我不知道如何安
  • Google API OAuth 2.0 Titanium:缺少必需的参数:response_type

    我正在尝试在 Titanium 应用程序中从 Google 获取 access token 来访问 Google API 我已经注册了一个Android Oauth2 0客户端谷歌 API 控制台 https www rfc editor
  • django ajax post 403被禁止

    使用 django 1 4 当我尝试从我的 javascript 做我的 django 服务器上的帖子时 我收到 403 错误 我的 get 工作正常 尽管问题仅出在帖子上 也尝试过 csrf exempt但没有运气 更新 我现在可以发布我
  • 响应式菜单:悬停子菜单显示错误

    简而言之 我根据教程创建了一个响应式菜单 当您将鼠标悬停在投资组合按钮上时 菜单应该显示子菜单 而在移动模式下 您需要按该按钮才能显示子菜单 效果很好 问题是该教程有一个错误 如果您在桌面模式下按组合按钮 子菜单将不会再次显示 除非您按 单
  • 如何继承并重写 django 模型类来创建 listOfStringsField?

    我想为 django 模型创建一个新类型的字段 它基本上是一个 ListOfStrings 因此 在您的模型代码中 您将具有以下内容 模型 py from django db import models class ListOfString
  • Django - 简单的搜索表单

    使用 Django 1 9 和 Python 3 5 我想制作一个简单的搜索表单 views py from django views import generic from django shortcuts import render f
  • Django - 具有自动完成功能的 Javascript 动态内联 FormSet

    我正在尝试制作一种能够附加参与者的调度程序事件编辑器 Models class Session models Model start time models DateTimeField end time models DateTimeFie
  • Web 客户端和移动 REST API 安全性的推荐配置

    我意识到关于这个主题有很多问题 我已经研究了几天了 我想确保我的问题尽可能具体 因为我还没有完全理解最佳方法 目前我有一个开发的 django 站点 Web 客户端大约 95 是通过 django piston json REST api
  • 操作错误:游标“_django_curs_”不存在

    我们有一个由 django postgresql 和 heroku 提供支持的在线商店 Web 应用程序 对于特定的活动 您可以将活动视为要购买的产品 我们已成功售出 10 000 份以上的副本 然而 根据我们的 Sentry 报告 我们的
  • 在 Django Rest Framework 中访问视图集和序列化器中的请求对象?

    我想访问 DRF 中 Views py 和 Serializers py 中的请求对象 我的观点 py class ProductViewSet viewsets ReadOnlyModelViewSet This viewset auto
  • 我的本地 Eclipse 可以在 Docker 容器中安装 Access 库吗?

    我有一个用于 Django 开发的 Docker 映像 通过一些 xauthority 文件机制 我在容器内使用 Eclipse 在大多数情况下 Eclipse 运行良好 但存在一些棘手的问题 这些问题似乎与它在容器内运行的事实有关 毕竟
  • 无法使用数据库路由器通过 save_model 进行保存

    我正在使用数据库路由器 因此我的应用程序有两个数据库 一个数据库用于默认 django 数据 另一个数据库用于存储默认 django 数据 在我的管理员中我已经覆盖了save model函数以保存created by变量 但我无法做到这一点

随机推荐

  • Angular 2 Http 重试时间

    我正在尝试使用retryWhen在 HTTP 调用中 当尝试像这样使用时它工作得很好 return this http get environment apiUrl track this user instance id this curr
  • org.hibernate.event.def.EventCache 不支持 null 实体是什么意思?

    我在尝试保存实体时收到错误 我仅在启动服务器时收到此错误 而不是在使用 dbunit 运行单元测试时收到此错误 我正在努力拯救一个协会 我的单元测试应该与我在手动测试时遇到的情况完全相同 我正在关系的一端添加一个新实体 其中之前不存在任何关
  • 在 PowerPoint 中通过占位符名称处理形状

    我正在尝试创建一个函数 该函数将返回特定的形状 基于known分配给的名称属性CustomLayout Shapes Placeholder目的 我无法使用该形状 Name因为即使从模板 布局创建幻灯片时 这也是事先未知的 挑战似乎是自定义
  • 如何取消nuke pyside中的字体阴影

    I have a UI which automatically sets font shadow in nuke and how to cancel it I want the font on this button to look lik
  • git-svn:重置 master 的跟踪

    我在用着git svn使用 SVN 存储库 我的工作副本是使用创建的git svn clone s http foo bar myproject这样我的工作副本就遵循 SVN 的默认目录方案 主干 标签 分支 最近我一直在研究一个使用创建的
  • 动态选项卡中的动态内容(Angular、UI Bootstrap)

    我想在使用 AngularJs 和 UI Bootstrap 动态生成的选项卡的内容中使用 ng include 我这里有一个 Plunker http plnkr co edit 2mpbovsu2eDrUdu8t7SM p previe
  • 在 IIS 上运行时 GoogleWebAuthorizationBroker 将无法打开浏览器

    我有一个在 IIS 8 上运行的 Web 应用程序 这个 Web 应用程序 仅在本地运行 我们将其用作通过其打开的桌面应用程序Google Chrome 我正在尝试将视频上传到YouTube通过他们的 API 基本上我的问题就在这里 uc
  • Flutter:浮动操作按钮固定位置

    我有以下代码 return Scaffold appBar AppBar title Text Sample Code body ListView padding const EdgeInsets all 20 0 children
  • Typescript 库:隐藏内部导出

    我正在用 typescript 构建一个库 并通过 npm 发布 在作为库的起点的index ts中 所有公共类和枚举都被导出 import MyClass from internal my class import MyEnum from
  • 如何设置谷歌图表API区域设置

    我想将 google 图表 API 的语言设置为一个值 它当前使用访问该页面的浏览器的语言 如何将其设置为我的应用程序的语言 请参阅谷歌文档使用特定区域设置加载图表 https developers google com chart int
  • HTML 电子邮件 - 使图像适合表格单元格

    我有一张桌子 三个人td他们每个人都需要有图像 的宽度和高度td是固定的 但图像尺寸可能会变化 目标是在不扭曲细胞或图像本身的情况下拟合图像 不能用background image财产 我知道很糟糕 这是代码 table cellpaddi
  • 为什么预连接资源提示不起作用?

    我创建了一个测试页面crenshaw dev demo hints html http crenshaw dev demo hints html浏览器提示请求 dns prefetch 并预连接到 mac9416 com
  • PHP:对象类型转换为数组后出现奇怪的数组行为

    当你这样做时array的类型转换json decoded 值 与 assoc false PHP 创建一个带有字符串索引的数组 a array json decode 7 value1 8 value2 9 value3 13 value4
  • Spring Data Rest - PUT 存储库在子引用上静默失败

    I use Spring Data Rest with Spring Boot2 1 1 发布 我有课User with a ManyToMany与类的关系Skill 当我做一个POST用他的技能创建一个用户 一切都很顺利 当我做一个PUT
  • 公共常量字符串?

    可以使用这样的类 特定于设计 指南 吗 我正在使用 MVVM 模式 public static class Pages public const string Home Home xaml public const string View2
  • gets() 接受输入而不实际给它任何输入?

    我对 C 相当陌生 如果这是一个愚蠢的问题 我很抱歉 但是当我运行以下代码时 include
  • jsonp 没有在发送之前触发?

    我正在开发一个项目 使用 ajax 并将 dataType 设置为 jsonp 从不同域调用 Web 服务 ajax type GET url testService asmx async true contentType applicat
  • 你怎么知道何时使用左折叠和右折叠?

    我知道向左折叠会产生左倾树 而向右折叠会产生右倾树 但是当我伸手去寻找折叠时 有时我会发现自己陷入了令人头痛的想法中 试图确定哪种折叠是合适的 我通常最终会解开整个问题 并逐步完成适用于我的问题的折叠函数的实现 所以我想知道的是 确定向左折
  • 如何将 JCE 算法名称转换为 AlgorithmIdentifier 对象?

    我正在使用 BouncyCastle 1 54 我有一个 JCE 算法字符串 例如 ECDSAwithSHA256 我需要一个 org bouncycastle asn1 x509 AlgorithmIdentifier 对象 或者 我可以
  • 找到 Django URL 所需的权限而不调用它们?

    我的 Django 应用程序当前具有受 permission required 函数保护的 URL 该函数以三种不同的方式调用 作为views py中的装饰器 具有硬编码的参数 作为一个简单的函数 具有自动生成的参数 在自定义的基于类的通用