[Title ] 關(guān)于用戶角色權(quán)限管理一點想法 [Author] Pizer.Chen [Email ] [email protected] | [email protected] [Date ] 2002-11-3
---------------------------------------------------------------------------- 我以前設(shè)計過一個權(quán)限系統(tǒng)的模型,,但是我沒有實現(xiàn), 可以說出來,,大家討論一下,。
我認為一個系統(tǒng)的權(quán)限部分應(yīng)該由以下四個部分組成:
[*] Resource [*] Privilege [*] Role [*] User
另外,一個系統(tǒng)中最少有這么幾個角色: [*] Creator,, 也可以稱做 Programmer. [*] Administrator, 超級用戶 [*] General User
---------------------- 權(quán)限各部分之間的關(guān)系: ---------------------- 1. Resource 就是系統(tǒng)的資源,,比如部門新聞,文檔等各種可以被提供給用戶訪問的對象.
2. Privilege 是 Resource Related 的權(quán)限,。 什么意思,?就是指,這個權(quán)限是綁定在特定的資源實例上的,。 比如說部門新聞的發(fā)布權(quán)限,,叫做"部門新聞發(fā)布權(quán)限". 這就表明,該 Privilege 是一個發(fā)布權(quán)限,,而且是針對部門新聞這種資源的一種發(fā)布權(quán)限,。 我認為,Privilege 是由 Creator 在做開發(fā)時就確定的,。
3. Role, 是角色,,擁有一定數(shù)量的權(quán)限。
4. User, 與 Role 相關(guān),。在我設(shè)計的系統(tǒng)里,User是不能與 Privilege 直接相關(guān)的,, User 要擁有對某種資源的權(quán)限,,必須通過Role去關(guān)聯(lián).
---------------------- 系統(tǒng)大串聯(lián):(^_^) ---------------------- 下面簡單介紹一下,一個權(quán)限從開發(fā)到使用的過程.
1. Creator 創(chuàng)造 Privilege, Creator 在設(shè)計和實現(xiàn)系統(tǒng)時會劃分,,一個子系統(tǒng)或稱為模塊,, 應(yīng)該有哪些權(quán)限. 拿新聞這一塊來說,可能應(yīng)該有: [*] 發(fā)布權(quán)限(publish) [*] 修改權(quán)限(modify) [*] 審核權(quán)限(review) [*] 瀏覽權(quán)限(visit) ....... 這里完成的是 Privilege 與 Resource 的對象申明,,并沒有真正將 Privilege 與具體 Resource 實例聯(lián)系在一起.
2. Administrator 指定 Privilege 與 Resource Instance 的關(guān)聯(lián). 在這一步,, 權(quán)限真正與資源實例聯(lián)系到了一起, 產(chǎn)生了 Privilege Instance,。 比如,Administrator 創(chuàng)建了一個叫做 "部門新聞" 的Resource Instance. 然后將發(fā)布權(quán)限與這個資源相關(guān)聯(lián),,產(chǎn)生出 "部門新聞發(fā)布權(quán)限" 這個 Privilege Instance.
3. Administrator 創(chuàng)建一個角色,,稱做 "部門新聞發(fā)布者".
4. Administrator 將 "部門新聞發(fā)布權(quán)限" 賦予 "部門新聞發(fā)布者".
5. Administrator 從用戶列表中選取一個或多個用戶, 然后給這些用戶賦予 "部門新聞發(fā)布者" 的角色
6. User 進到系統(tǒng),,在它的可訪問資源列表上,,會出現(xiàn)"部門新聞發(fā)布"的鏈接.
7. User 點擊 "部門新聞發(fā)布"的鏈接, 根據(jù) Creator 的實現(xiàn),系統(tǒng)會檢查 [1] 當前用戶是否擁有發(fā)布權(quán)限 [2] 當前用戶的發(fā)布權(quán)限是否與能操作正在訪問的資源.
---------------------- 結(jié)束語 ---------------------- 這是我一次在飛機場等飛機時突然設(shè)計出來的東西,。因為沒有具體實現(xiàn),, 而且也可能因為時間倉促,沒有想得很透徹,,希望寫出來大家討論一下,。 具體實現(xiàn)上的技術(shù)問題,我也想過,,我覺得應(yīng)該已經(jīng)想通,,但是介于時間關(guān)系, 這里寫不了啦,,大家可以談?wù)効捶?.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 你的方案應(yīng)該行得通,,但是我覺得可以再簡化精練一點。 我的思路是這樣,。
用戶角色權(quán)限,,就設(shè)定用戶user和角色role的對應(yīng)關(guān)系,user還包括用戶組group, user和group的關(guān)系樹形結(jié)構(gòu)的關(guān)系,。
所以,,在系統(tǒng)權(quán)限這里,我們就可以圍繞角色開始定義,,拋開user或組的糾纏,。如你所說resource 和function(Privilege)組合成一個角色。
提供一個強大的用戶權(quán)限定制系統(tǒng),,就要在上面兩個方面提供定制: 1.可以自行增加 刪除 管理resource和function之間關(guān)系,。 2.可以自行設(shè)定用戶user和角色role的對應(yīng)關(guān)系。
以你的部門新聞發(fā)布為例: 1.某一個新聞為resource . 發(fā)布權(quán)限(publish) 修改權(quán)限(modify)等為function(Privilege),,先設(shè)定好這兩者關(guān)系,,比如新聞+發(fā)布權(quán)限 作為一條記錄存入數(shù)據(jù)庫,ID就是roleID,這條記錄其實就是一個角色,。
2.設(shè)定user和roleID角色之間的關(guān)系,,哪些user包含這個角色role。
通過上面兩步設(shè)置,權(quán)限系統(tǒng)框架基本設(shè)定,,一個用戶登陸進來,,可以按上面規(guī)則檢查一下。
我這里與你的區(qū)別就是,,權(quán)限部分應(yīng)該由以下部分組成:
Role--|-Resource |_Privilege User
大家可以討論一下,。
|