一、数据权限定义

数据权限主要分为维护权限,使用权限,特殊权限。

操作是与业务实体相关联的业务行为,分为维护类操作和使用类操作。

A.       维护类操作:对业务实体数据进行维护,改变其属性的操作,例如删除、修改等。

B.       使用类操作(使用场景):不改变业务实体数据的属性,只是引用业务实体数据的操作,例如参照,引用等。

NC6.0系统中对数据权限做了重大调整,对资源实体做了扩充,引入了权限规则,操作等概念,模型概念图如下图所示:

二、数据权限规则

目前NC6.0数据权限采用禁止权优先的原则,例如一旦用户所在的角色有一个设置了无权那么他就没有操作的权限。如果特殊权限和维护权限都配置了,则依然采用禁止权优先的原则。

NC6.0数据权限按照使用的场景,分为维护权限和使用权限两部分,维护数据权限是指对某种资源实体的数据有无增删改查的权限,典型的应用场景包括对某条单据进行修改操作或者删除操作时,校验当前用户是否有权限进行这项操作。

而使用权限则是指在资源实体被引用到某个场景的时候,对当前用户的限制,换句话说就是控制用户对某资源实体的数据引用查看校验。

维护权限

使用权限

应用场景

修改,删除等操作

查询,参照过滤等

授予类型的权限,如果某角色对某资源不设置维护数据权限,则认为该角色对这个资源有权

限制类型的权限,如果某角色对某资源不设置使用数据权限,则认为改角色对这个资源有权

可在不同的角色下定义不同的维护权限规则

可在不同的角色下定义不同的使用权限规则

分为两级:粗粒度级规则即(全部有权或者合部无权);细粒度规则(指可以对元数据上的每个字段进行权限的控制)

分为两级:粗粒度级规则即(全部有权或者合部无权);细粒度规则(指可以对元数据上的每个字段进行权限的控制)

特殊权限与数据权限是Or关系,但是采用禁止权优先原则

三、规则控制组合

3.1不需执行后台任务生效的

1.用户关联一个角色,定义规则,全部有权,全部无权均应控制正确;角色未定义规则,即未启用数据权限,控制结果集为全部

2.用户关联两个角色,两个角色均定义使用权限规则,控制结果集取两个规则的合集

3.用户关联两个角色,一个角色定义规则,一个角色不定义规则,控制结果集为按规则控制

4.用户关联两个角色,一个角色定义规则,一个角色全部有权,控制结果集为全部有权

5.用户关联两个角色,一个角色定义规则,一个角色全部无权,控制结果集为全部无权(即使用户关联多个角色,只要有一个是全部无权,控制结果集便为全部无权)

6.为某个已关联用户的角色增加规则

7.修改规则,由规则A修改为规则B,按更新后的新规则控制

8.修改规则,由规则A修改为全部无权,所有关联该角色的用户全部无权

9.修改规则,由规则A修改为全部有权

9.修改规则,由全部有权修改为全部无权

9.删除规则(注:因为删除规则会带来权限分表的删除,通知到前台缓存会有2-3分钟的等待时间)

10.为某个未启用数据权限的角色启用数据权限(特别关注用户关联多角色,其中某个角色未启用数据权限,然后为其启用数据权限,定义规则),按规则控制

11.将某角色下的所有规则删除,(特别关注用户多角色场景)

12.取消用户与角色的关联关系,曾经角色的规则不在起作用

13.用户共享与调动

用户由A集团共享至B集团,在A,B集团均启用数据权限,各个集团内的控制结果正确

用户由A集团调动到B集团,在A,B集团均启用数据权限,A集团的权限取消,B集团控制正确

3.2、需定义执行后台任务“权限有效期及数据变更调整定时任务”

14.符合规则的数据集中档案的增加;(如定义客户的使用权限规则为:客户分类=A,在分类A中增加客户档案add1,需执行完后台任务才可在参照中参照到add1)

15.用户关联角色到达生效日期与失效日期

3.3场景的说明

1.产品出厂时,若产品领域有预置场景,则产品下各单据起数据权限的字段默认走产品领域的预置场景;没有预置场景的产品单据,起数据权限的字段默认走通用引用场景

(已测试通过,以物料采购分类为例)

2.可扩展单据字段适用的场景范围(元数据管理节点)

四、数据维护权测试要点

4.1、维护数据权限规则

同上述数据权限测试要点中规则控制

4.2、维护权的组合

--禁止权优先,(禁止权中包含创建者无权,全部无权),其余为合集

五、数据权限分表目前有两种机制

1.可及时生效的分表任务

2.通过定义后台任务执行的分表任务

5.1、可及时生效的分表任务

用户关联角色;

取消关联关系;

为用户关联的某个角色增加使用权限规则;

删除某角色某场景下的规则;

规则的变动(如编辑规则,由规则改为全部有权或全部无权等)

……

5.2、通过后台任务执行的分表任务

符合规则的数据集中档案的增加;(如定义客户的使用权限规则为:客户分类=A,在分类A中增加客户档案add1,需执行完后台任务才可在参照中参照到add1)

5.3、分表任务的验证

1.分表的纬度为:用户,资源实体,场景,集团

2.表的创建时机:在角色分配完规则会去计算, 如果角色关联了用户产生分表,未关联不产生分表

为用户分配角色会去计算分表。 如果角色定义了数据权限  则能产生分表,未定义不分表

3.表的删除时机:某用户在一个集团内,在某个资源实体,某个场景下已没有规则,则删除相应的分表。(可通过取消用户角色的关联关系;删除角色的权限规则来实现。)

5.4、验证步骤建议

库中查询分表数据的SQL语句:select* from sm_dpprofile_reg where cuserid='10021110000000000HIH' (查询某用户的分表任务,其中cuserid可以通过用户表sm_user查询出)

在这张表里可以查询出生成的分表名,资源实体,场景和集团

1.U1关联RA1(角色若定义了规则,则按照用户+资源实体+场景+集团的维度生成表)

2.若用户+资源实体+场景+集团下已没有规则,则删除表;若还有规则,则按照新规则计算结果更新表内容(删除规则,删除用户与角色的关联关系)

3.用户关联多个角色,仍按照用户+资源实体+场景+集团的维度生成表,若依照该维度已经存在有表,则表不变,按照新规则计算结果更新表内容)

4.共享用户,保留原集团内表,按照目的集团内规则再生成表

5.用户调动,共享集团B的表无变化,源集团A集团的表被删除

6.用户停用,权限被清空,表被删除

六、数据权限参数设置

使用系统管理员登录环境,

【应用系统管理】-【系统初始化】-【系统参数设置】

七、分表实现机制简述

按照用户—资源实体的模式进行分表,把资源实体对应的具体数据的ID存储在分好的表中。

由于规则数据分表存储是一个后台的异步任务,所以在规则设置之后并不是立即生效的,需要等待一段时间之后才能够生效,通常有三种模式需要重算规则数据。

1.  用户重新委派角色

2.  角色的权限设置发生变化

3.  档案数据发生变化。

由于前两个和我们关系不大,我们只关心最后一个我们自己档案一旦发生数据变化应该如何处理。

现行的数据使用权,是采用数据库分表来记录符合条件的数据。当对应的档案数据发生变化时,也需要重新运算分表结果。

为了解决这两个问题,权限模块提供了一个后台任务,任务名称为“权限有效期及数据变更调整定时任务”。此定时任务在实施时启动,建议

每天执行一次,在每天凌晨00:05:00执行。它将处理前面提到的两个问题。

为了能够让权限系统知道档案数据发生了变化并进行变化记录,需要支持使用权限的档案,当数据发生变化时(新增后、修改后、删除后),发送

业务事件。默认规定事件源ID即为档案数据对应元数据实体的ID(即定义的权限实体资源所关联的元数据ID),事件类型为:

IEventType.TYPE_INSERT_AFTER新增后; IEventType.TYPE_UPDATE_AFTER 修改后;IEventType.TYPE_DELETE_AFTER删除后。

传输事件对象为:nc.bs.businessevent.UsePermChangeEvent。平台注册的监听会收集上述事件并记录数据变化。当发生数据变化时,调用

EventDispatcher.fireEvent(newUsePermChangeEvent(mdid, IEventType.xxx))。

第一步:部署后台任务

注册插件(UAP注册)这里需要说明的是这个事件是全局的只要发送新增后 修改后 删除后都会走这个监听。

insertinto pub_eventlistener (dr, enabled, implclassname, name, note, operindex,owner, pk_eventlistener, pk_eventtype, ts) values (0, 'Y','nc.bs.rbac.bizlistener.BaseDocDataPermChangeEventListener', '档案数据权限分表任务插件', '数据使用权限分表任务', 99, '1012', '1001ZZ10000000016F0A','1001ZZ10000000016F09', '2011-04-28 16:57:24');

insertinto pub_eventtype (dr, eventtypecode, eventtypename, note, owner,pk_eventtype, sourceid, sourcename, ts) values (0, '1002', '数据使用权限分表_档案新增后', '新增档案之后,数据权限分表任务关心档案的新增事件,对已经进行数据权限分配的档案,要进行数据权限分表任务调度,将分表中的记录进行更新', '10','1001ZZ10000000016F09', 'ALL', '所有档案', '2011-04-28 16:56:04');

注意:由于档案自身可能会有一些业务单据对其进行新增后,修改后,删除后进行监听,所以我们要在其他监听类加上如下代码

 

元数据类型:

元数据类型规则编辑器

规则编辑器: nc.uap.rbac.core.rule.impl.MetaDataRuleEditor

规则生成工厂: nc.uap.rbac.core.rule.impl.MetaDataRuleFactory

离散类型:

离散树型编辑器

规则编辑器:nc.ui.uap.rbac.rule.discret.ZDiscretDataTreeRuleEditor

规则生成工厂:nc.uap.rbac.rule.discret.DefaultDiscretRuleFactory

离散表规则编辑器

规则编辑器:nc.ui.uap.rbac.rule.discret.DiscretDataTableRuleEditor

规则生成工厂:nc.uap.rbac.rule.discret.DefaultDiscretRuleFactory

权限分表介绍:

 

数据权限的使用权目前主要涉及两种方式,一种是在参照中加入使用权控制。一种是用户调用权限接

口获得关心档案的使用权规则sql条件。 在开发使用过程中,这两种情况的发生率都是很高的。如果每次都去集合用户所有的角色对关心档案所定义的数据权限使用权规则,然后根据规则生成一条复杂的sql条件提供给参照或者开发者。参照或者开发者再连接到自己的查询条件后,再去查询自己需要的数据,这样势必造成效率问题和sql的复杂度的升高。

为了解决这个问题,为每个定义了使用权规则的档案或者单据建立一个分表。此表中仅有id一个字段,

用于存储能唯一标识业务实体数据的列值。这样权限接口提供给开发者的sql条件变为了 “pk  in (select id fromzdp_xxxxxxx)”简单语句。

八、测试要点:

1、数据权限生效机制

1.可及时生效的分表任务

n  用户关联角色;

n  取消关联关系;

n  为用户关联的某个角色增加使用权限规则;

n  删除某角色某场景下的规则;

n  规则的变动(如编辑规则,由规则改为全部有权或全部无权等)

2.通过定义后台任务执行的分表任务

符合规则的数据集中档案的增加;(如定义客户的使用权限规则为:客户分类=A,在分类A中增加客户档案add1,需执行完后台任务才可在参照中参照到add1)

2、基础数据(参照、查询以及快速查询)

参照查询:只能参照到权限规定内的可使用的数据

3、单据的分单、整单、空值

Ø  分单:( 拉式)

一张采购订单的单据,包含2条属于不同分类的物料

当采购入库单引用采购订单时,只能看到规则内的值(数据权限定义有权限的物料分类下的物料)

Ø  整单:(推式)

一签字就生成下游单据,这时整单据的表体内容都会生成

4、关联关系以及跨组织参照

定义了某部门的使用权,这时做单据需要参照到这部门下的人员时,也无法参照到。

不同组织下的可见范围,无论参照规则外的任何组织,都无权看到数据

5、模版、元数据管理

模版优先,模版设置中“是否启用数据权限”;如果不勾选,分配的用户就不受权限的控制

6、引用场景(资产通用引用、供应链通用引用等)

7、数据权限分表的效率

erp 数据权限定义(用友NC)相关推荐

  1. B/S页面通用数据权限控制[转]

    数据权限常见场景有: 数据仅部门级可见 数据仅本人可见 数据仅某角色可见 在可见的基础上,进行功能控制: 修改,删除 在树形结构里,在可见基础上进行 新增/修改/删除控制 我的实现方式: 资源---所 ...

  2. DH ERP系统权限设计

    一.系统权限定义 1.功能权限 定义:功能权限指的是用户登陆系统后,所持有的功能权限因子下的权限,而展示对应系统中各个菜单页面.操作功能等.功能权限设置分: [角色授权] [用户授权] 2.数据权限 ...

  3. 【权限设计】最好的权限设计,是先区分功能权限和数据权限

    本文为我们介绍了功能权限和数据权限的不同点.以及不同部分中的要点与注意事项. 做2B的系统总是不可回避的遇上权限问题,他不是核心业务却又必不可少,而且总是牵一发而动全身,更要命的是不同客户组织架构完全 ...

  4. 权限开发手册,数据权限和接口权限配置

    权限开发手册 一般来说,权限有许多种,我们经常用到的一般有操作权限和数据权限两种. 功能权限 所谓操作权限就是有或者没有做某种操作的权限,具体表现形式就是你看不到某个菜单或按钮,当然也有的是把菜单或按 ...

  5. 用友NC产品接口开发,通过轻易云数据集成平台快速调用

    通过用友NC产品的 UAP V63平台.插件相关处理.相关业务逻辑处理课程目标与要求课程内容课程目标与要求业务逻辑处理外部系统信息设置节点新建外部系统默认匹配规则:仅按对照表:外部系统数据与UAP. ...

  6. 用友NC 漏洞汇总(转载)

    komomon 编码安全研究 2022-11-21 09:09 发表于北京 免责声明 本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不 ...

  7. 用友NC二次开发问题汇总【转】

    一.供应链采购订单问题 在采购订单参照请购单时,若选择了10行请购单的记录,采购订单的表体也就显示了10条记录,如何才能实现还可以再弹出请购单的参照,追加一条记录,而不需要取消单据后重现选择请购单. ...

  8. 备份数据库 用友NC

    用友NC备份数据过程 1.创建 表空间 CREATE TABLESPACE NNC_DATA01 DATAFILE 'F:\app\Administrator\admin\orcl\NNC_DATA0 ...

  9. CNVD-2021-30167 用友NC命令执行漏洞复现

    一.漏洞概述 2021年06月03日,用友官方发布了用友BeanShell远程代码执行漏洞的风险通告,漏洞编号为CNVD-2021-30167,漏洞等级:严重,漏洞评分:9.8. 用友NC是面向集团企 ...

最新文章

  1. java 中 bean 的生命周期
  2. 运行数据区②---堆
  3. 我为什么放弃饿了么产品总监不干,却从事自由职业?
  4. Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作
  5. 【impala学习之一】impala
  6. AS100 和AS90 2个不同自治区域如何通信
  7. Win10配置ssh密钥免密连接Linux服务器
  8. 第一章 【数据分析师---数据可视化1】 matplotlib 静态图,无互动
  9. 这样学习Linux,楼下王大爷都已经入门了,你还不来?
  10. 腾讯云轻量8核16G18M服务器带宽CPU流量性能测评
  11. Zblog的控制面板代码
  12. 智力题:36匹马,6条跑道,没有计时器,至少需要多少次选出最快的三匹马
  13. 重拾Eclipse开发
  14. 前端后端一起成长激励的句子
  15. html页面禁止滚轮事件,javascript实现禁止鼠标滚轮事件
  16. C++小工修炼手册XXVII (二叉搜索树的简单实现以及原理解释)
  17. Java垃圾回收机制总结
  18. mysql外键约束失败
  19. 优质免费app开发平台汇总
  20. 数据存储与备份管理解决方案

热门文章

  1. 日积(Running)月累(ZSSURE):EverNote标签管理
  2. [转]《鸟人》想拍个文艺片,为什么要自虐
  3. 2020.9.16工作问题记录————CentOS6挂载镜像离线安装gcc,g++和其他依赖库
  4. 经理、产品经理、教练的起源
  5. 华为P30暗光+夜景拍摄体验:实力担当夜拍小王子
  6. 前端实现 Excel 导入和导出功能
  7. java oncreate_Android(java)学习笔记112:Activity中的onCreate()方法分析
  8. 16S rRNA测序鉴定分析实验
  9. 网课查题公众号怎么搭建制作怎么弄
  10. Python -- Matplotlib库的使用