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