• 单据权限简单介绍

    业务背景

    假设系统中存在一张订单表,订单表中有来源公司,创建人,业务类型,订单金额等字段,此时有需求说需要让不同的角色或者用户能够查看的订单按照多种维度动态控制,比如管理员可以查看所有订单,某个销售员仅能查看部分负责公司的订单,客户业务人员仅能查看自己创建的订单,采购员仅能查看某些类型的订单。 也就是需要针对不同的人或者角色对某一业务功能坐不同维度的动态权限控制。单据权限就是为此类需求提供一个解决方案。

    在上述的示例中,“订单”将作为“单据”,“来源公司”,“创建人”,“业务类型”作为“单据维度”,通过给不同的角色或者用户分配不同的维度,并且在维度下分配数据来实现一个精确的访问控制。

    概念说明

    注意

    单据权限

    单据权限主要用于配置业务单据类型以及可控制的权限维度基础数据,配合角色、子账户的权限管理,进行单据数据权限的限制,为HZERO平台提供一种可选的基础数据权限屏蔽功能。通过配置单据维度单据权限灵活的生成数据权限屏蔽规则,免去了手动配置权限规则大量sql代码

    单据权限

    单据权限列表

    字段说明:

    字段名称 字段描述 必输 可修改
    单据编码 单据权限类型唯一标识
    单据名称 单据权限类型的名称
    来源微服务 HADM.ROUTE.SERVICE_CODE值集视图中选取微服务,是数据屏蔽的目标微服务,作用于权限范围
    来源数据实体 SqlID,如org.hzero.platform.infra.mapper.LovMapper.selectLovHeaders
    层级 平台:权限范围为平台下所有租户;
    租户:权限范围为租户维护下配置的租户。
    权限控制类型 所有人:单据权限对单据权限范围定义下的所有用户生效;
    仅配置:单据权限仅对分配了该单据的角色生效。
    排序号 用于排序
    描述 单据权限类型的描述信息
    启用 启用和禁用两种状态,当为禁用时不能使用该单据权限类型
    租户维护 当层级为平台时可配置,点击新建按钮从HPFM.TENANT值集视图中选择添加租户,点击删除按钮删除选择的租户

    查询单据权限类型定义

    操作步骤:进入系统管理 > 单据权限管理 > 单据权限界面,输入查询条件, 点击按钮,查询到对应的信息。点击重置按钮,清空查询条件。

    查询字段:

    新建单据权限类型定义

    操作步骤:进入系统管理 > 单据权限管理 > 单据权限界面,点击新建按钮,进入单据类型定义界面,输入完成信息后,点击确定按钮,完成单据权限类型定义。

    必输字段:

    非必输字段:

    编辑单据权限类型定义

    操作步骤:进入系统管理 > 单据权限管理 > 单据权限界面,点击操作列编辑,进入编辑页面,输入完成消息后点击确定按钮,编辑完成。

    字段与新建页面字段一致。也可进行租户维护操作。

    维护权限维度

    操作步骤:进入系统管理 > 单据权限管理 > 单据权限界面 点击操作维护权限维度

    权限维度类型

    字段说明

    字段名称 字段描述 必输 可修改
    限定业务范围 类型为业务范围的单据维度,如:公司/业务实体等
    限定个人用户 类型为个人用户的单据维度,如:创建人/创建时间等
    来源匹配表 与单据维度的值对比的目标表,当前业务范围需要限制的表名
    规则类型 :来源匹配字段为来源匹配表中的一个字段;
    子查询:来源匹配字段为与来源匹配表关联的一个子查询SQL
    来源匹配字段 与单据维度的值对比的目标表字段,当前业务范围需要限制的字段

    子查询示例,假设现在订单中存在创建人字段created_by,现在需求是需要按照用户所有角色做拦截,也就是仅允许查看拥有某些角色的用户的单据,但是订单表并没有关联用户角色,所以此处无法直接通过列来筛选,这时候就可以使用子查询来实现,示例规则如下(#{tableAlias}代表来源表的表别名):

    SELECT imr.role_id 
    FROM iam_member_role imr 
    WHERE #{tableAlias}.created_by = imr.member_id 
    AND imr.member_type = 'user'
    

    操作

    作用

    维护权限维度为单据权限配置单据维度,相当于添加数据屏蔽规则,每个单据维度都是数据屏蔽条件。单据权限对数据屏蔽仍是通过数据权限实现,维护一个单据维度后会动态配置上对应的权限范围权限规则

    新建维护的单据维度都会生成对应的权限规则和权限范围,可在编辑维度权限页面上查看对应数据屏蔽规则

    编辑维护的单据维度同时会修改对应权限规则,如果修改了来源匹配表字段则会生成新的权限范围,原来的权限范围会保留并删除与权限规则的对应关系。 删除维护的单据维度会禁用对应的权限规则,禁用单据权限会禁用该单据权限对应的所有权限规则。目前以上对单据权限的操作需要重新保存单据权限才能对权限规则和权限范围生效。

    单据权限优先级

    角色管理配置的单据权限优先级低于子账户管理,如用户A配置了单据权限B1,A当前角色配置有单据权限B2,这单据权限B1生效

    角色管理-维护数据权限

    点击操作列下操作维护数据权限

    维护数据权限的修改需要点击保存按钮后生效

    权限维度 Tab页

    页面布局

    左右两栏,左侧展示可访问的单据权限,右侧展示选中单据权限维护的单据维度

    字段说明

    字段名称 字段描述
    单据 单据权限的单据名称
    权限维度范围 权限维度分为业务范围个人用户,用于过滤权限值展示的权限维度。如“订单单据”单据权限选中业务范围,权限值则只会显示权限范围为业务范围的单据维度公司。
    权限值 展示单据权限下配置的单据维度,勾选复选框后可在权限数据Tab也上配置维度值

    操作

    权限数据 Tab页

    页面布局

    左右两栏,左侧展示可配置维度数据的单据维度,该列表展示的是在权限维度 Tab页中勾选的权限值。右侧展示单据维度的配置数据,若单据维度定义中值来源类型本地编码则该部分内容为本地编码指向的页面渲染结果,如公司单据类型(图一)。若是值集该部分内容为值集视图选配页面,如值集单据维度(图二)。

    图一:

    图二:

    操作

    作用

    角色管理-维护数据权限定义当前角色所要限制的单据数据,使得该角色只能访问通过数据屏蔽规则的单据。如角色A配置了单据权限B,并为B维护了单据维度C,C的来源匹配表为order_tablecompany_id,添加了值(1、2、3),则角色只能查询到order_table表里 company_id in (1,2,3)的单据。

    子账户管理-权限维护

    点击操作列下操作权限维护

    子账户管理-权限维护

    操作

    点击,在弹窗中使用HIAM.USER_AUTHORITY_USER值集视图选择需要交换权限的目标用户,点击确认按钮完成交互权限

    作用

    子账户管理-权限维护定义当前用户所要限制的单据数据,作用同角色管理-维护数据权限且优先级高于角色管理-维护数据权限