越权拦截与权限排查
网页端在功能权限之外还有一层硬拦截:即使有人手工拼出 URL 或直接调接口,没有授权也进不去。本文列出这三层拦截各自的表现、原样提示语和排查顺序,用来回答「为什么他看不到」「为什么他点保存报无权限」「明明配了还没生效」这三类问题。
一、功能概述
一次操作从上到下要穿三层,任何一层没过都会停在不同的现象上:
| 层 | 拦什么 | 没过时的表现 |
|---|---|---|
| 菜单层 | 左侧菜单里显示哪些功能、URL 能不能打开 | 菜单里没有这一项;直接访问 URL 出现「无权访问」页或接口返回 您没有权限访问此功能 |
| 动作层 | 窗口里的按钮:编辑、审核、反审核、导出、查看成本价、查看日志 | 按钮不出现或置灰;强行调用返回 无审核权限 / 无反审核权限 |
| 数据层 | 列表和详情里能看到谁做的单 | 列表只剩自己做的单;打开别人的单据被拒 |
三层读的是同一套授权数据(机构授权 ∪ 角色授权),区别只在检查的时机和返回的形式。
二、界面布局说明
菜单层被拦时,浏览器地址直接访问会拿到一张独立的拦截页,整页内容只有四样:
- 页面标题 无权限;
- 一枚橙色 ⚠️ 图标;
- 一行大字 无权访问,下面一行说明 您没有权限访问此页面,请联系管理员开通;
- 一个 返回首页 链接,跳回后台首页。
如果请求是页面内的异步调用(点按钮、加载表格),不会跳页,接口返回一条 403,前端弹出提示 您没有权限访问此功能。同一份拦截逻辑对两种请求给出两种形态,所以「打开页面白屏一下弹个提示」和「整页变成无权访问」是同一个原因。
三、业务操作步骤
遇到「无权访问」时的排查顺序
- 确认人。 让当事人看右上角当前登录的编号与姓名,常见情况是登错了同事的账号。
- 确认菜单权限。 到 系统管理 → 用户管理 → 角色分配,选这个人点 加载,看这个角色是否勾了;再回客户端「机构和权限」看他所属机构的授权。
- 确认三级校验。 到 系统管理 → 角色管理 → 功能授权,看这个功能的父模块和顶级模块是否也勾了。只勾叶子是最常见的配法错误。
- 确认动作层。 菜单能进、页面能开,只是某个按钮没有或报错,那是窗口权限项没给,在同一行的「窗口菜单权限」里补勾。
- 等缓存。 以上都改过并保存后,最多等五分钟;角色页与用户角色分配页的保存会主动刷新缓存,客户端改的机构授权不会。
- 重新登录。 让对方退出再登,排除会话里带的是旧权限快照。
判断是数据权限还是功能权限
- 列表能看到但只有一小部分单据,且缺的都是别人做的 → 数据权限。给这个窗口补勾「允许查看他人单据」。
- 列表完全打不开、菜单里也没有 → 菜单权限。
- 能看不能改、点编辑没反应 → 动作层的「可编辑」权限。
- 能改不能审核 → 审核动作的权限项。
给一个外部审计人员配最小可见范围
- 系统管理 → 角色管理 → 新增,命名
审计只读。 - 功能授权 → 功能菜单:只勾需要查看的报表叶子,父模块与顶级模块同步勾上;窗口权限只给 查看日志、导出数据,不给 编辑、不给 查看成本价。
- 公共权限 页签不勾任何项。
- 单据类窗口不勾「允许查看他人单据」,让他只能看到自己做的单;确实需要看全量时再单独放开。
- 人员绑定 加进审计人员,保存。
四、字段详细说明
提示语对照表
| 原文提示 | 出在哪一层 | 直接原因 |
|---|---|---|
无权访问 / 您没有权限访问此页面,请联系管理员开通 | 菜单层(整页) | 访问的 URL 不在该用户的允许清单里 |
您没有权限访问此功能 | 菜单层(异步请求) | 同上,请求由页面内按钮发出 |
无审核权限 | 动作层 | 点「单据生效」时缺该窗口的审核权限 |
无反审核权限 | 动作层 | 点「单据反审」时缺该窗口的反审权限 |
您的账号未绑定手机号,请联系管理员 | 登录层 | 新设备验证要求手机号,用户档案里为空 |
您的账号手机号格式不正确,请联系管理员 | 登录层 | 档案里的手机号不是 11 位纯数字 |
检测到新设备登录,请验证手机号 | 登录层 | 该「用户 + 设备」不在受信列表 |
URL 拦截的匹配规则
| 规则 | 说明 |
|---|---|
| 拦截范围 | 只拦后台页面路径下的请求,静态资源与媒体文件不拦 |
| 匹配方式 | 精确匹配或前缀匹配,允许清单里一条授权可覆盖其下所有子路径 |
| 内置放行 | 后台首页、退出登录、修改密码等公共页面始终放行,不受授权影响 |
| 新增功能放行 | 网页端新增、在 ERP 菜单表里没有对应项的功能(如提醒设置)不做菜单校验,始终放行 |
| 会话有效期 | 后台会话 30 分钟无操作失效,关闭浏览器即失效 |
缺省放行的边界
以下情况系统按「有权限」处理,配权限时不要误以为已经收紧:
- 该窗口的这项权限名在系统里根本没登记;
- 该窗口一条权限项都没配过;
- 该公共权限项不存在于权限定义表;
- 该 URL 没有 ERP 菜单对应项。
要收紧必须先让权限项存在,再谈授权。
五、典型使用场景
报表能打开但导出按钮不见了。 导出是窗口权限项 导出数据,到功能授权页对应菜单项那一行补勾,保存后让对方关掉页签重开。
销售同事看不到别人开的销售单。 销售类单据启用了数据权限,给他的角色补上销售单窗口的「允许查看他人单据」。注意个别单据类型(如季节品订单)强制只看自己做的,补权限也放开不了。
财务能看凭证但点不了审核。 审核是独立的动作权限,与「可编辑」不是一回事,需要在窗口权限里单独给。
用户说昨天还能用今天不行。 依次核对:是否被换了所属部门、角色绑定是否被清理、是否只是会话过期重新登录(此时若换了设备还会先撞新设备验证)。
给新门店批量配权限。 不要在网页端逐人建角色。先在客户端按同类型门店给新机构授权,网页端只负责把人挂到这个机构下。
六、权限控制与前置条件
- 排查用的 用户管理、角色管理、机构管理 三个入口本身也需要 系统管理 模块授权,普通业务岗看不到这些菜单属正常。
- 修改机构授权在客户端「机构和权限」完成,网页端只能改角色这一侧;两边写的是同一张授权表。
- 客户端侧的权限约束(只有正式员工与兼职关系参与权限计算、上级取消会连带下级等)同样适用于网页端读到的这份数据,见 60权限设置常见报错与业务约束。
- 收银终端与云 POS 分组的菜单权限在网页后台另有独立配置入口,与本文的功能授权互不影响。
七、常见问题
配完权限刷新页面没反应。 权限结果缓存 300 秒,且页签里已打开的功能可能带着旧快照。关掉页签、退出重登,或等五分钟。
同一个人在两台电脑权限不一样。 功能权限不区分设备;差异通常来自新设备验证卡在登录环节,或两边登录的不是同一个编号。
给某人建了角色也绑了人,他还是看不到菜单。 九成是三级校验没过——父模块或顶级模块没勾。先补勾上级,再看是否保存。
想临时禁掉某个人的所有功能。 别动权限。到 用户管理 把他的 允许登陆 开关关掉,恢复快、不留副作用。
直接访问 URL 能看到别人的单据详情。 数据层对详情页有独立拦截:未获「允许查看他人单据」的人访问他人单据会直接被拒。若确实出现越权,先确认这个人是否属于超级管理员编号——超管在窗口权限与数据权限判定处直接放行。
接口报 403 但页面能打开。 页面打开走的是菜单层,接口调用还要过动作层,两层权限项不同名,需要分别配。
相关文档
- 本目录:权限模型与生效规则、角色管理、用户管理、设备授权与新设备验证
- 客户端同类内容:60权限设置常见报错与业务约束、80菜单权限主体查询、30数据权限
- 通用操作:单据窗口通用操作
