通常的Web项目,都有分管理员和用户,其中就须要有不一样的权限。web
权限就是对项目资源的控制,对web应用来讲,也就是对url的控制,你这个使用者能看到多少页面,操做多少功能。数据库
不一样Web项目系统关于权限的应用复杂程序不同,如今比较流行的权限模型,基本上都是以RBAC模型为基础进行扩展的。url
1、spa
RBAC,Role-Based Access Control,基于角色的访问控制。prototype
能够理解为:Who对What进行How的操做,其中xml
who——是角色的拥有者(如:User、Role)对象
what——是资源或对象(Resource、Class)blog
how——是角色,不一样的角色拥有不一样的资源和权限继承
2、资源
RBAC实际上是一种分析模型,主要分为:
- 基本模型RBAC0(Core RBAC)、
- 角色分层模型RBAC1(Hierarchal RBAC)、
- 角色限制模型RBAC2(Constraint RBAC)、
- 统一模型RBAC3(Combines RBAC)
RBAC0,它是RBAC0的核心,RBAC一、RBAC二、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模型