数据权限使用手册

概述

数据权限是智富ERP中控制不同角色/部门/用户能查看哪些业务数据的精细化权限机制。它与菜单权限不同:菜单权限控制"能看到什么页面",数据权限控制"在页面里能看到哪些数据"。

数据权限分为两大类:

权限类型 说明 影响范围
商品数据权限 限制可查看的商品范围 商品列表、库存查询、采购/销售单据中的商品选择器等
单据数据权限 限制可查看的单据范围 销售单、采购单、出入库单、盘点单、结算单等各类业务单据

进入数据权限设置

  1. 登录系统后,进入 系统管理 → 角色管理(或部门管理、用户管理)
  2. 在列表中找到需要设置数据权限的角色(或部门、用户)
  3. 点击操作列的 "数据权限" 按钮
  4. 弹出"数据权限"弹窗,包含两个配置项:
    • 商品数据权限 — 点击"点此设置"配置
    • 单据数据权限 — 点击"点此设置"配置

也可勾选多条记录后,点击工具栏的 "批量数据权限" 为多个角色/部门/用户统一设置。

权限规则编辑器使用说明

点击"点此设置"后,会打开规则编辑器。编辑器分为左右两个面板:

左侧面板 — 节点工具箱

  • 运算节点:提供"并且"(AND)和"或者"(OR)两种逻辑连接符,用于组合多个条件
  • 条件节点:列出当前权限类型可用的所有筛选条件,点击即可添加到规则树中

右侧面板 — 规则树配置区

规则的根节点必须是运算节点(AND 或 OR)。每个运算节点下可以包含:

  • 子运算节点(嵌套逻辑)
  • 条件节点(具体的筛选条件)

条件类型

条件节点支持以下比较方式:

条件类型 说明 示例
等于 精确匹配 品类编号 = "电子"
大于 数值/日期大于 创建时间 > 2026-01-01
大于或等于 数值/日期大于等于 价格 >= 100
小于 数值/日期小于 价格 < 500
小于或等于 数值/日期小于等于 创建时间 <= 2026-06-30
不等于 排除特定值 编号 ≠ "TEST001"
在列表中 匹配多个值 品类编号 IN ["电子", "食品"]
不在列表中 排除多个值 品牌编号 NOT IN ["品牌A"]
结尾 模糊匹配 — 以指定字符串结尾 名称以"手机"结尾
开头 模糊匹配 — 以指定字符串开头 编号以"SKU"开头
包含 模糊匹配 — 包含指定字符串 名称包含"苹果"

一、商品数据权限(商品权限)

可用的筛选条件

商品数据权限提供了 13 个条件字段,涵盖商品基本信息和关联数据:

商品基本字段

条件名称 对应字段 输入方式 说明
编号 product.code 文本输入 商品的唯一编码
名称 product.name 文本输入 商品名称,支持模糊匹配(等于/开头/结尾/包含)
简称 product.short_name 文本输入 商品简称/别名
SKU product.sku_code 文本输入 SKU 编码
简码 product.external_code 文本输入 外部编码/助记码
规格 product.spec 文本输入 商品规格型号
单位 product.unit 文本输入 计量单位(个/箱/件等)
状态 product.available 选择框 启用/禁用的商品
创建时间 product.create_time 日期/时间选择 商品的创建时间范围

关联分类与品牌字段

条件名称 对应字段 说明
品类编号 category.code 商品所属品类的编号
品类名称 category.name 商品所属品类的名称
品牌编号 brand.code 商品品牌的编号
品牌名称 brand.name 商品品牌的名称

配置示例

示例 1:限定角色只能查看特定品类

场景:某采购员角色只能查看"电子"和"食品"品类的商品。

配置步骤:

  1. 进入该角色的数据权限 → 商品数据权限 → 点此设置
  2. 默认已有 AND 根节点
  3. 点击"品类编号"条件节点
  4. 选择条件类型为"在列表中"
  5. 输入品类编号值:电子食品
  6. 点击确定

效果:分配此角色的用户登录后,在商品列表、库存查询、单据中选择商品时,只能看到属于"电子"或"食品"品类的商品。

示例 2:限定角色只能查看启用的特定品牌商品

场景:某销售人员只能查看"品牌A"的启用状态商品。

配置步骤:

  1. 进入数据权限 → 商品数据权限 → 点此设置
  2. 根节点保持 AND
  3. 添加"品牌名称"条件 → 条件类型"等于" → 值输入 品牌A
  4. 添加"状态"条件 → 条件类型"等于" → 选择"启用"
  5. 确定保存

效果:同时满足"品牌=品牌A"且"状态=启用"的商品才会显示。

示例 3:复杂组合条件

场景:限定角色可以查看"电子"品类下的所有商品,以及"食品"品类下最近一年创建的商品。

配置步骤:

  1. 根节点设为 AND
  2. 添加子运算节点 OR,包含:
    • 条件"品类名称 = 电子"
    • 子运算节点 AND,包含:
      • 条件"品类名称 = 食品"
      • 条件"创建时间 >= 2025-08-01"
  3. 确定保存

效果:最终权限SQL为 (category.name = '电子' OR (category.name = '食品' AND product.create_time >= '2025-08-01'))


二、单据数据权限(单据权限)

可用的筛选条件

单据数据权限目前提供 4 个条件字段,主要围绕单据创建人的部门关系:

条件名称 说明 输入方式
创建时间 单据的创建时间范围 日期/时间选择
创建人部门与本人相同 只查看创建人部门与当前用户部门相同的单据 SQL型,无需输入值
创建人部门是本人的上级部门 只查看创建人部门是当前用户部门上级的单据 SQL型,无需输入值
创建人部门是本人的下级部门 只查看创建人部门是当前用户部门下级(含自身)的单据 SQL型,无需输入值

配置示例

示例 1:限定角色只能查看本部门的单据

场景:某部门主管只能查看和操作本部门人员创建的单据。

配置步骤:

  1. 进入该角色的数据权限 → 单据数据权限 → 点此设置
  2. 根节点保持 AND
  3. 添加"创建人部门与本人相同"条件
  4. 确定保存

效果:分配此角色的用户登录后,在销售单、采购单、出入库单等所有业务单据列表中,只能看到创建人所属部门与自己相同的人员创建的单据。

示例 2:限定角色查看本部门及下级部门的单据

场景:区域经理需要查看本部门和所有下级部门的业务单据。

配置步骤:

  1. 进入数据权限 → 单据数据权限 → 点此设置
  2. 根节点保持 AND
  3. 添加"创建人部门是本人的下级部门"条件
  4. 确定保存

效果:用户可以看到创建人部门是自己部门或其下级部门的所有单据。"下级部门"包含本部门自身。

示例 3:限定角色查看本部门在特定时间范围内的单据

场景:财务人员只能查看本部门当年创建的单据。

配置步骤:

  1. 进入数据权限 → 单据数据权限 → 点此设置
  2. 根节点保持 AND
  3. 添加"创建人部门与本人相同"条件
  4. 添加"创建时间"条件 → 条件类型"大于或等于" → 选择 2026-01-01
  5. 确定保存

效果:两个条件同时满足(AND),仅显示本部门且2026年以后创建的单据。


权限生效机制

优先级与叠加规则

数据权限可以在三个层级设置:

层级 设置位置 说明
角色级 角色管理 → 数据权限 该角色下所有用户都受此限制
部门级 部门管理 → 数据权限 该部门下所有用户都受此限制
用户级 用户管理 → 数据权限 仅对指定用户生效

叠加规则:所有层级的权限取交集(AND)。

例如:用户张三属于"采购员"角色(商品权限=只能看电子品类),同时所在部门设置了商品权限(只能看品牌A),用户个人未设置。则张三最终看到的数据同时满足"品类=电子 AND 品牌=品牌A"。

管理员豁免

  • permission = "admin" 的角色不能被设置数据权限(系统会拦截并提示"不允许对管理员角色设置数据权限")
  • 拥有 admin 角色的用户登录后也不受数据权限限制,可以查看全部数据

生效时机

数据权限在用户登录时加载并存入服务端Session。如果修改了数据权限配置,相关用户需要重新登录才能生效。


注意事项

  1. 规则不能为空逻辑:如果最外层节点是运算节点但没有子节点,保存时会校验失败。至少需要添加一个条件。

  2. 条件值必填:除 SQL 类型的条件(如单据权限中的部门关系条件)外,所有条件节点必须填写比较值。

  3. 单据权限基于创建人部门:单据权限的核心判断依据是单据创建人所属的部门,因此需要确保用户和部门信息维护准确。

  4. SQL预览功能:在规则编辑器中,点击左下角的"预览SQL"按钮可以查看当前规则树生成的SQL WHERE 片段,便于验证配置是否正确。

  5. 系统管理员不受限:系统管理员的角色具有 admin 权限标识,不受任何数据权限限制。不要为系统管理员角色设置数据权限。

  6. 跨模块影响:商品数据权限不仅影响"商品管理"页面,还会影响采购单、销售单、出入库单等所有涉及商品选择的地方。单据数据权限影响所有业务单据列表和报表。