DWF通过规则引擎实现授权。DWF提供了基于组织对应用功能授权和基于组织对数据访问授权的权限模型,利用这种授权限模型可以最小粒度控制到数据层面的访问权。
授权模型的主要功能:
DWF授权模型具有如下特点:
操作授权项—Operation Authorization Item。在DWF,模块和操作在创建时,系统都会自动建立与它匹配的授权项,授权项是实现权限的基础。
可授权功能树—Function Tree。从应用开始,向下到模块,再到表单,就形成可授权功能树,树上各节点都可以被赋予权限。
权限分配—Authorization。用户和授权项之间的分配关系称为权限分配。
授权模型包含:功能授权、数据访问授权二个层次。
基于功能实现对组织的授权,通常用于对新增的功能实现对组织的授权。
基于组织和用户实现对应用通道和功能树的授权。
基于功能的授权和基于组织的授权其本质都是基于组织对功能进行授权。功能授权采用白名单机制,权限粒度为模块、模块操作;即默认普通用户没有查看和操作应用及功能(模块及模块操作)的权限;需要管理员根据实际业务添加用户(组)对具体应用的功能权限。
|
基于功能授权还有一种情况是基于操作的授权
|
2.1.4 数据访问控制
”访问控制“是针对类和类属性的授权方式。访问权限粒度为类、类属性。对类操作访问控制授权包括:新增,删除, 修改,查询;对属性操作访问控制授权包括:编辑,查询。
”访问控制“采用黑名单机制,默认该用户对他在应用端看到的类和属性都有访问、操作权限,如果想收回权限,需要在访问授权处禁用。
”访问控制“授权模式分为:批量模式、独立模式:
2.1.5 对象访问控制
针对符合属性授权规则中的对象进行访问控制的方式,称为对象访问授权。
(1)名词解释
属性授权规则:是一条SQL子查询(不能以分号结尾),返回userId和objId两列,userId表示用户或用户组,objId表示属性的取值,属性授权规则内添加的筛选条件只用于筛选特定的属性值,不对整体的查询语句起到筛选作用。
对象授权规则:是一个五元组:(用户或用户组,实体类,实体类的属性,条件,属性授权规则),对象授权规则中的内置条件中属性名必须使用英文双引号包围且不能以分号结尾,该规则对整体查询起到筛选作用。
(2)实体类和外部实体类访问控制
实体类和外部实体类的对象访问控制逻辑是一致的,此处的外部实体类是特指通过“默认PG数据源”定义的外部实体类;不支持跨数据源查询,即:非默认PG数据源方式连接的外部数据不支持对象访问控制。
|
(3)实体类和外部实体类对象访问查询逻辑
1)如果该实体类没有对象授权规则,或虽然有对象授权规则,但不作用于当前用户[或所属的各级用户组],那么不过滤,直接按原查询返回;
2)如果“该实体类+当前用户[或所属的各级用户组]”有对象授权规则,那么要执行这些对象授权规则
i.对于每条对象授权规则
a. 对象授权规则中指定的条件成立,当前用户(或所属的各级用户组),该行的“对象授权规则中的指定的属性”的值存在于属性授权规则的结果集中;
b. 原查询的结果中满足上述条件的行,称为“该条对象授权规则的结果集”;
ii.对每条对象授权规则的结果集,取并集返回。
(4)关联类对象访问查询逻辑
1)如果该关联类没有对象授权规则,或虽然有对象授权规则,但不作用于当前用户[或所属的各级用户组],那么不过滤,直接按原查询返回;
2)如果“关联类类+当前用户[或所属的各级用户组]”有对象授权规则,那么要执行这些对象授权规则:
i.对于每条对象授权规则
a. 对象授权规则中指定的条件成立,当前用户(或所属的各级用户组),该行的“对象授权规则中的指定的属性”的值存在于属性授权规则的结果集中;
b. 原查询的结果中满足上述条件的行,称为“该条对象授权规则的结果集”。
ii.对每条关联类对象授权规则的结果集,取并集返回。
3)查询其关联类的左右对象是否有对象授权规则,如果没有返回前述结果集,如果“该左/右对象+当前用户[或所属的各级用户组]”有对象授权规则,那么要执行这些对象授权规则
i. 对于左/右对象的每条对象授权规则重复上述过程,执行条件筛选,得到“属性授权规则的结果集”;
ii. 左/右对象内部的结果集取并集返回。
4)将前述查询的关联类的结果集与左/右对象的对象授权规则的结果集取交集返回。
(1)权限的继承性:功能授权、类和类属性授权(访问控制),对组织树(用户组)的授权都具有继承性。
(2)当设置了父组织(用户组)的权限,其下的子组织(包括子用户组和用户)会继承父组织的权限规则;如果对某个子用户组或者用户收回权限,该子用户组/用户权限规则优先级高于父组织的权限规则,子用户组/用户的权限将不再受到父用户组的影响。
”基于组织授权“的建模过程:
图-基于组织授权
表单操作授权就是对表单上的按钮控件进行授权:通过在表单定义的操作中“开启授权”,可以在 “管理授权”中实现指定用户(组)对操作权限的控制。进入表单模型,选择“实体类表单”,举例中选择的零件实体类的多对象表单;建模过程如下:
进入表单模型,选择“实体类表单”,举例中选择的零件实体类的多对象表单;
图-表单操作授权
在“数据访问控制”中,有批量授权和独立授权2种方式:
独立模式:独立模式是针对用户/用户组的授权模式,可进行编辑和查询的授权。
进入批量模式:批量模式是针对用户组进行授权,批量授权有2种:批量允许、批量禁止。
访问控制批量授权的建模过程:
图-数据访问控制
如果在上图中步骤3显示”进入独立模式“,说明当前是在批量授权模式,步骤3所指的按钮是一个授权模式开关,显示的模式是点击按钮后要进入的授权模式,而不是当前的授权模式。 对类的授权支持:新增、编辑、查询、删除 对类属性的授权支持:编辑、查询 |
1)对象访问授权举例
对象访问授权是在功能授权、类和类属性授权(访问控制)的基础上做更细粒度的授权方式,是将符合某属性规则的对象的集合进行访问控制的方式。结合设备管理的案例,我们希望针对"维修工程师"组,当每一位维修工程师(属性为:engineerOid)登录设备管理系统查询工单时(工单实体类:WorkerOrder),系统只显示该工程师所负责的工单,要实现这样对象访问授权,需要设置一个“工单筛选”属性授权规则为:
select plt_engineerOid as userId,plt_engineerOid as objId from plt_cus_WorkerOrder
2)对象访问授权过程
在对象访问权限中,需要定义属性授权规则和对象授权规则,当对象授权规则中指定的属性”的值存在于属性授权规则的结果集中,授权生效。
进入权限模型,授权过程如下:
图-属性规则权限
图-对象授权规则
通过上述属性授权规则、对象授权规则的定义,即可完成针对维修工程师组的用户登录时只能看到自己属于自己的维修工单的对象访问权限的控制。
图-对象授权规则
本章介绍了DWF授权模型的基本概念和基本功能,DWF授权分为:功能授权、数据访问控制二个层次:
功能授权:包括功能树和操作的授权,操作授权:是针对表单中的操作按钮进行授权的方式。
数据访问控制:”访问控制“是针对类和类属性的授权。
对象访问授权:是针对符合属性授权规则中的对象进行访问控制的方式,称为对象访问授权。
其次,介绍了授权模型的建模过程。
我们为刚刚建立的模块添加授权。
模块名称 | 授权对象 | 允许权限(按钮授权) | |
---|---|---|---|
设备管理 | 设备列表 | 设备管理员 | 添加、删除、修改、查看 |
维修工程师 | 查看 | ||
数据管理员 | 添加、删除、修改、查看 | ||
零部件管理 | 零件结构 | 设备管理员 | 查看 |
维修工程师 | 查看 | ||
数据管理员 | 添加、删除、修改、查看 | ||
零件列表 | 设备管理员 | 查看 | |
维修工程师 | 查看 | ||
数据管理员 | 添加、删除、修改、查看 | ||
工单管理 | 工单列表 | 设备管理员 | 添加、查看 |
维修工程师 | 查看 | ||
数据管理员 | 添加、删除、修改、查看 | ||
我的工单 | 维修工程师 | 修改、查看 |