权限模型与生效规则
网页端不做第二套权限数据:它直接读客户端「机构和权限」写下的那批表,并在其上多加了一条角色通道。所以判断「某个人能不能用某个功能」,必须同时看他的机构授权和角色授权,两边取并集——这就是用户角色分配页那句「机构授权∪角色授权并集生效」的含义。本篇讲清这四类权限、两条授权通道、三级菜单校验和缺省放行规则,后面几篇操作文档里遇到的现象都由这几条解释。
一、功能概述
网页端一次访问要过四道闸门,各自管一件事、各有一张来源表:
| 层级 | 管什么 | 来源表 | 网页端配置入口 |
|---|---|---|---|
| 菜单权限 | 左侧菜单里看不看得到这个功能、直接拼 URL 能不能打开 | Right_Menu / View_RightMenu ← Right_Define | 客户端「机构和权限」;网页端 角色管理 → 功能授权 → 功能菜单 页签 |
| 窗口权限 | 打开功能后能点哪些按钮:编辑、删除、导出数据、查看成本价、查看日志 | Right_FormRight ← Right_Define | 功能菜单页右侧「窗口菜单权限」勾选列 |
| 公共权限 | 跨窗口的全局能力:导入导出报表、查询策略、可修改送审单据、发布公告 | Right_CommonRight ← Right_Define | 功能授权页 公共权限 页签 |
| 数据权限 | 单据列表与详情里能看到谁做的单 | 窗口权限项「允许查看他人单据」 | 功能菜单页该单据窗口的「窗口菜单权限」勾选 |
两条授权通道写进同一张 Right_Define:
- 机构授权——用户所属机构(
Right_User.fDeptID)被授了哪些权限项。这一份和客户端「岗位权限」同源,客户端配好网页端直接生效,不需要在网页端重配一遍。 - 角色授权——网页端独有。角色是一组权限项的集合,人通过「角色分配」绑上角色,就能在不改动机构权限的前提下单独放开某些功能。
两者的关系是并集:机构没给、角色给了,能用;机构给了、角色没给,也能用。角色只能加权限,不能用来扣掉机构已有的权限。

二、界面布局说明
上图是 系统管理 → 用户管理 → 角色分配 打开的页面,四个区域:
| 区域 | 内容 |
|---|---|
| 返回链接 | 左上 ← 返回用户管理,回列表且不清空查询条件 |
| 页面标题 | 用户角色分配 |
| 选人区 | 用户下拉(显示 编号 - 姓名)+ 蓝色 加载 按钮。换人后必须点 加载,否则下方列表还是上一个人的勾选状态 |
| 说明行 | 对 张工 分配角色(机构授权∪角色授权并集生效,保存即刷新缓存):——括号里就是本栏目全部生效规则的官方口径 |
| 角色列表 | 每行一个复选框,格式 角色编号 - 角色名称(助记码),如 1000002 - 运营(/YY) |
| 保存 | 蓝色 保存 按钮,落库同时刷新该用户的权限缓存 |
三、业务操作步骤
判断一个人到底有没有某项权限
- 看菜单。左侧菜单树里找不到该功能,说明菜单权限就没给;找得到但点开后按钮是灰的,说明卡在窗口权限。
- 看机构。到 系统管理 → 用户管理 打开这个人,「核心信息」页签里的 所属部门 就是他的授权机构。同一个机构的人,机构授权部分完全一致。
- 看角色。点工具栏 角色分配,选到这个人点 加载,看哪些角色被勾上。
- 对照客户端。要确认机构这一份到底授了什么,回客户端「机构和权限」按岗位查,两边读的是同一张表。
只放开一个人,不牵连同机构同事
- 系统管理 → 角色管理,点 新增 建一个角色,填角色名称和角色说明后 保存。
- 在角色列表该行点 功能授权,切到 功能菜单 页签,展开模块树勾选目标菜单项和需要的窗口权限;再切 公共权限 页签勾全局项,点 保存。
- 还在这一行点 人员绑定 → 添加,在「选择人员」窗口里搜到这个人,勾选后 确定。
- 回 用户管理,工具栏点 角色分配,选这个人 → 加载 → 勾上刚建的角色 → 保存。
- 让对方刷新页面。这一步保存时已主动刷新缓存,正常立刻可见;若他之前打开过功能页签,关掉页签重开一次。
给整个机构放开
不要在网页端建角色绕,直接回客户端「机构和权限」给该岗位授权,网页端五分钟内自动跟上。角色是给「例外」用的,不是给「常规」用的。
四、字段详细说明
菜单权限的三级校验
一个菜单项要出现在某人的左侧菜单里,Right_Define 必须同时存在三条 fRightType = 1 的记录:
| 级别 | 校验对象 | 说明 |
|---|---|---|
| 第 1 级 | 菜单项本身(fMenuID) | 功能授权页里那一行的勾选框 |
| 第 2 级 | 父模块(fParentModuleId) | 值为 -1 时这一级自动通过,即直接挂在顶级模块下的菜单项 |
| 第 3 级 | 顶级模块(fModuleID) | 模块名本身也要授权 |
三级是 AND 关系。只在叶子上打了勾、上级模块没勾,菜单树里依然看不到这个功能——这是「明明勾了却没生效」的头号原因。
功能授权页的「层级」列就是这三级的直观体现:
| 层级值 | 含义 | 能否勾窗口权限 |
|---|---|---|
| 模块 | 顶级模块,如 采购管理、系统维护 | 否 |
| 子模块 | 模块下的分组,如 配货控制 | 否 |
| 菜单项 | 可打开的叶子功能,如 仓库配货标准 | 是,右侧出现勾选框 |
缺省放行规则
网页端对「没配过」的情况一律按有权限处理,这是为了兼容尚未配置权限项的老账套:
| 情况 | 结果 |
|---|---|
Right_FormRight 里查不到这个窗口的这项权限 | 视为有权限 |
| 该窗口一条权限项都没配 | 视为全部权限都有 |
Right_CommonRight 里不存在这个公共权限项 | 视为有权限 |
| 这个 URL 不在 Django↔ERP 菜单映射表里(网页端新增功能,如提醒设置) | 始终放行,不做菜单校验 |
用户 fDeptID 查不到(-1) | 机构这一侧一条权限都没有,只能靠角色 |
所以「没勾 = 不能用」只在该权限项已经在系统里登记过时成立。新上的功能若没登记权限项,所有人默认能用。
超级管理员
系统参数 TRIGHTDM_OPTION 的 SUPERUSERNO 与用户编号(去空格、转大写后)相同,即判定为超级管理员。它在窗口权限、公共权限、数据权限的判定处直接放行,用于配方编辑、成本查看这类高危入口。它不改变菜单集合的算法。
缓存与生效时间
| 项 | 值 |
|---|---|
| 权限缓存有效期 | 300 秒(5 分钟) |
| 缓存键前缀 | erp_perm,按机构 ID + 菜单名 / 权限类型分别建键 |
| 角色分配、功能授权保存时 | 主动刷新缓存,立即生效 |
| 客户端改机构权限后 | 最长等 5 分钟 |
五、典型使用场景
店长要看某个报表,但他的机构本来没有。 建一个只含这一个报表菜单项的角色,人员绑定到店长本人,保存即生效。不动机构权限,同机构其他人不受影响。
总部运营岗要看全公司的单。 机构授权给到对应模块,再由角色补上该单据窗口的「允许查看他人单据」这一项窗口权限。数据权限按窗口分别生效,个别单据类型(如季节品订单)会强制只看自己做的单。
新门店开业。 先在 系统管理 → 机构管理 把机构建出来,再在客户端「机构和权限」按同类型门店授权,最后到 用户管理 建操作员并把所属部门选到这个新机构。顺序不能反——机构不存在,用户就没有可归属的授权来源。
排查「昨天还能用今天不能用」。 先看是不是会话过期后重新登录(会话 30 分钟无操作失效),再看这个人是否被调换了所属部门,最后看他的角色绑定是否被动过。
六、权限控制与前置条件
- 本栏目所有入口都在左侧菜单 系统管理 分组下:用户管理、机构管理、角色管理、收藏配置、权限系统特点。没有该模块授权的人看不到这一组菜单,也就无法自行提权。
- 给用户加角色、改角色权限,本身要求操作者有 系统管理 的菜单权限和对应窗口的「可编辑」权限。
- 机构与操作员的新增、调动、离职在客户端做更完整;网页端 用户管理 覆盖日常增改,两边写同一批表。
- 修改会计期、月结、锁定账簿等动作不属于权限范畴,见 数据安全管家。
七、常见问题
功能授权里勾了菜单项,用户菜单里还是没有。 九成是上级模块没勾。菜单权限是三级 AND,把父模块和顶级模块一起勾上再保存。
在客户端改了机构权限,网页端刷新页面没变化。 权限结果缓存 5 分钟。等五分钟再登录,或让管理员在角色分配页随便保存一次触发缓存刷新。
给某人建了角色并绑定了人,他还是用不了。 检查三件事:角色授权页是否点了 保存;这个人是否在 用户管理 → 角色分配 里被勾上并保存(人员绑定只建立「谁属于这个角色」的关系,用户侧的分配记录也要保存);换人后是否点了 加载。
一个功能所有人都能用,从没给过权限。 该功能的权限项没在 Right_FormRight / Right_CommonRight 里登记,属于缺省放行。要收口得先在客户端把权限项配出来。
想靠角色把机构已有的权限收回来。 做不到。两条通道是并集,角色只能加不能减;要收回必须去客户端改机构授权。
同一个人在不同电脑权限不一样。 权限本身不区分设备,但登录环节区分:新设备要过手机验证,详见 50设备授权与新设备验证。
相关文档
- 本目录:角色管理、用户管理、机构管理、设备授权与新设备验证、越权拦截与权限排查
- 客户端同类内容:权限设置总览、40权限配置_岗位权限与个人独立权限、80菜单权限主体查询、85公共权限主体查询
- 通用操作:界面骨架与页签操作、单据窗口通用操作
