当前位置: 首页 > news >正文

django-guardian:Django 对象级权限的简洁实现

文章目录

  • django-guardian:Django 对象级权限的简洁实现
    • 1、这玩意儿是干嘛的
    • 2、装起来麻烦吗
    • 3、怎么用
    • 4、Admin 里也能用
    • 5、适合哪些人用

django-guardian:Django 对象级权限的简洁实现

django-guardian 在 GitHub 上已经拿到 3,903 Star。

它是一个 Django 扩展,只做一件事:在 Django 自带的权限体系之上,补上对象级别的权限控制。Django 原生的权限模型管的是「能不能改所有文章」,guardian 让你能精确到「能不能改这一篇文章」。

1、这玩意儿是干嘛的

Django 自带的 auth 模块已经够用了,用户、组、权限表都建好了。但它有个局限:权限是全局的。你给某个用户分配了「change_post」权限,他就能改所有文章。

实际业务里这种粒度太粗了。一个协作平台里,A 用户只能编辑自己创建的项目,B 用户可以编辑团队项目但不能碰别的团队的东西。这种场景下,你需要的是针对单个对象的权限判定。

django-guardian 就是填这个坑的。它增加了一层 ObjectPermissionBackend,让你能给某个用户或某个组,针对某个具体对象分配权限。

2、装起来麻烦吗

不麻烦,三步搞定。

先装包:

uvadddjango-guardian

或者用 pip 也行:

pipinstalldjango-guardian

然后改配置。settings.py 里加两行:

INSTALLED_APPS=(...'guardian',)AUTHENTICATION_BACKENDS=('django.contrib.auth.backends.ModelBackend','guardian.backends.ObjectPermissionBackend',)

最后跑迁移:

python manage.py migrate

完事。

3、怎么用

核心就几个 shortcut 函数。最简单的场景:给某个用户针对某个对象授权。

fromdjango.contrib.auth.modelsimportUser,Groupfromguardian.shortcutsimportassign_perm jack=User.objects.create_user('jack','jack@example.com','topsecretagentjack')admins=Group.objects.create(name='admins')# 分配对象级权限assign_perm('change_group',jack,obj=admins)# 检查:针对这个具体对象,jack 有权限jack.has_perm('change_group',admins)# True# 但全局权限仍然没有jack.has_perm('change_group')# False

这就是 guardian 的关键设计:对象权限和全局权限分开存储、分开检查。has_perm('change_group', obj)查的是对象级表,has_perm('change_group')查的是 Django 原生的权限表,两者互不干扰。

4、Admin 里也能用

Django 的后台管理页面也可以集成 guardian。把 ModelAdmin 换成 GuardedModelAdmin,后台就会自动多出一个对象权限管理面板,直接在页面上给用户或组分配针对单个实例的权限。

fromdjango.contribimportadminfromguardian.adminimportGuardedModelAdminfrommyapp.modelsimportAuthorclassAuthorAdmin(GuardedModelAdmin):passadmin.site.register(Author,AuthorAdmin)

如果你在用 django-unfold 美化后台,guardian 也有现成的 contrib 模块支持,不需要自己写适配代码。

5、适合哪些人用

  • 做多租户系统、需要让不同用户只看到/操作自己数据的 Django 开发者
  • 做内容协作平台、需要细粒度权限控制的团队
  • 在 Django Admin 里就想完成权限分配、不想另搭一套权限后台的人

测试覆盖率 97.8%,维护得还算积极,文档也齐全。如果你在用 Django 且被全局权限的限制卡过,这个库值得看看。

  • 在 Django Admin 里就想完成权限分配、不想另搭一套权限后台的人

测试覆盖率 97.8%,维护得还算积极,文档也齐全。如果你在用 Django 且被全局权限的限制卡过,这个库值得看看。

http://www.gsyq.cn/news/1488983.html

相关文章:

  • 2026年 烟台推拉门十大品牌推荐榜:钛镁合金/极窄边框/完美系统平开门与口袋门厂家实力解析 - 品牌发掘
  • RTSPtoWeb:如何用纯Go实现零依赖实时视频流转换的革命性架构
  • 2026 温州防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 看懂参数不被坑|2026新手电钢琴选购指南,全段位机型精准推荐
  • V6.0大佬复活版,这版绝对爽!
  • 2026年最新的 北美黑胡桃木家具宋式美学家具 知名品牌 排行榜 北美黑胡桃木家具、宋式美学家具品牌推荐 国内 国际 - 奔跑123
  • 小白 / 转行程序员 AI 大模型全攻略:行业前景、6 大岗位详解 + 七阶段学习路线
  • 2026 惠州本地人必选防水补漏 TOP5 测评|附近同城上门,卫生间外墙漏水维修优选万成防水 - 吉林同城获客
  • 提示词工程基础语法新手入门指南
  • Skills Hub:AI编程Agent技能的“App Store“,一次安装全局同步
  • SRWE窗口分辨率自定义工具:如何用3个步骤突破游戏画面限制?
  • 制造业的知识都在老师傅脑子里,怎么装进AI?
  • 2026年,电子产品外贸独立站建站公司凭啥能成行业新宠?
  • 样本TCR库相似性计算Morisita–Horn
  • 如何让机器人在未知环境中实时构建3D地图?RTAB-Map技术深度解析
  • 幻兽帕鲁存档转换终极指南:安全编辑游戏数据的完整解决方案
  • VC++6.0开发的轻量级网络资产探测工具:支持主机发现、端口扫描、服务识别与常见漏洞初筛
  • 2026 泉州本地人必选防水补漏 TOP5|卫生间免砸砖、屋顶 / 外墙 / 地下室防水|同城上门 1–2h|2026 年 6 月最新调研 - 吉林同城获客
  • AI-Shoujo HF Patch终极指南:一站式游戏增强解决方案 [特殊字符]
  • 2.初识网络代码——python基础代码
  • 计算机小程序毕设实战-ssm基于springboot+微信小程序的中小学生个性化阅读平台小程序的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 若依框架导出Excel合并行功能详解:从注解配置到源码改造的完整指南
  • 手机 Vibe Coding 半年,终于从能跑到真爽了
  • 终极杀戮尖塔模组管理器:3步开启无限游戏可能
  • 合并采集数据图片进展AI识别
  • 蓝牙LE纽扣电池供电设计:峰值电流抑制硬件方案与KW47软件优化
  • Navicat无限试用终极指南:macOS用户必备的14天限制破解方案
  • 网盘限速太折磨?试试这个神奇的网盘直链提取工具
  • 信创环境避坑实录:在飞腾2000+银河麒麟V10上,用Docker 19.03.9部署达梦8.1数据库
  • BetterNCM-Installer:网易云音乐插件一键安装的终极解决方案