You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为应用用户设置页面访问权限限制 有哪些更高效的实现方案

权限管控方案对比与落地建议

你当前考虑的为每个页面新增models.BooleanField的方案仅适合功能完全固定、后续不会新增权限项的极小项目,10个页面的场景下虽然暂时能跑,但可维护性极差:后续每新增一个功能页面都要修改用户表结构加字段,权限批量配置、角色复用的需求完全没法实现,后期会变成沉重的代码负债。

更优的实现方案可以根据你的项目规模从下面两种通用方案里选:

方案1:RBAC(基于角色的访问控制)—— 绝大多数场景的首选

这是行业通用的权限管控标准方案,核心逻辑是把权限和角色绑定,用户只需关联角色即可获得对应权限,不需要直接给单个用户配置单条权限:

  • 核心只需3张表实现(如果你用Django这类成熟框架,内置了现成的RBAC能力,直接调用内置模型即可,不需要从零写):
    • 权限表:存储所有页面/功能的权限信息,字段可设为id、权限名称、权限标识(比如user:create对应新增用户页)、对应页面路径
    • 角色表:存储不同身份的角色,比如系统管理员、销售主管、普通员工
    • 角色权限关联表:存储每个角色绑定的权限ID
    • 用户角色关联表:存储每个用户绑定的角色ID
  • 核心优势:
    • 新增权限只需要往权限表插入一条数据,不需要修改表结构
    • 同角色的用户批量调整权限时,只需要修改角色绑定的权限,不需要逐个修改用户属性
    • 后续要扩展按钮级、接口级权限可以直接在权限表新增字段兼容,扩展能力极强
  • 如果你用的是Django框架,直接调用内置auth模块的Permission、Group模型即可,给用户分配组、给组分配权限后,判断权限直接调用user.has_perm()方法即可,不用自己写逻辑。

方案2:权限位存储—— 适合超轻量、权限总数少于64个的场景

如果你的项目是小范围使用的内部工具,不想搞多表关联,也不想后续频繁加字段,可以用单个整数字段存储权限位,每个权限对应一个2的幂次方数值:

  • 示例规则:新增用户权限对应1 (2^0),查看用户列表对应2 (2^1),用户绩效对应4 (2^2),分配客户对应8 (2^3),以此类推
  • 用户模型里只需要加一个models.IntegerField类型的permission字段,用户拥有多个权限时把对应数值相加即可,比如同时有新增用户、查看用户列表权限,字段值为1+2=3
  • 权限判断用位与运算即可:if user.permission & 1 == 1就说明该用户拥有新增用户页面的访问权限
  • 优势:只需要一个字段就可以存储所有权限,不需要额外建表,查询判断效率极高
  • 劣势:权限数量最多只能到64个(对应64位整数的存储上限),没法做复杂的角色批量配置,只适合极简单的场景。

选择建议

如果你的应用后续还会迭代新增功能、用户量超过20人,直接选RBAC方案,现在多花半小时搭基础结构,后续能省好几天的改代码时间。如果是10人以内用的固定功能小工具,后续也不会加新权限,用权限位方案比你加10个BooleanField要整洁得多。

内容的提问来源于stack exchange,提问作者edche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:42:01