权限管理,这是每个软件系统都会涉及到的,而且权限管理的需求本质往往都是一样,无在乎怎么的角色拥有怎样的权限,只要你充当了这个角色,你就拥有了这些功能。
举个简单例子:一个老师在学校教室她就拥有教书育人的权利义务,一个丈夫在家就有呵护妻子支撑家庭的权利义务,而一个父亲在孩子面前就有保护孩子,教育孩子的权利义务……而作为一个男生,我们很可能在不同的场所,成为这些角色,从而拥有了这些权利义务。而抽象出来就是用户,角色和权利三个方面。
所以经过前人对权限方面的总结抽象,总结出来RBAC(Role-Based Access Control )基于角色的访问控制。在以前做项目的时候,就听组长说权限管理模型的运用,但是自己但是只是接触了一下,直到后来在项目中真正的使用,才对此有深刻的理解。
RBAC认为授权实际就是who,what,how三者之间的关系,即who对what进行how的操作。Who,权限的拥用者或主体(如Principal、User、Group、Role、Actor等等);what,权限针对的对象或资源(Resource、Class) ;How,具体的权限(Privilege,正向授权与负向授权)。简单一点说吧就是,我们通过给角色授权,然后将附有权利的角色施加到某个用户身上,这样用户就可以实施相应的权利了。通过中间角色的身份,是权限管理更加灵活:角色的权利可以灵活改变,用户的角色的身份可以随着场所的不同而发生改变等。这样这套RBAC就几乎可以运用到所有的权限管理的模块上了。
好,看一下RBAC的分类吧:
1,核心RABC0:这是权限管理的核心部分,其他的版本都是建立在0的基础上的,看一下类图:
通常情况下,RBAC0模型就可以解决权限模型,是最通用的。图中描述了,1,用户和角色是多对多的关系,表示一个用户在不同的场景下可以拥有不同的角色,例如项目经理也可以是项目架构师等;当然了一个角色可以给多个用户,例如一个项目中有多个组长,多个组员等。这里需要提出的是,将用户和许可进行分离,是彼此相互独立,使权限的授权认证更加灵活。2,角色和许可(权限)是多对多的关系,表示角色可以拥有多分权利,同一个权利可以授给多个角色都是非常容易理解的,想想现实生活中,当官的级别不同的权限的情景,其实这个模型就是对权限这方面的一个抽象,联系生活理解就非常容易了。
在项目中开发中我们正是使用这种最简单,但是却最通用的权限模型。
这样,我们项目中就用五张表来进行权限方面的管理了,在用户表中保存用户,角色表中保存角色级别,许可表中保存各种权限信息,然后通过中间表,来维护彼此之间的关系。这样就完成了权限的管理了。
2,RBAC1,基于RBAC0模型,进行了角色的分层,也就是说角色上有了上下级的区别,存在了继承包含关系,也就是前边说过的适合于用树展现的哪种自关联的结构,这种模型合适于角色之间的层次明确,包含明确。但是认为用第一种模型也是可以的,只不过第一种可能会有数据冗余,没有这种更加面向对象化而已。
3,RBAC2,也是基于RBAC0模型的基础上,进行了角色的访问控制。a,RBAC2中的一个基本限制时互斥角色的限制,互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色;b,是指角色的权利权利是有限的,用户有用的角色也是有限的,当然分配用户时也是有限的,不能进行无限制的分配用户,例如公司的领导人有限的;c,是指要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。
4,RBAC3,也就是最全面级的权限管理,它是基于RBAC0的基础上,将RBAC1和RBAC2进行整合了,最前面,也最复杂的:
综上为权限管理模型的相关介绍,其实在任何系统中都会涉及到权限管理的模块,无论复杂简单,我们都可以通过以RBAC模型为基础,进行相关灵活运用来解决我们的问题。
网友评论