`

系统权限设计概述

阅读更多

前言:

权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用,需要根据项目的实际情况和具体架构,在维护性、灵活性、完整性等N多个方案之间比较权衡,选择符合的方案。

目标:

直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要,系统不辞劳苦的实现了组的继承,除了功能的必须,更主要的就是因为它足够直观。

简单,包括概念数量上的简单和意义上的简单还有功能上的简单。想用一个权限系统解决所有的权限问题是不现实的。设计中将常常变化的“定制”特点比较强的部分判断为业务逻辑,而将常常相同的“通用”特点比较强的部分判断为权限逻辑就是基于这样的思路。

扩展,采用可继承在扩展上的困难。的Group概念在支持权限以组方式定义的同时有效避免了重定义时

现状:

对于在企业环境中的访问控制方法,一般有三种:

1.自主型访问控制方法。目前在我国的大多数的信息系统中的访问控制模块中基本是借助于自主型访问控制方法中的访问控制列表(ACLs)。

2.强制型访问控制方法。用于多层次安全级别的军事应用。

3.基于角色的访问控制方法(RBAC)。是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:1.减小授权管理的复杂性,降低管理开销。2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

名词:

粗粒度:表示类别级,即仅考虑对象的类别(the type of object),不考虑对象的某个特

定实例。比如,用户管理中,创建、删除,对所有的用户都一视同仁,并不区分操作的具体对象实例。

细粒度:表示实例级,即需要考虑具体对象的实例(the instance of object),当然,细

粒度是在考虑粗粒度的对象类别之后才再考虑特定实例。比如,合同管理中,列表、删除,需要区分该合同实例是否为当前用户所创建。

原则:

权 限逻辑配合业务逻辑。即权限系统以为业务逻辑提供服务为目标。相当多细粒度的权限问题因其极其独特而不具通用意义,它们也能被理解为是“业务逻辑”的一部 分。比如,要求:“合同资源只能被它的创建者删除,与创建者同组的用户可以修改,所有的用户能够浏览”。这既可以认为是一个细粒度的权限问题,也可以认为 是一个业务逻辑问题。在这里它是业务逻辑问题,在整个权限系统的架构设计之中不予过多考虑。当然,权限系统的架构也必须要能支持这样的控制判断。或者说, 系统提供足够多但不是完全的控制能力。即,设计原则归结为:“系统只提供粗粒度的权限,细粒度的权限被认为是业务逻辑的职责”。

需 要再次强调的是,这里表述的权限系统仅是一个“不完全”的权限系统,即,它不提供所有关于权限的问题的解决方法。它提供一个基础,并解决那些具有“共性” 的(或者说粗粒度的)部分。在这个基础之上,根据“业务逻辑”的独特权限需求,编码实现剩余部分(或者说细粒度的)部分,才算完整。回到权限的问题公式, 通用的设计仅解决了Who+What+How 的问题,其他的权限问题留给业务逻辑解决。

概念:

Who:权限的拥用者或主体(Principal、User、Group、Role、Actor等等)

What:权限针对的对象或资源(Resource、Class)。

How:具体的权限(Privilege, 正向授权与负向授权)。

Role:是角色,拥有一定数量的权限。

Operator:操作。表明对What的How 操作。

说明:

User:与 Role 相关,用户仅仅是纯粹的用户,权限是被分离出去了的。User是不能与 Privilege 直接相关的,User 要拥有对某种资源的权限,必须通过Role去关联。解决 Who 的问题。

Resource:就是系统的资源,比如部门新闻,文档等各种可以被提供给用户访问的对象。资源可以反向包含自身,即树状结构,每一个资源节点可以与若干指定权限类别相关可定义是否将其权限应用于子节点。

Privilege: 是Resource Related的权限。就是指,这个权限是绑定在特定的资源实例上的。比如说部门新闻的发布权限,叫做"部门新闻发布权限"。这就表明,该 Privilege是一个发布权限,而且是针对部门新闻这种资源的一种发布权限。Privilege是由Creator在做开发时就确定的。权限,包括系 统定义权限和用户自定义权限用户自定义权限之间可以指定排斥和包含关系(如:读取,修改,管理三个权限,管理 权限 包含 前两种权限)。Privilege 如"删除" 是一个抽象的名词,当它不与任何具体的 Object 或 Resource 绑定在一起时是没有任何意义的。拿新闻发布来说,发布是一种权限,但是只说发布它是毫无意义的。因为不知道发布可以操作的对象是什么。只有当发布与新闻结 合在一起时,才会产生真正的 Privilege。这就是 Privilege Instance。权限系统根据需求的不同可以延伸生很多不同的版本。

Role:是粗粒度和细粒度(业务逻辑)的接口,一个基于粗粒度控制的权限框架软件,对外的接口应该是Role,具体业务实现可以直接继承或拓展丰富Role的内容,Role不是如同User或Group的具体实体,它是接口概念,抽象的通称。

Group: 用户组,权限分配的单位与载体。权限不考虑分配给特定的用户。组可以包括组(以实现权限的继承)。组可以包含用户,组内用户继承组的权限。Group要实 现继承。即在创建时必须要指定该Group的Parent是什么Group。在粗粒度控制上,可以认为,只要某用户直接或者间接的属于某个Group那么 它就具备这个Group的所有操作许可。细粒度控制上,在业务逻辑的判断中,User仅应关注其直接属于的Group,用来判断是否“同组” 。Group是可继承的,对于一个分级的权限实现,某个Group通过“继承”就已经直接获得了其父Group所拥有的所有“权限集合”,对这个 Group而言,需要与权限建立直接关联的,仅是它比起其父Group需要“扩展”的那部分权限。子组继承父组的所有权限,规则来得更简单,同时意味着管 理更容易。为了更进一步实现权限的继承,最直接的就是在Group上引入“父子关系”。

User 与Group是多对多的关系。即一个User可以属于多个Group之中,一个Group可以包括多个User。子Group与父Group是多对一的关 系。Operator某种意义上类似于Resource + Privilege概念,但这里的Resource仅包括Resource Type不表示Resource Instance。Group 可以直接映射组织结构,Role 可以直接映射组织结构中的业务角色,比较直观,而且也足够灵活。Role对系统的贡献实质上就是提供了一个比较粗颗粒的分配单位。

Group与Operator是多对多的关系。各概念的关系图示如下:

解释:

Operator 的定义包括了Resource Type和Method概念。即,What和How的概念。之所以将What和How绑定在一起作为一个Operator概念而不是分开建模再建立关联, 这是因为很多的How对于某What才有意义。比如,发布操作对新闻对象才有意义,对用户对象则没有意义。

How 本身的意义也有所不同,具体来说,对于每一个What可以定义N种操作。比如,对于合同这类对象,可以定义创建操作、提交操作、检查冲突操作等。可以认 为,How概念对应于每一个商业方法。其中,与具体用户身份相关的操作既可以定义在操作的业务逻辑之中,也可以定义在操作级别。比如,创建者的浏览视图与 普通用户的浏览视图要求内容不同。既可以在外部定义两个操作方法,也可以在一个操作方法的内部根据具体逻辑进行处理。具体应用哪一种方式应依据实际情况进 行处理。

这样的架构,应能在易于理解和管理的情况下,满足绝大部分粗粒度权限控制的功能需要。但是除了粗粒度权限,系统中必然还会包括无数对具体Instance的细粒度权限。这些问题,被留给业务逻辑来解决,这样的考虑基于以下两点:

一 方面,细粒度的权限判断必须要在资源上建模权限分配的支持信息才可能得以实现。比如,如果要求创建者和普通用户看到不同的信息内容,那么,资源本身应该有 其创建者的信息。另一方面,细粒度的权限常常具有相当大的业务逻辑相关性。对不同的业务逻辑,常常意味着完全不同的权限判定原则和策略。相比之下,粗粒度 的权限更具通用性,将其实现为一个架构,更有重用价值;而将细粒度的权限判断实现为一个架构级别的东西就显得繁琐,而且不是那么的有必要,用定制的代码来 实现就更简洁,更灵活。

所 以细粒度控制应该在底层解决,Resource在实例化的时候,必需指定Owner和GroupPrivilege在对Resource进行操作时也必然 会确定约束类型:究竟是OwnerOK还是GroupOK还是AllOK。Group应和Role严格分离User和Group是多对多的关 系,Group只用于对用户分类,不包含任何Role的意义;Role只授予User,而不是Group。如果用户需要还没有的多种Privilege的 组合,必须新增Role。Privilege必须能够访问Resource,同时带User参数,这样权限控制就完备了。

思想:

权限系统的核心由以下三部分构成:1.创造权限,2.分配权限,3.使用权限,然后,系统各部分的主要参与者对照如下:1.创造权限 - Creator创造,2.分配权限 - Administrator 分配,3.使用权限 - User:

1. Creator 创造 Privilege, Creator 在设计和实现系统时会划分,一个子系统或称为模块,应该有哪些权限。这里完成的是 Privilege 与 Resource 的对象声明,并没有真正将 Privilege 与具体Resource 实例联系在一起,形成Operator。

2. Administrator 指定 Privilege 与 Resource Instance 的关联。在这一步, 权限真正与资源实例联系到了一起, 产生了Operator(Privilege Instance)。Administrator利用Operator这个基本元素,来创造他理想中的权限模型。如,创建角色,创建用户组,给用户组分配 用户,将用户组与角色关联等等...这些操作都是由 Administrator 来完成的。

3. User 使用 Administrator 分配给的权限去使用各个子系统。Administrator 是用户,在他的心目中有一个比较适合他管理和维护的权限模型。于是,程序员只要回答一个问题,就是什么权限可以访问什么资源,也就是前面说的 Operator。程序员提供 Operator 就意味着给系统穿上了盔甲。Administrator 就可以按照他的意愿来建立他所希望的权限框架可以自行增加,删除,管理Resource和Privilege之间关系。可以自行设定用户User和角色 Role的对应关系。(如果将 Creator看作是 Basic 的发明者, Administrator 就是 Basic 的使用者,他可以做一些脚本式的编程) Operator是这个系统中最关键的部分,它是一个纽带,一个系在Programmer,Administrator,User之间的纽带。

用一个功能模块来举例子。

一.建立角色功能并做分配:

1.如果现在要做一个员工管理的模块(即Resources),这个模块有三个功能,分别是:增加,修改,删除。给这三个功能各自分配一个ID,这个ID叫做功能代号:

Emp_addEmp,Emp_deleteEmp,Emp_updateEmp。

2.建立一个角色(Role),把上面的功能代码加到这个角色拥有的权限中,并保存到数据库中。角色包括系统管理员,测试人员等。

3.建立一个员工的账号,并把一种或几种角色赋给这个员工。比如说这个员工既可以是公司管理人员,也可以是测试人员等。这样他登录到系统中将会只看到他拥有权限的那些模块。

二.把身份信息加到Session中。

登 录时,先到数据库中查找是否存在这个员工,如果存在,再根据员工的sn查找员工的权限信息,把员工所有的权限信息都入到一个Hashmap中,比如就把上 面的Emp_addEmp等放到这个Hashmap中。然后把Hashmap保存在一个UserInfoBean中。最后把这个UserInfoBean 放到Session中,这样在整个程序的运行过程中,系统随时都可以取得这个用户的身份信息。

三.根据用户的权限做出不同的显示。

可以对比当前员工的权限和给这个菜单分配的“功能ID”判断当前用户是否有打开这个菜单的权限。例如:如果保存员工权限的Hashmap中没有这三个ID的任何一个,那这个菜单就不会显示,如果员工的Hashmap中有任何一个ID,那这个菜单都会显示。

对 于一个新闻系统(Resouce),假设它有这样的功能(Privilege):查看,发布,删除,修改;假设对于删除,有"新闻系统管理者只能删除一月 前发布的,而超级管理员可删除所有的这样的限制,这属于业务逻辑(Business logic),而不属于用户权限范围。也就是说权限负责有没有删除的Permission,至于能删除哪些内容应该根据UserRole or UserGroup来决定(当然给UserRole or UserGroup分配权限时就应该包含上面两条业务逻辑)。

一 个用户可以拥有多种角色,但同一时刻用户只能用一种角色进入系统。角色的划分方法可以根据实际情况划分,按部门或机构进行划分的,至于角色拥有多少权限, 这就看系统管理员赋给他多少的权限了。用户—角色—权限的关键是角色。用户登录时是以用户和角色两种属性进行登录的(因为一个用户可以拥有多种角色,但同 一时刻只能扮演一种角色),根据角色得到用户的权限,登录后进行初始化。这其中的技巧是同一时刻某一用户只能用一种角色进行登录。

针 对不同的“角色”动态的建立不同的组,每个项目建立一个单独的Group,对于新的项目,建立新的 Group 即可。在权限判断部分,应在商业方法上予以控制。比如:不同用户的“操作能力”是不同的(粗粒度的控制应能满足要求),不同用户的“可视区域”是不同的 (体现在对被操作的对象的权限数据,是否允许当前用户访问,这需要对业务数据建模的时候考虑权限控制需要)。

扩展性:

有 了用户/权限管理的基本框架,Who(User/Group)的概念是不会经常需要扩展的。变化的可能是系统中引入新的 What (新的Resource类型)或者新的How(新的操作方式)。那在三个基本概念中,仅在Permission上进行扩展是不够的。这样的设计中 Permission实质上解决了How 的问题,即表示了“怎样”的操作。那么这个“怎样”是在哪一个层次上的定义呢?将Permission定义在“商业方法”级别比较合适。比如,发布、购 买、取消。每一个商业方法可以意味着用户进行的一个“动作”。定义在商业逻辑的层次上,一方面保证了数据访问代码的“纯洁性”,另一方面在功能上也是“足 够”的。也就是说,对更低层次,能自由的访问数据,对更高层次,也能比较精细的控制权限。

确 定了Permission定义的合适层次,更进一步,能够发现Permission实际上还隐含了What的概念。也就是说,对于What的How操作才 会是一个完整的Operator。比如,“发布”操作,隐含了“信息”的“发布”概念,而对于“商品”而言发布操作是没有意义的。同样的,“购买”操作, 隐含了“商品”的“购买”概念。这里的绑定还体现在大量通用的同名的操作上,比如,需要区分“商品的删除”与“信息的删除”这两个同名为“删除”的不同操 作。

提 供权限系统的扩展能力是在Operator (Resource + Permission)的概念上进行扩展。Proxy 模式是一个非常合适的实现方式。实现大致如下:在业务逻辑层(EJB Session Facade [Stateful SessionBean]中),取得该商业方法的Methodname,再根据Classname和 Methodname 检索Operator 数据,然后依据这个Operator信息和Stateful中保存的User信息判断当前用户是否具备该方法的操作权限。

应 用在 EJB 模式下,可以定义一个很明确的 Business层次,而一个Business 可能意味着不同的视图,当多个视图都对应于一个业务逻辑的时候,比如,Swing Client以及 Jsp Client 访问的是同一个 EJB 实现的 Business。在 Business 层上应用权限较能提供集中的控制能力。实际上,如果权限系统提供了查询能力,那么会发现,在视图层次已经可以不去理解权限,它只需要根据查询结果控制界面 就可以了。

灵活性:

Group 和Role,只是一种辅助实现的手段,不是必需的。如果系统的Role很多,逐个授权违背了“简单,方便”的目的,那就引入Group,将权限相同的 Role组成一个Group进行集中授权。Role也一样,是某一类Operator的集合,是为了简化针对多个Operator的操作。

Role把具体的用户和组从权限中解放出来。一个用户可以承担不同的角色,从而实现授权的灵活性。当然,Group也可以实现类似的功能。但实际业务中,Group划分多以行政组织结构或业务功能划分;如果为了权限管理强行将一个用户加入不同的组,会导致管理的复杂性。

Domain 的应用。为了授权更灵活,可以将Where或者Scope抽象出来,称之为Domain,真正的授权是在Domain的范围内进行,具体的 Resource将分属于不同的Domain。比如:一个新闻机构有国内与国外两大分支,两大分支内又都有不同的资源(体育类、生活类、时事政治类)。假 如所有国内新闻的权限规则都是一样的,所有国外新闻的权限规则也相同。则可以建立两个域,分别授权,然后只要将各类新闻与不同的域关联,受域上的权限控 制,从而使之简化。

权限系统还应该考虑将功能性的授权与资源性的授权分开。很多系统都只有对系统中的数据(资源)的维护有权限控制,但没有对系统功能的权限控制。

权 限系统最好是可以分层管理而不是集中管理。大多客户希望不同的部门能且仅能管理其部门内部的事务,而不是什么都需要一个集中的Administrator 或Administrators组来管理。虽然你可以将不同部门的人都加入Administrators组,但他们的权限过大,可以管理整个系统资源而不 是该部门资源。

正向授权与负向授权:正向授权在开始时假定主体没有任何权限,然后根据需要授予权限,适合于权限要求严格的系统。负向授权在开始时假定主体有所有权限,然后将某些特殊权限收回。

权限计算策略:系统中User,Group,Role都可以授权,权限可以有正负向之分,在计算用户的净权限时定义一套策略。

系 统中应该有一个集中管理权限的AccessService,负责权限的维护(业务管理员、安全管理模块)与使用(最终用户、各功能模块),该 AccessService在实现时要同时考虑一般权限与特殊权限。虽然在具体实现上可以有很多,比如用Proxy模式,但应该使这些Proxy依赖于 AccessService。各模块功能中调用AccessService来检查是否有相应的权限。所以说,权限管理不是安全管理模块自己一个人的事情, 而是与系统各功能模块都有关系。每个功能模块的开发人员都应该熟悉安全管理模块,当然,也要从业务上熟悉本模块的安全规则。

技术实现:

1.表单式认证,这是常用的,但用户到达一个不被授权访问的资源时,Web容器就发

出一个html页面,要求输入用户名和密码。

2.一个基于Servlet Sign in/Sign out来集中处理所有的Request,缺点是必须由应用程序自己来处理。

3.用Filter防止用户访问一些未被授权的资源,Filter会截取所有Request/Response,

然后放置一个验证通过的标识在用户的Session中,然后Filter每次依靠这个标识来决定是否放行Response。

这个模式分为:

Gatekeeper :采取Filter或统一Servlet的方式。

Authenticator: 在Web中使用JAAS自己来实现。

用户资格存储LDAP或数据库:

1. Gatekeeper拦截检查每个到达受保护的资源。首先检查这个用户是否有已经创建

好的Login Session,如果没有,Gatekeeper 检查是否有一个全局的和Authenticator相关的session?

2. 如果没有全局的session,这个用户被导向到Authenticator的Sign-on 页面,

要求提供用户名和密码。

3. Authenticator接受用户名和密码,通过用户的资格系统验证用户。

4. 如果验证成功,Authenticator将创建一个全局Login session,并且导向Gatekeeper

来为这个用户在他的web应用中创建一个Login Session。

5. Authenticator和Gatekeepers联合分享Cookie,或者使用Tokens在Query字符里。

 

因 为我在上一个的项目中负责有关权限控制这一块,所以Linkin把权限系统方面的设计工作交给我了。但是,我不想沿用以前我们设计的权限系统,因为我们以 前的权限系统有一些缺陷。并且在做以前的权限系统的时候也积累了一些我的想法,希望能在这次的系统中把我以前的一些想法应用上去,设计出一个更好的权限系 统,因为这个权限系统是为大中型企业应用框架服务的,所以会比较全面,但是又绝对不会像某些变态的ERP系统对数据表中的每个字段都作CRUD权限控制。 我设计的原则是“够用,好用”。权限系统只负责粗粒度上的控制,细粒度的权限控制,交与子业务系统自己负责。  说到权限控制,从应用系统诞生那天起,他就跟随着出现了。说白了所谓权限控制就是你只能访问和操作特定的系统资源。就像正常情况下你只能从银行里取出属于 你自己的钱一样。同样你也只能查询你自己的帐户里面的余额。似乎是老生常谈了,那就让我们直奔主题吧。  如何在我们自己的系统中设计一套安全,易用,能够适应以后企业级应用扩展的权限控制机制。经过权衡和我们自己以往的经验,认为基于角色的访问控制方法 (RBAC)。是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:    1.减小授权管理的复杂性,降低管理开销。    2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

首 先让我们来认识一下,在角色(Role)控制访问中需要用到的几个概念:    1.User(用户)。一个具有系统唯一标识(一般是账号Account)的纯粹用户,他和Role和Group有关联。本身他的权限是被分离出去 的,User也不能与任何权限有任何的联系。他的权限通过Role去关联。    2.Role(角色)。角色的作用就是和众多的权限相连,然后一个User或是一个Group必须和一个Role关联,才具有与该Role相连的所有的权 限。呵呵不知道,我表达清楚了没有。举一个例子,比如系统中有一个“招聘信息发布员”角色,一个账号“MyAccount”。这个“招聘信息发布员”的角 色具有“添加”、“编辑”、“删除”招聘信息的权限。我就只需要把“MyAccount”这个账号加入到“招聘信息发布员”的角色中 去,“MyAccount”就具有了相应的权限。如果到后面还有“MyAccount2”“MyAccount3”.也需要同样的权限,和前面一样。我们 把他们加入到“招聘信息发布员”角色中去就好了。大大降低了授权管理的复杂度。(在我的想法里,还有一种特殊的Role,这种Role可以和机构有所联 系,可以为加入该Role的User指定相应的业务机构,比如“招聘管理员”这个角色,很有可能出现总公司的招聘人员负责几家子公司的招聘工作,那么有了 这样的Role,我们那个把招聘人员加入的同时,指定他所管理的机构就可以达到目的。类似的还有一个文秘管理几个公司的情况。这种Role为业务系统的扩 展提供了很大的便利。)    再进一步,我们试着想象如果角色之间可以继承权限,那么权限的设置是不是就更加的简单了呢。角色A只要继承角色B,角色A的权限就是角色A和角色B的权限 的合集。这我们这个医疗信息系统中,我决定尝试一下角色可单继承的权限控制。尽可能的简化授权操作。    3.Group(用户组),似乎这个概念和Role和有雷同之处,感觉都是一些个用户的组合。从本质上说两者确实都是对某些特定用户的抽象和提取。比如说 Role(角色)就是对User的操作权限共性的提取。举个例子上面我们提到的“招聘信息发布员”,他理所当然的具有管理本部门招聘信息的权限,这是系统 中所有招聘管理员的权限共性。所以就产生了“招聘信息发布员”这个角色。区别于Role,Group提取更多的是User的部门共性和职位共 性,Group中的User可以是一个部门中的所有员工,也可以是公司中所有的文秘,甚至可以就是几个人的组合。当然在我们的系统中绝大多数的组都是和机 构一一对应的,并且这样的组通过所属机构的层次关系表现出包含关系,子机构的组必然包含于父机构的组。我把这种组称为“Organ Group”——机构组。同时可以添加一些自定义的组,把你想归纳的User加入到该组中,这样的组我把它叫做“User defined Group”——自定义组。 为什么要这么设计呢?把人员划成这么多组。这里有几个优点     (1)可以简化授权。直接把一个组里面的人员全部加入一个角色,省的一个一个的去加。     (2)方便的资源管理。在现实的环境中,个个业务部门所属的资源是不一样的。比如一个文件发布的功能,需要选定浏览范围,这样只要把公文赋给几个特定的组 就可以了。这几个组里面的人自动获得了浏览该公文的权限。     (3)业务的灵活体现。因为有自定义组的存在,当出现新的业务,比如有一个临时项目组,需要拉几个人,只需要新建一个自定义组,便可以对其进行各种业务操 作。    4.Permission(权限许可)。在这里先要说说Resource(资源)和 Operation(操作)的概念。Resource就是系统里面可用的功能模块,比如“人员信息管理”。而操作就是在管理模块里的添加,删除和修改等 等。Permission就是(Resource + Operation),而Permission就是和Role紧密相连的权限了。Administrator也就是将这些Permission赋给 Role,那么Role中的User便具有相应的权限了。    5.Organ(机构)。这个倒是无需多言。机构是整个信息系统的骨架,最直接的Organ Group就是建立在机构之上的。    6.Position(职务)。这个概念好像离权限系统的设计有点远,我也一直在犹豫要不要把这个和人事系统更有血缘关系的东东弄到权限系统中来,来回思 考了我们框架的目标——“一个高可扩展性,高可靠性,支持快速构建业务的企业级应用基础框架”,并且现在企业数据都希望能够“大集中”、“大统一”,未来 的人事系统可以完全的构建在我们的框架之上,作为一个子系统而存在。所以我最终还是决定,将这个概念引到我们的权限系统中来,并且成为不可或缺一部分,任 何User必须具有在某个Organ下的Position才能进入到系统。     Linkin这里指出这样做似乎有过度设计之嫌,不符合XP的精神。我也有这么一点点感觉,因为我感到现在的设计已经基本能解决所有的权限问题了,甚至考 虑到了未来的业务系统的权限实现方式。同时,这个权限设计确实有点趋于复杂(当然还不至于变态),会对今后系统管理员的素质提出更高的要求。有点不好把 握,还是大家讨论讨论吧

分享到:
评论

相关推荐

    用户权限系统设计概述

    权限系统的核心由以下三部分构成:1.创造权限,2.分配权限,3.使用权限,然后,系统各部分的主要参与者对照如下:1.创造权限 - Creator创造,2.分配权限 - Administrator 分配,3.使用权限 - User:

    软件架构--系统设计概述

    本文将深入探讨“软件架构--系统设计概述”这一主题,旨在为学习者提供一个全面的理解,帮助他们从宏观层面把握软件开发的核心。 系统设计是软件架构的重要组成部分,它关注的是如何将业务需求转化为技术实现。在这...

    系统架构设计课件 系统设计概述+系统表示层设计

    本课件主要关注两个核心方面:系统设计概述和系统表示层设计。 首先,我们来探讨系统设计概述。系统设计是将业务需求转化为技术解决方案的过程,它包括了对系统的整体规划、模块划分、接口设计以及数据结构和算法的...

    客户信息管理系统总体设计概述.docx

    "客户信息管理系统总体设计概述" 本客户信息管理系统总体设计概述是基于《客户信息管理系统总体设计》和《客户信息管理系统需求报告》的依据,旨在明确程序具体实现功能、指导编程人员以后的编程工作。该系统的主要...

    ASP.NET系统用户权限设计与实现

    ASP.NET 系统用户权限设计与实现 ASP.NET 系统用户权限设计与实现是指在 ASP.NET 系统中设计和实现用户权限控制的机制,以满足电子商务系统对安全性的要求。该机制基于 RBAC(Role-Based Access Control,基于角色...

    基于微信小程序的学生活动管理系统设计概述.pdf

    《基于微信小程序的学生活动管理系统设计概述》这一文献,详细介绍了如何利用微信小程序技术,设计并实现一个高效的学生活动管理系统,以满足现代教育的需求。 ### 微信小程序与学生活动管理系统的结合 微信小程序...

    通用数据权限管理系统设计

    ### 通用数据权限管理系统设计详解 #### 一、引言 在现代企业的信息化管理中,权限管理成为确保数据安全和合理使用的关键环节。一个高效、灵活的通用数据权限管理系统不仅能够提升企业的运营效率,还能更好地保护...

    客房信息管理系统包括需求概述 系统模块 数据流图

    《客房信息管理系统:需求概述与系统模块解析》 在当今信息化时代,酒店业为了提升服务质量与效率,纷纷采用客房信息管理系统。这样的系统旨在通过计算机技术整合旅客信息、客房信息及各类资源,以优化运营,降低...

    权限系统概要-权限系统概要

    ### 权限系统概要分析 #### 权限系统概要理解 权限系统是现代软件系统中的关键组成部分,主要用于管理...通过对权限模型、权限元素以及权限实现方式的深入了解,我们可以更好地设计和实现符合实际需求的权限系统。

    权限管理概述

    良好的权限设计不仅可以提升系统的安全性,还能提高工作效率,减少因权限问题带来的潜在风险。 #### 一、什么是权限管理 权限管理是指通过定义、分配和管理一系列规则来控制用户对系统中的资源或功能的操作权限的...

    图书馆管理系统项目概述

    ### 图书馆管理系统项目概述 #### 一、项目背景与意义 随着信息技术的快速发展,图书馆作为重要的信息资源中心,面临着巨大的挑战与机遇。为了提高图书流通效率,改善服务质量,图书馆管理系统成为了不可或缺的一...

    图书管理系统数据库概述

    系统概述 - **需求分析**:图书管理系统的核心功能在于管理图书和读者的信息,支持图书的借阅、归还、查询等功能。 - **概念设计**:此环节主要是确定系统中的实体及其属性,建立实体之间的联系。例如,图书实体...

    权限管理方案概述.doc

    这意味着系统设计必须考虑到各种角色,如管理员、员工、项目经理等,并确保每个角色只能执行其职责范围内的操作。例如,前台员工可能被赋予考勤查询的权限,而系统管理员则拥有更广泛的权限,如系统设置和用户管理。...

    图书管理系统数据库概述.docx

    本文档对图书管理系统数据库的设计进行了详细的概述。整个系统的设计过程分为几个阶段,包括需求分析、概念设计、逻辑设计和物理设计。 在需求分析阶段,系统的目的和功能被定义了。图书管理系统是一个基于集中统一...

    权限设计 打包(5个文档、教程)

    这份说明书可能是对一个特定的Java权限管理系统的设计概述。它可能包括系统架构,设计原则,数据库模型,接口设计,以及权限管理模块的详细功能描述。对于开发者来说,这是理解系统设计和实现的重要参考资料。 5. ...

    基于部门和角色的权限管理系统的设计与实现

    ### 基于部门和角色的权限管理系统的设计与实现 #### 概述 在现代企业的信息化建设中,权限管理作为保障信息安全、规范操作流程的重要环节,其重要性日益凸显。传统的权限管理方式往往依赖于静态的角色分配,缺乏...

    教务管理系统概要设计和详细设计说明书

    6. 安全性设计:考虑数据保护,如用户权限控制、数据加密等,以防止非法访问和操作。 在软件工程实践中,教务管理系统概要设计和详细设计说明书是项目开发的重要指导文档,它们为开发团队提供了清晰的开发路线图,...

    企业人事管理系统概述课件.pptx

    【企业人事管理系统概述】 企业人事管理系统是现代企业管理中不可或缺的一部分,尤其在当今快速发展的商业环境中,市场竞争日益激烈,企业必须高效、科学地管理人力资源以获取竞争优势。人事信息管理系统旨在帮助...

Global site tag (gtag.js) - Google Analytics