基於角色的許可權設計(一)

2021-06-19 11:58:00 字數 1593 閱讀 7627

在任何系統中,許可權設計是最基礎的東西,本文給出乙個基於角色的許可權設計的循序漸進的設計方案。

在許可權系統中,功能(許可權)是最小的單位,比如起草新聞、編輯新聞、審核新聞、刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個角色,他可能有起草新聞、編輯新聞等功能集合,而責任編輯他可能就有更多的許可權,比如除了新聞編輯的功能,還有審核新聞、刪除新聞等功能,給張三賦予新聞編輯的角色(其實我更願意說把張三加入到新聞編輯這個角色中去),張三就可以起草新聞、編輯新聞了,給李四賦予責任編輯的角色,李四就可以起草新聞、編輯新聞、審核新聞、刪除新聞了。

我們來看看版本一的解決方案: 

我們來模擬一下上面的資料:

使用者資訊表:

userid

username u1

張三 u2

李四

角色表:

roleid

rolename r1

新聞編輯 r2

責任編輯

角色使用者表:

roleid

userid r1

u1 r2

u2

功能表:

functionid

functionname f1

起草新聞 f2

編輯新聞 f3

審核新聞 f4

刪除新聞

角色功能表:

roleid

functionid r1

f1 r1

f2 r2

f1 r2

f2 r2

f3 r2

f4

我們來看看如何判斷乙個使用者具有某個功能許可權:

首先在使用者張三登入的時候,獲取張三的全部功能列表:

select functionid from 

角色功能表

where roleid in (select roleid from 

使用者角色表

where userid=』u1』)

這樣就可以得到張三的全部功能列表

functions

,在起草新聞的頁面我們就可以做如下判斷:

functions.contain(『f1』);

//當然你可以把這個

』f1』

定義成乙個常量:

newsfunction.draft

如果為true

就說明張三有起草新聞的許可權。

當然對於

web應用,您可以把

functions 

用session

儲存起來,以避免每開啟乙個頁面都去資料庫中獲取。

似乎看起來是乙個不錯的解決方案。

還是新聞系統,最初新聞系統沒有分類,但是隨著新聞的增加,沒有分類的新聞看起來總是亂的,於是張三和李四給新聞新增了分類

a、分類

b,還是由張三負責起草,李四負責審核,以後又新增了更多的分類,並且也增加了人手,這個時候就有新的要求出來了:希望張三隻負責分類

a的起草,分類

b的起草交給其他人做,李四呢也只負責分類

a的審核(就相當於是乙個欄目的責任編輯)。 

基於角色的許可權設計(一)

基於角色的許可權設計 一 在任何系統中,許可權設計是最基礎的東西,本文給出乙個基於角色的許可權設計的循序漸進的設計方案。在許可權系統中,功能 許可權 是最小的單位,比如起草新聞 編輯新聞 審核新聞 刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個角色,他可能有起草新聞 編輯新聞等功能集合,而責任...

基於角色的許可權設計 一

在任何系統中,許可權設計是最基礎的東西,本文給出乙個基於角色的許可權設計的循序漸進的設計方案。在許可權系統中,功能 許可權 是最小的單位,比如起草新聞 編輯新聞 審核新聞 刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個角色,他可能有起草新聞 編輯新聞等功能集合,而責任編輯他可能就有更多的許可權...

基於角色的許可權設計(一)

在任何系統中,許可權設計是最基礎的東西,本文給出乙個基於角色的許可權設計的循序漸進的設計方案。在許可權系統中,功能 許可權 是最小的單位,比如起草新聞 編輯新聞 審核新聞 刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個角色,他可能有起草新聞 編輯新聞等功能集合,而責任編輯他可能就有更多的許可權...