一般的Web项目,都有分管理员和用户,其中就需要有不同的权限。
权限就是对项目资源的控制,对web应用来说,也就是对url的控制,你这个使用者能看到多少页面,操作多少功能。
不同Web项目系统关于权限的应用复杂程序不一样,现在比较流行的权限模型,基本上都是以RBAC模型为基础进行扩展的。
一、
RBAC,Role-Based Access Control,基于角色的访问控制。
可以理解为:Who对What进行How的操作,其中
who——是角色的拥有者(如:User、Role)
what——是资源或对象(Resource、Class)
how——是角色,不同的角色拥有不同的资源和权限
二、
RBAC其实是一种分析模型,主要分为:
- 基本模型RBAC0(Core RBAC)、
- 角色分层模型RBAC1(Hierarchal RBAC)、
- 角色限制模型RBAC2(Constraint RBAC)、
- 统一模型RBAC3(Combines RBAC)
RBAC0,它是RBAC0的核心,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。
RBAC0定义了能构成RBAC控制系统的最小的元素集合,RBAC0由四部分构成:
a、用户(User)
b、角色(Role)
c、会话(Session)
d、许可(Pemission)
其中许可Permission又包括“操作”和“控制对象”。其中许可Permission被赋予角色Role,而不是用户User,
当一个角色Role被指定给一个用户User时,此用户User就拥有了该角色Role所包含的许可Permission。
会话Session是动态的概念,用户必须通过会话才可以设置角色,是用户与激活的角色之间的映射关系。
RBAC1,它是RBAC角色的分层hierarchy模型,RBAC1建立在RBAC0基础之上,在角色中引入了继承prototype的概念,有了继承那么角色Role就有了上下级或者等级关系
RBAC2,它是RBAC的约束Constraint模型,RBAC2也是建立的RBAC0的基础之上的,在RBAC0基础上加入了约束的概念,
主要引入了静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。
静态职责分离SSD:
是用户和角色的指派阶段加入的,主要是对用户和角色有如下约束:
a、互斥角色:同一个用户在两个互斥角色中只能选择一个
b、基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的
c、先决条件约束:用户想要获得高级角色,首先必须拥有低级角色
动态职责分离DSD:
是会话和角色之间的约束,可以动态的约束用户拥有的角色,如一个用户可以拥有两个角色,但是运行时只能激活一个角色。
RBAC3,它是RBAC1与RBAC2合集,是既有角色分层又有约束的一种模型
基本上,普通的web项目应用,
只需要在数据库新建一张role表、user表、resource表、role_resource_rel表、role_user_rel表即可表示DBRA模型