Web開發中的用戶角色權限設計總結

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

1.關於權限:數據庫

  • 按照角色權限的最簡單的設計ide

    名稱 描述
    用戶 不具有管理功能
    管理員 具有管理普通用戶的權限
    超級管理員 具有管理管理員的權限


    上面的設計直接將參與系統的用戶分爲三類角色:用戶,管理員,超級管理員。編碼

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

    名稱 權限 描述
    普通用戶 普通服務 享有系統有限服務
    VIP用戶 高級服務 享有VIP服務



    上面是用戶的簡單劃分示例,經過將用戶進行權限劃分,來提供不一樣的服務。.net

    名稱 權限 描述
    產品管理員 管理產品模塊 具有產品模塊的管理操做權限
    客戶管理員 管理客戶模塊 具有客戶模塊的管理操做權限



    上面是管理員的簡單劃分示例,經過將後臺管理員進行權限劃分,使的每個管理員角色具有不一樣的操做權限,而且不一樣角色的管理員在管理角色上不存在交叉管理,這樣系統的管理部分纔有可能保存清晰,完整,有效。設計

    名稱 權限 描述
    超級管理員 管理各種管理員 具有最高的管理權限
    系統管理員 管理整個系統,包括管理超級管理員 系統管理員具有操做整個系統的最高權限



    上面是系統級別的管理簡單劃分示例,一個系統建設完成後應該具有自管理的功能,即:系統環境配置,模塊管理,使用系統的干係人管理等均可以經過自身的管理模塊完成,而不是人爲的修改數據或者系統程序。blog

  • 按照模塊對角色具有的操做權限進行劃分,粒度將更細。對於模塊層的權限劃分使得系統權限管理嚴格,個角色的智能更加精確,固然系統的設計,實現也相對複雜。資源

    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的權限


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開發中更多的是涉及到管理用戶,管理員,系統管理,模塊訪問權限,資源訪問等問題的處理。


關於用戶角色權限管理有程序的開發系統,參見如:http://www.oschina.net/p/limiton

相關文章
相關標籤/搜索