Skip to content

权限模型与生效规则 ​

网页端不做第二套权限数据:它直接读客户端「机构和权限」写下的那批表,并在其上多加了一条角色通道。所以判断「某个人能不能用某个功能」,必须同时看他的机构授权和角色授权,两边取并集——这就是用户角色分配页那句「机构授权∪角色授权并集生效」的含义。本篇讲清这四类权限、两条授权通道、三级菜单校验和缺省放行规则,后面几篇操作文档里遇到的现象都由这几条解释。

一、功能概述 ​

网页端一次访问要过四道闸门,各自管一件事、各有一张来源表:

层级管什么来源表网页端配置入口
菜单权限左侧菜单里看不看得到这个功能、直接拼 URL 能不能打开Right_Menu / View_RightMenu ← Right_Define客户端「机构和权限」;网页端 角色管理 → 功能授权 → 功能菜单 页签
窗口权限打开功能后能点哪些按钮:编辑、删除、导出数据、查看成本价、查看日志Right_FormRight ← Right_Define功能菜单页右侧「窗口菜单权限」勾选列
公共权限跨窗口的全局能力:导入导出报表、查询策略、可修改送审单据、发布公告Right_CommonRight ← Right_Define功能授权页 公共权限 页签
数据权限单据列表与详情里能看到谁做的单窗口权限项「允许查看他人单据」功能菜单页该单据窗口的「窗口菜单权限」勾选

两条授权通道写进同一张 Right_Define:

  • 机构授权——用户所属机构(Right_User.fDeptID)被授了哪些权限项。这一份和客户端「岗位权限」同源,客户端配好网页端直接生效,不需要在网页端重配一遍。
  • 角色授权——网页端独有。角色是一组权限项的集合,人通过「角色分配」绑上角色,就能在不改动机构权限的前提下单独放开某些功能。

两者的关系是并集:机构没给、角色给了,能用;机构给了、角色没给,也能用。角色只能加权限,不能用来扣掉机构已有的权限。

用户角色分配页:用户下拉、角色复选列表,以及「机构授权∪角色授权并集生效,保存即刷新缓存」的说明行

二、界面布局说明 ​

上图是 系统管理 → 用户管理 → 角色分配 打开的页面,四个区域:

区域内容
返回链接左上 ← 返回用户管理,回列表且不清空查询条件
页面标题用户角色分配
选人区用户下拉(显示 编号 - 姓名)+ 蓝色 加载 按钮。换人后必须点 加载,否则下方列表还是上一个人的勾选状态
说明行对 张工 分配角色(机构授权∪角色授权并集生效,保存即刷新缓存):——括号里就是本栏目全部生效规则的官方口径
角色列表每行一个复选框,格式 角色编号 - 角色名称(助记码),如 1000002 - 运营(/YY)
保存蓝色 保存 按钮,落库同时刷新该用户的权限缓存

三、业务操作步骤 ​

判断一个人到底有没有某项权限 ​

  1. 看菜单。左侧菜单树里找不到该功能,说明菜单权限就没给;找得到但点开后按钮是灰的,说明卡在窗口权限。
  2. 看机构。到 系统管理 → 用户管理 打开这个人,「核心信息」页签里的 所属部门 就是他的授权机构。同一个机构的人,机构授权部分完全一致。
  3. 看角色。点工具栏 角色分配,选到这个人点 加载,看哪些角色被勾上。
  4. 对照客户端。要确认机构这一份到底授了什么,回客户端「机构和权限」按岗位查,两边读的是同一张表。

只放开一个人,不牵连同机构同事 ​

  1. 系统管理 → 角色管理,点 新增 建一个角色,填角色名称和角色说明后 保存。
  2. 在角色列表该行点 功能授权,切到 功能菜单 页签,展开模块树勾选目标菜单项和需要的窗口权限;再切 公共权限 页签勾全局项,点 保存。
  3. 还在这一行点 人员绑定 → 添加,在「选择人员」窗口里搜到这个人,勾选后 确定。
  4. 回 用户管理,工具栏点 角色分配,选这个人 → 加载 → 勾上刚建的角色 → 保存。
  5. 让对方刷新页面。这一步保存时已主动刷新缓存,正常立刻可见;若他之前打开过功能页签,关掉页签重开一次。

给整个机构放开 ​

不要在网页端建角色绕,直接回客户端「机构和权限」给该岗位授权,网页端五分钟内自动跟上。角色是给「例外」用的,不是给「常规」用的。

四、字段详细说明 ​

菜单权限的三级校验 ​

一个菜单项要出现在某人的左侧菜单里,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设备授权与新设备验证。

相关文档 ​