`
weiwu83
  • 浏览: 191353 次
  • 来自: ...
社区版块
存档分类
最新评论

关于用户角色权限的一点想法(1)

阅读更多

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

目标<o:p></o:p>

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

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

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

现状<o:p></o:p>

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

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

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

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

名词<o:p></o:p>

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

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

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

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

原则<o:p></o:p>

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

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

概念<o:p></o:p>

Who:权限的拥用者或主体(PrincipalUserGroupRoleActor等等)<o:p></o:p>

What:权限针对的对象或资源(ResourceClass)。<o:p></o:p>

How:具体的权限(Privilege, 正向授权与负向授权)。<o:p></o:p>

Role:是角色,拥有一定数量的权限。<o:p></o:p>

Operator:操作。表明对WhatHow 操作。<o:p></o:p>

说明<o:p></o:p>

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

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

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

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

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

UserGroup是多对多的关系。即一个User可以属于多个Group之中,一个Group可以包括多个User。子Group与父Group是多对一的关系。Operator某种意义上类似于Resource + Privilege概念,但这里的Resource仅包括Resource Type不表示Resource InstanceGroup 可以直接映射组织结构,Role 可以直接映射组织结构中的业务角色,比

较直观,而且也足够灵活。Role对系统的贡献实质上就是提供了一个比较粗颗粒的分配单位。<o:p></o:p>

GroupOperator是多对多的关系。各概念的关系图示如下:<v:shapetype id="_x0000_t75"><v:formulas>  <v:f></v:f>
 </v:formulas>
 <v:path></v:path>
<o:lock v:ext="edit" aspectratio="t"></o:lock>
</v:shapetype>
解释<o:p></o:p>

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

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

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

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

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

思想<o:p></o:p>

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

分享到:
评论

相关推荐

    用户角色权限管理模块

    在IT系统设计中,用户角色权限管理模块是一个至关重要的组成部分,它主要负责维护系统的安全性和访问控制。这个模块确保了不同类型的用户只能访问他们被授权的功能和数据,从而保护了系统的完整性并提升了用户体验。...

    java用户角色权限设计

    ### Java用户角色权限设计详解 在企业级应用中,用户角色权限设计是至关重要的环节,尤其是在B/S架构的系统中,因为用户权限检测不能仅依赖于客户端,必须有一套完整且严密的权限检测机制,以确保只有授权用户才能...

    用户角色权限重新开放下载

    1. 数据库脚本:创建用户、角色和权限表的SQL文件。 2. Java代码:实现用户认证和授权的后端逻辑。 3. Layui前端代码:用于展示和操作用户角色权限的HTML、CSS和JavaScript文件。 4. 文档:可能包含数据库设计文档、...

    应用信息系统用户帐号与角色权限管理办法.doc

    应用信息系统中对用户操作权限的控制是通过建立一套角色与权限对应关系,对用户帐号授予某个角色或多个角色的组合来实现的,一个角色对应一定的权限(即应用信息系统中允许操作某功能点或功能点集合的权力),一个...

    角色权限表设计

    初步估计一下,本系统至少需要十张表,分别为:权限表、用户表、角色表、组表、用户权限关联表、用户角色关联表、角色权限关联表、组权限关联表、组角色关联表、用户属组关联表。 权限管理是应用系统中比较棘手的...

    C# WinForm角色的权限菜单-源码.zip

    1. **角色权限设计**: 角色权限设计是一种常见的访问控制策略,它将权限与角色关联,而不是直接与用户关联。这样,当一个用户被分配到某个角色时,他自动获得了该角色所包含的所有权限。这种设计简化了权限管理,...

    Oracle用户、权限、角色管理

    ### Oracle用户、权限、角色管理深度解析 在Oracle数据库的管理中,用户、权限和角色的管理是确保数据安全和高效使用的关键环节。本文将详细阐述Oracle中的用户管理、权限设置,以及角色管理的重要概念和操作流程。...

    基于角色的权限控制

    1. 用户界面:用户登录并进行操作的地方,用户可以看到他们被分配的角色和相应权限。 2. 控制器:处理用户请求,检查用户是否有执行某操作的权限。 3. 数据库:存储用户、角色和权限的相关信息,包括用户-角色关系、...

    Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    在Asp.Net MVC框架下,结合BootStrap和Entity Framework 6.0(简称EF6.0),可以构建一个简洁而强大的用户角色权限管理系统。这个系统的核心目标是实现对后台资源的有效控制,确保只有拥有相应权限的用户才能访问...

    用户表角色权限表的设计.doc

    【用户表角色权限表的设计】 在设计用户表角色权限系统时,主要目的是创建一个灵活、通用且易于管理的权限框架,以确保应用系统的安全性并满足不同用户群体的需求。以下是设计的关键知识点: 1. **权限系统的基本...

    获取当前系统用户角色信息

    1. **用户角色**: 在一个系统中,用户角色是指用户在系统中的身份和职责。例如,管理员、普通用户、编辑员等。这些角色定义了用户可以执行的操作和访问的资源。通过分配角色,系统可以实现基于角色的访问控制(RBAC...

    JAVA用户、角色、权限、菜单、工作流管理系统

    目前系统已经基本集成的功能包含有,用户管理,角色管理,菜单管理,组织管理,数据字典,日志管理,接口管理(暂时未完成实际应用),流程配置,运行流程管理,消息管理(暂无实际应用),业务模块没有做。后台是基于...

    c#用户权限管理实现

    4. **角色管理**:用户可以被分配到不同的角色,每个角色具有一组预定义的权限。通过角色,可以批量管理大量用户的权限,简化权限设置。 5. **中间件或过滤器**:在ASP.NET MVC中,可以使用中间件或Action Filter来...

    【猿来入此】SSM框架角色权限管理系统脚手架源码

    用户表存储用户的基本信息,角色表存储角色及其描述,权限表定义具体的操作权限,用户角色关联表则记录用户属于哪些角色。 6. **运行截图、项目源码、项目素材、数据库文件**:这些资源对理解并运行此系统至关重要...

    用户权限设计方案

    用户权限设计方案是指通过建立用户、角色和权限等数据库表,并且建立之间的关系来实现用户认证管理的设计方案。该方案的主要目的是为了提供一种具有较强可扩展性的用户认证管理系统,能够满足不同类型的用户和角色...

    用户登录分配不同角色

    在IT系统设计中,"用户登录分配不同角色"是一个核心概念,主要涉及到权限管理、身份认证和访问控制等领域。这一机制旨在确保系统安全,提高用户体验,同时满足不同用户群体的需求。下面将详细阐述这一主题: 1. **...

    PHP网站后台角色权限管理系统源码.zip

    用户表存储用户信息,角色表记录角色信息,权限表定义系统的所有权限,角色权限关联表用于关联角色和权限。 四、核心功能实现 4.1 用户注册与登录:系统提供用户注册和登录功能,通过验证用户名和密码来确定用户...

    Oracle用户权限角色设置

    Oracle用户权限角色设置,用来在新建的数据库中添加新的用户,并为其设置权限。

    通用角色权限管理系统设计

    - 用户的实际权限集合包括:自身权限 + 所属角色权限 + 所属组权限。 3. **角色** - 用于管理具有相似权限的一组用户。 - 角色同样具有层次结构,父级角色的权限包含所有子角色的权限。 - 示例:系统管理员、...

Global site tag (gtag.js) - Google Analytics