组织机构与权限管理用户开发手册.docx
《组织机构与权限管理用户开发手册.docx》由会员分享,可在线阅读,更多相关《组织机构与权限管理用户开发手册.docx(15页珍藏版)》请在冰豆网上搜索。
组织机构与权限管理用户开发手册
组织机构与权限管理用户开发手册
中国软件与技术服务股份有限公司
应用产品研发中心
1引言
1.1背景
本模块是sword业务基础平台的组件之一,为平台提供基础的组织机构和权限管理功能。
1.2目标
本系统主要目标如下:
●提供灵活的组织机构与权限管理物理模型,针对不同的业务系统需求可再扩展。
●提供系统核心组件,跨数据库、灵活、稳定、算法高效、复用率高,可极大的缩短业务系统二次开发周期。
●提供稳定的组织机构与权限管理对外服务接口,用以满足业务系统的需求。
●提供基于以上三点的业务系统实现,在多数场景中可直接使用。
1.3定义
●权限
以权限授权管理为基础,使用户仅对指定数据集合中的特定数据具有访问能力。
这个定义包含了几个关键要素:
Ø用户:
用户是系统的操作者,是授权的目标主体。
Ø数据集合:
被访问的目标数据集合是权限管理的基础。
事实上,整个权限控制的目的就是保证非信任用户群体对系统数据的合理访问。
Ø授权:
授权是提供上述访问关系的控制逻辑。
●功能权限
功能权限控制用户对系统功能的访问。
一般来讲,功能权限的粒度是一个个具体的业务功能
●数据权限
数据权限本质上是用户对特定类型数据集合中数据访问的范围控制
●权限资源
数据资源是授权关系中数据集合内元素的标识属性,在权限管理运算中,权限资源是作为运算变量存在的。
从大类上划分,权限资源可以分为功能权限资源和数据权限资源两大类。
●权限维度
权限资源的分类属性,一般用在数据权限资源定义内,用于标识不同数据范围类型的定义。
●维度关联
在最简单情况下,各个权限维度之间没有关联,是纯正交的关系。
在这种情况下,各维度的权限运算可以独立进行。
维度关联是指权限维度之间的关联关系。
特定的权限维度之间存在关联,不是纯正交关系。
在这种情况下,各维度的权限运算不能独立进行,需要综合考虑。
●业务规则
业务规则是一种“假的”权限定义需求,看起来像权限控制范围,但事实上仅是业务逻辑的组成部分。
辨别是否业务规则的方法是:
把访问控制要求去掉后(不考虑权限访问需求),业务过程是否完整。
如果业务过程变得不完整了,则表明这不是一项权限需求。
●基本属性
在本模型中,业务实体参与业务运算的属性。
本下级:
本下级表示机构树或职能机构树上,该机构及其该机构的所有下级机关(及下级机关的所有下级机关,以此类推)。
比如,北京市外汇局在机构树上的本下级表示所有属于北京市外汇局的机构。
2系统总体设计
2.1设计思想
2.1.1权限定义
在本文档中,对权限的定义为:
以权限授权管理为基础,使用户仅对指定数据集合中的特定数据具有访问能力。
这个定义包含了几个关键要素:
●用户:
用户是系统的操作者,是授权的目标主体。
●数据集合:
被访问的目标数据集合是权限管理的基础。
事实上,整个权限控制的目的就是保证非信任用户群体对系统数据的合理访问。
●授权:
授权是提供上述访问关系的控制逻辑。
2.1.2权限类型划分
按照应用系统的权限控制要求,系统权限管理按照类型划分为两大类:
功能权限和数据权限。
●功能权限:
功能权限控制用户对系统功能的访问。
一般来讲,功能权限的粒度是一个个具体的业务功能。
●数据权限:
数据权限本质上是用户对特定类型数据集合中数据访问的范围控制。
●本质上,功能权限和数据权限在本质上是一致的,做上述类型的分主要是考虑到功能权限在实现上的特殊性,划分后能够更加方便地实现控制权限控制逻辑。
●在下述章节中,将描述的重点放在数据权限上。
2.1.3数据权限的数学涵义
数据权限本质上是数据集合的选择运算(功能权限也是如此)。
下图将以数据检索为例,简要描述数据权限的实现过程。
原始数据集合中存放是所有待检索的数据集,其中每一个元素均包含有一个权限控制属性(如元素上的三角形标识)。
示例集合中的该属性共有两个值,分别用
和
表示。
第一个用户对标识为
的数据有访问权限,因此,他可以看到4个数据元素;
第二个用户对标识为
的数据有访问权限,因此,他可以看到2个数据元素;
第三个用户对所有数据均有访问权限,因此,他可以看到6个数据元素。
上述过程可以看到,如果将原始数据集看做一个二元关系数据集合的话,上述的权限控制操作本质上就是对数据集合的选择运算。
这也是数据权限控制的基础,在下述章节中,将所有的权限控制将基于这种选择运算关系实现。
2.1.4数据元素的范围标识
依照上述数学关系,要实现数据的访问范围控制,首先要做的就是对数据做范围标识。
范围标识过程如下图所示:
范围标识属性的选择可以参考如下方式:
1)选取业务数据中具有业务语义的数据属性。
这种方式最直接,也非常便于理解,是一种优先考虑的方式。
2)添加新的、纯技术性质的数据属性。
当原始的数据属性集合中没有可以用于标识数据范围的属性时,需要添加额外的属性来标识数据的范围归属。
2.1.5数据访问授权
数据访问授权本质上就是建立用户和数据范围标识之间的映射关系。
如下图所示。
通过授权,用户甲获得了对标识为
的数据的访问能力,用户已获得了对标识为
的数据的访问能力,用户丙获得了对所有数据的访问能力。
2.1.6数据权限的多维性
从数据权限的数学涵义可以看出,基于不同的元素属性做访问范围标识,可以实现多个维度的数据权限控制。
这一点在应用中将具有很明显的业务特性:
不同类型的业务数据可以给与不同的数据访问控制含义。
如:
可以按照不同的合同额度划分合同的审批权限级别;
可以按照原材料类别区分采购申请的审批者;
可以按照数据的地域归属做数据的查询结果限定;
……
同理,也可以根据业务要求,将上述多个维度做综合考虑,以不同维度的交集或并集来完成更高级别的数据访问权限控制。
2.1.7逻辑模型
逻辑模型重点描述了权限模型中的要素和要素之间的关系。
参考权限类型的划分,本章节中将功能权限和数据权限两个模型分别描述。
本逻辑模型将基于RBAC模型实现,在具体的设计过程中,将参考权限的要素之间的关系,将用户、角色和权限与对应的权限要素建立特定的联系。
2.1.7.1功能资源
在功能权限中,首先要考虑的是功能资源。
一般来讲,功能资源就是系统中用例功能的列表。
依据前述的数学模型,要实现功能权限的授权管理,首先要考虑的是功能权限授权资源的离散化。
很幸运,功能权限资源通常表现为一个个独立的URI链接描述,因此天然地具有离散化特性。
更进一步考虑,可以将功能资源的“粒度”进一步细化,把一个按钮、页面中的连接等定义为一个资源项。
当然,伴随着权限控制粒度的细化,对系统的运行资源开销和运行效率将会出现负面化的影响。
2.1.7.2授权关系
最基本的功能授权,就是建立用户到功能的映射。
每一个映射就是一项功能能授权。
如下图所示:
这种模型最简单,但效果不好。
因为授权项太多,太分散,非常不便于管理。
因此,在本模型中,参考RBAC模型的要素,引入了角色的概念。
角色是一类特定功能权限的集合。
先建立角色和功能资源之间的映射关系,然后再建立用户同角色之间的映射。
其中一个角色可以关联多个功能资源,一个用户也可以关联多个角色。
引入角色后,在一定程度上提高了系统授权管理的灵活性,同时可以降低授权映射数量。
如下图所示:
2.1.7.3功能授权实体及关系
功能授权模型中共包含三个实体和三个关系。
三个实体是:
用户、角色和功能资源
三个关系是:
用户-功能资源映射、角色-功能资源映射和用户-角色映射。
2.2系统总体架构
2.2.1系统物理模型:
2.2.2对象设计模型:
●值对象
在用户登陆成功后需要将用户基本信息缓存起来,方便在业务系统中直接获取使用,具体属性随业务系统需求而定。
注意:
一定要实现IUser接口。
●领域对象
继承SOPBaseBO或AbsDaoBusinessObject类都可,推荐SOPBaseBO。
2.2.3系统服务组件设计:
2.2.4安全验证
2.2.4.1设计模型
●类图
●时序图
2.3API接口和使用说明
2.3.1安全管理基类SwordSecurityManager
负责验证登陆用户与用户票据的生成
accredit
publicITicketaccredit(IUserlogonUser)throwsPersistenceCheckedException,SQLException,SecurityCheckException
说明
用户权限验证
输入
logonUser---登录用户信息
输出
票据
异常
SQLException---数据库异常
PersistenceCheckedException---框架异常
SecurityCheckException---权限异常
login
publicabstractIUserlogin(IUserlogonUser)throwsPersistenceCheckedException,SQLException,SecurityCheckException
说明
用户登录
输入
logonUser---登录用户信息
输出
用户对象
异常
SQLException---数据库异常
PersistenceCheckedException---框架异常
SecurityCheckException---权限异常
getFuncRight
publicabstractList
说明
获取登录用户的功能权限
输入
logonUser---登录用户信息
输出
功能资源列表
异常
---
getDataRight
publicabstractList
说明
获取登录用户的数据权限
输入
logonUser---登录用户信息
输出
数据资源列表
异常
---
getOperateRight
publicabstractList
说明
获取登录用户的操作权限
输入
logonUser---登录用户信息
输出
操作资源列表
异常
---
2.3.2用户权限票据缓存管理器WebSecurityManager
registerTicket
publicstaticvoidregisterTicket(ITicketticket)
说明
注册用户权限票据
输入
ticket---用户权限票据
输出
---
异常
---
getTicket
publicstaticITicketgetTicket()
说明
获取用户权限票据
输入
---
输出
权限票据
异常
---
removeTicket
publicstaticvoidremoveTicket()
说明
清除用户权限票据
输入
---
输出
---
异常
---
2.3.3数据权限服务类DataRightService
getDataRight
publicstaticStringgetDataRight(IReqDatareq,StringdataRightSign)
说明
获取当前登录用户的数据权限sql
输入
req:
IReqData请求数据
dataRightSign:
数据类别,数据权限的标识
输出
用户的数据权限sql
异常
getDataRight
publicstaticStringgetDataRight(IReqDatareq,StringdataRightSign,Stringscene)
说明
获取当前登录用户的数据权限sql
输入
req:
IReqData请求数据
dataRightSign:
数据类别,数据权限的标识
scene:
数据场景,默认数据场景是0
输出
用户的数据权限sql
异常
2.3.4系统公共服务类SOPBaseServiceBLH
createCheckedTree
publicIResDatacreateCheckedTree(IReqDatareqEvt)throwsRuntimeException
说明
构建选择树
输入
请求参数
输出
异常
createCheckedTable
publicIResDatacreateCheckedTable(IReqDatareqEvt)throwsRuntimeException
说明
构建基于Table组件的选择树
输入
请求参数
输出
异常
createTree
publicIResDatacreateTree(IReqDatareqEvt)throwsRuntimeException
说明
构建树
输入
请求参数
输出
异常
2.3.5操作权限使用说明
●SwordSecurityOperate控制组件