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

关于用户角色权限的一点想法(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.

分享到:
评论

相关推荐

    角色用户权限DB设计

    一直想整理一篇关于用户角色权限的设计,这几天通过网上资料和自己实际工作中运用到的资源把用户角色权限的数据库表设计出来。 基础表有3张: 角色表--用来记录角色名称 用户表--用来记录登录用户名称和登录密码 ...

    针对SU53提示修改用户角色权限

    ### SU53提示修改用户角色权限 在企业管理与IT系统管理中,用户权限管理是非常重要的一环,它关乎系统的安全性和操作的规范性。本文主要围绕“SU53提示修改用户角色权限”的主题展开,详细解析SU53事务码的作用、...

    C# winform 权限控制 包括角色 用户 权限设置

    本教程将详细讲解如何在C# WinForm环境中实现基于角色的权限控制,包括角色、用户和权限的设置。 首先,我们需要理解几个基本概念: 1. **用户**:在系统中进行操作的个体,可以是实际的人或者代表某个实体的程序...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    本项目结合了SpringBoot、SpringSecurity以及JPA(Java Persistence API),实现了用户角色权限的登录认证功能。以下是关于这些技术及实现过程的详细讲解。 1. **SpringBoot**:SpringBoot简化了Spring应用的初始...

    角色权限表设计

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

    基于C# WinForm的用户角色权限管理系统.zip

    此项目基于mysql5.0、visual studio 2017开发出来的,主要功能包括用户的登录注册,学生信息以及成绩的增删改查,账号的增删改查,菜单的增删改,对角色分配菜单项,即授权。对账号选定角色,账号登录之后只会显示给...

    基于角色的权限管理数据库设计

    在基于角色的权限管理系统中,除了上述的基本表之外,还需要设计一些关联表来表示实体之间的关系,如用户与角色的关系、角色与权限的关系等。 ##### 用户与角色关联表 (RBAC_User_Role) 此表用于记录用户所拥有的...

    sap角色权限设置手册

    * 用户权限查看:在维护角色时,需要注意用户的权限查看,例如查看采购订单的权限。 四、角色设置的应用场景 1. 采购管理 在采购管理中,角色设置可以控制用户的采购订单创建、更改和查看权限。 2. 库存管理 在...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    使用spring+springmvc框架 整合了Mybatis持久层框架 整合Druid用于数据库连接,并使用Druid对业务层监控spring jdbc 整合EhCache,对Mybatis的二级缓存进行管理和对spring进行缓存管理 ...整合hibernate.validator校验...

    用户角色权限-控制系统Demo

    用户角色权限-控制系统Demo

    金蝶系统用户权限分配表

    1. 模块权限:这是最基础的权限级别,决定了用户可以访问哪些系统模块,如财务模块、采购模块等。不同的模块对应不同的业务流程,只有拥有相应模块权限的用户才能进入并操作。 2. 功能权限:在模块权限的基础上,...

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

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

    C# WinForm实现基于角色权限的菜单

    在C# WinForm应用开发中,构建一个基于角色权限的菜单是常见的需求,尤其是在企业级应用中,确保不同用户群体只能访问他们被授权的操作。这个项目利用Visual Studio 2008或更高版本来实现这样的功能,展示了如何将...

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

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

    信息系统用户帐号和角色权限管理流程.pdf

    信息系统用户帐号和角色权限管理流程.pdf信息系统用户帐号和角色权限管理流程.pdf信息系统用户帐号和角色权限管理流程.pdf信息系统用户帐号和角色权限管理流程.pdf信息系统用户帐号和角色权限管理流程.pdf

    Oracle11用户角色权限等操作.pdf

    ..Oracle11用户角色权限等操作.pdf

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

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

    Oracle用户权限角色设置

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

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

    在Asp.Net MVC框架中,开发人员经常使用BootStrap和Entity Framework(EF6.0)来构建功能丰富的Web应用程序,其中包括用户角色权限管理。这是一个关键的系统设计部分,用于确保用户只能访问他们被授权的功能和数据。...

    角色权限设计方案.pdf

    关于是否需要设计用户组,有些人可能认为直接给单个用户分配权限即可。然而,当需要给已有的大量用户赋予新权限时,使用用户组的优势就显现出来。只需在用户组层面分配权限,无需逐一操作用户,降低了管理复杂度。...

Global site tag (gtag.js) - Google Analytics