1. 程式人生 > >Web開發中的使用者角色許可權設計總結

Web開發中的使用者角色許可權設計總結

在Web開發中關於許可權管理設計大抵涉及到兩個方面:一:功能方面許可權設計;二:資源方面許可權設計。二者比較來看,功能方面許可權的可重用性更高。

1.關於許可權:

  • 按照角色許可權的最簡單的設計

    名稱 描述
    使用者 不具備管理功能
    管理員 具備管理普通使用者的許可權
    超級管理員 具備管理管理員的許可權

    上面的設計直接將參與系統的使用者分為三類角色:使用者,管理員,超級管理員。

  • 按照角色許可權,粒度劃分再小些設計

    名稱 許可權 描述
    普通使用者 普通服務 享有系統有限服務
    VIP使用者 高階服務 享有VIP服務

    上面是使用者的簡單劃分示例,通過將使用者進行許可權劃分,來提供不同的服務。

    名稱 許可權 描述
    產品管理員 管理產品模組 具備產品模組的管理操作許可權
    客戶管理員 管理客戶模組 具備客戶模組的管理操作許可權

    上面是管理員的簡單劃分示例,通過將後臺管理員進行許可權劃分,使的每一個管理員角色具備不同的操作許可權,並且不同角色的管理員在管理角色上不存在交叉管理,這樣系統的管理部分才有可能儲存清晰,完整,有效。

    名稱 許可權 描述
    超級管理員 管理各類管理員 具備最高的管理許可權
    系統管理員 管理整個系統,包括管理超級管理員 系統管理員具備操作整個系統的最高許可權

    上面是系統級別的管理簡單劃分示例,一個系統建設完成後應該具備自管理的功能,即:系統環境配置,模組管理,使用系統的干係人管理等都可以通過自身的管理模組完成,而不是人為的修改資料或者系統程式。

  • 按照模組對角色具備的操作許可權進行劃分,粒度將更細。對於模組層的許可權劃分使得系統許可權管理嚴格,個角色的智慧更加精確,當然系統的設計,實現也相對複雜。

    2.使用者-角色-許可權的一個物理模型

    設計示例圖如下所示:

    104309462.png

說明:

a.使用者-使用者角色-角色:可以構成一個使用者角色許可權管理子模組,即1中最簡單的設計。

b.模組-模組許可權-許可權:可以構成一個模組許可權管理子模組。注:這裡的描述有些欠缺,單獨的看待模組部分,應該描述為模組-模組功能-功能更為恰當。

c.將a和b同過角色許可權組合在一起就可以構成一個使用者-角色-許可權的按照功能模組粒度劃分的許可權管理系統。

3.使用者-角色-許可權資料庫中表之間的關聯關係說明:

105731356.png

上述資料庫表的關係圖中的每一張表不涉及具體的欄位內容,所具備的欄位都是為了描述各個表之間的關聯關係。

實體表:使用者表,角色表,許可權表,模組表;

中間表:使用者角色,角色許可權,模組許可權表,用來解決多對多問題;

角色許可權表:涉及角色具備的許可權,該許可權是來自模組許可權,也就是符合2中的模組許可權。

關於角色許可權表是使用者-角色-許可權系統的一個可擴充套件口。例如:角色許可權可以和許可權直接關聯,或者二者之間新增特定場景的其他表。

4.資料庫用例資料,使用使用者-角色-許可權系統

  • 使用者

    111212500.png三個使用者(標識列[主鍵],使用者編碼,使用者名稱稱)

  • 角色

    111330529.png

    四種角色(標識列[主鍵],角色編碼,角色名稱)

  • 使用者角色

    111516931.png

    使用者角色標識列,使用者編碼,角色編碼即構成使用者角色中間表。注:實際中一個使用者足矣具備多種角色。

  • 模組

    111746736.png

    [模組標識列,模組編碼,模組名稱,父模組編碼,模組URL]

    說明:

    父模組編碼:用於模組劃分粒度層次標識

    模組URL:用於模組在WBE應用中的訪問標識,當然也可以作為他用。

  • 許可權

    112411119.png

    許可權標識,許可權編碼,許可權名稱。

  • 模組許可權

    112806887.png

    模組許可權標識列,模組編碼,許可權編碼。模組許可權表在模組粒度和許可權粒度上對模組進行的相應的許可權設定,可以簡單表述為:具備在某一模組上的某種許可權操作。因此將角色和模組許可權進行關聯將成為角色具備這一粒度層次上的操作許可權。

  • 角色許可權

    113244594.png

    角色許可權標識列,角色編碼,模組許可權編碼

至此,使用者,角色,許可權的劃分就形成了,而且可以通過實際中需要的使用者,角色,許可權的管理程度,進行簡化或者增加表。

5.查詢使用者編碼為400900500的許可權

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT t_account.ACCCODE, t_account.ACCNAME, t_role.ROLECODE, t_role.ROLENAME, t_module_privilege.MODUELCODE, t_module.MODUELCODE, t_module.MODUELNAME, t_privilege.PRICODE, t_privilege.PRINAME FROM t_account, t_account_role, t_role, t_role_privilege, t_module_privilege, t_module, t_privilege WHERE t_account_role.ACCCODE=t_account.ACCCODE AND t_account_role.ROLECODE=t_role.ROLECODE AND t_account.ACCCODE="400900500" AND t_role_privilege.ROLECODE=t_role.ROLECODE   AND t_role_privilege.MPID=t_module_privilege.MPID AND t_module_privilege.MODUELCODE=t_module.MODUELCODE AND t_module_privilege.PRICODE=t_privilege.PRICODE

通過面的SQL語句可以查詢到400900500使用者的許可權。

115041959.png

上述查詢僅僅說明各表之間的資料關聯關係,在實現開發中這樣的查詢避免使用。

使用者,角色,許可權的一個很好的參考示例就是Oracle資料庫的使用者管理機制。Web開發中更多的是涉及到管理使用者,管理員,系統管理,模組訪問許可權,資源訪問等問題的處理。

本文出自 “野馬紅塵” 部落格,謝絕轉載!