通常的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模型