系统权限设计概述
因为我在上一个的项目中负责有关权限控制这一块,所以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的精神。我也有这么一点点感觉,因为我感到现在的设计已经基本能解决所有的权限问题了,甚至考虑到了未来的业务系统的权限实现方式。同时,这个权限设计确实有点趋于复杂(当然还不至于变态),会对今后系统管理员的素质提出更高的要求。有点不好把握,还是大家讨论讨论吧。
已发表 2005年9月24日 23:25 作者 windtower
分享到:
相关推荐
本压缩包包含的五个关键文档分别是:详细设计文档、概要设计文档、需求说明文档、数据库说明文档和模板概述,每个都有其特定的作用和内容。 1. **详细设计文档**:详细设计文档是对软件各个模块的详细描述,它涵盖...
【系统分析师考试:系统的概要设计】 系统概要设计是软件开发过程中的关键环节,它在需求分析之后,详细设计之前,是将高层需求转化为可实施的系统架构的过程。在这个阶段,系统分析师需要对系统进行整体规划,确定...
软件概要设计模板知识点 软件概要设计模板是软件开发项目管理中的一种重要文档,它用于记录软件的总体设计和需求规格。下面是软件概要设计模板中的知识点: 1. 软件概要设计模板的作用:软件概要设计模板的主要...
关于购物商城的概要设计 购物商城概要设计是指对购物商城系统的总体架构、包结构、类分析、控制层分析、数据库设计等方面的设计和规划。下面是购物商城概要设计的知识点: 1. 系统设计的目的:购物商城概要设计的...
系统设计是软件开发过程中的关键环节,主要包括概要设计和详细设计两个阶段。这两个阶段的目标是将需求转化为可实现的架构和具体实现方案。 概要设计(也称为高层设计)首先涉及收集相关资料,理解项目背景和系统...
医学图像处理技术:复件 课程概要.ppt
硬件设计概要设计是系统开发过程中的重要环节,它为硬件工程师提供了一个清晰的蓝图,指导着从概念到实现的整个过程。这份“硬件设计概要设计模板”旨在帮助设计师们构建一个结构化的、全面的硬件设计方案,确保设计...
【权限系统概要设计说明书】 本文档主要针对基于J2EE的Web系统中的权限管理系统进行概要设计,旨在实现一个高效、灵活且安全的权限管理框架。通用权限管理系统旨在为各类应用提供统一的用户访问控制,确保不同角色...
这个压缩包文件“OA设计文档”显然包含了这个过程中的关键文档,包括序、概要设计、用例图、环境搭建和环境测试等重要环节。下面我们将详细探讨这些知识点。 1. **序**:通常在项目开始时,会有一个序章或者项目...
软件概要设计报告文档目录是整个软件概要设计文档的框架,涵盖了引言、设计概述、系统逻辑设计、系统组织设计、系统结构设计、系统接口设计等几个部分。 软件概要设计文档模板的主要内容包括: 1. 设计概述:介绍...
《通用权限管理概要设计说明书》V1.0是一份详细阐述权限管理系统的初步设计方案,旨在为系统开发提供基础架构和指导原则。本设计说明书涵盖了系统设计的目标、运行环境、网络结构以及模块化设计等多个方面。 1. **...
概要设计模板概要设计模板概要设计模板概要设计模板概要设计模板概要设计模板概要设计模板概要设计模板 本资源文件是一个软件概要设计模板,旨在指导软件开发的概要设计阶段。该模板涵盖了软件开发的多个方面,包括...
3. 权限管理:权限定义了用户可以执行的操作,如查看、编辑、删除等。权限可以按照资源(如菜单、页面、按钮等)进行分配,并支持权限继承和权限组合。 4. 组织结构管理:企业级系统通常需要考虑部门、团队等组织...
《概要设计说明实例》是软件开发过程中一个重要的文档集合,它主要涵盖了软件系统在架构层面的规划和设计。这份压缩包文件包含了多个实例,旨在为开发者提供详细的概要设计思路和方法。以下是对概要设计及其说明实例...
软件开发中的概要设计,这个模板有助于编写概要设计!
"接口概要设计说"文档通常用于详细阐述这些接口的基本结构、功能和通信协议,为后续的详细设计和实现提供指导。以下是根据标题和描述中涉及的接口概要设计知识点的详细说明: 1. **接口定义**:接口是系统间或系统...
1. **权限模型**:权限系统通常基于一种或多种权限模型构建,例如自主访问控制(Discretionary Access Control, DAC)、强制访问控制(Mandatory Access Control, MAC)或者基于角色的访问控制(Role-Based Access ...
《软件概要设计说明书》是软件开发过程中至关重要的文档之一,它在系统设计阶段起着承上启下的作用,连接需求分析与详细设计。这份压缩包文件“软件概要设计说明书.rar”包含了一个标准模板,提供了编写此类文档的...
《IT项目模板:概要设计说明书》是一份关键的文档,它在软件开发过程中起着承上启下的作用,连接需求分析与详细设计阶段。本文将深入探讨概要设计说明书中的核心内容及其重要性。 首先,概要设计说明书的编写目的...