2017-09-02 182 views
0

我想設計一個Web應用程序的數據庫,用戶可以根據授予角色的權限訪問特定的選項卡。最佳用戶角色權限數據庫設計實踐?

我做了什麼至今我創建了兩個表USER_TABLEUSER_ROLES

USER_TABLE有以下字段:

  • ID(主鍵)
  • USER_NAME
  • 密碼
  • FIRST_NAME
  • 姓氏
  • CREATED_DATE
  • role_id_fk(外鍵)

USER_ROLES具有低於字段:

  • ID(主鍵)

  • ROLE_NAME(例如ADMIN,TAB1_USER,TAB2_USER)

  • CREATED_DATE

這裏,有用戶ROLE_NAME 「ADMIN」 可以看到所有的標籤,其他用戶只能訪問特定的標籤。

我的問題是我需要創建一個表USER_PERMISSIONS具有USER_ROLES表下面的字段外鍵:

  • ID(主鍵)
  • permission_type(ALL,TAB1,TAB2 ....)

或者我應該在我的代碼級別管理?這兩種方法的缺點和優點是什麼?

+0

這取決於您的要求。如果您只想實現在運行時無法更改的靜態權限,則將所有應用程序的函數綁定到代碼中的角色。優點 - 易於實現,缺點 - 每次更改特權都需要更改代碼。如果您想要動態權限(可以在運行時更改)(例如,管理員可以直接在應用程序中編輯各個角色的權限),那麼您需要USER_PERMISSIONS表,並將代碼中的每個應用程序函數綁定到某個權限而不是角色。 – krokodilko

回答

1

正如krokodilko在他的回答中寫道的,這取決於您需要的靈活程度。
爲我的客戶之一,我已經實現了基於角色的權限如下:

  1. 用戶(用戶ID,用戶名,密碼,手機等「)
  2. 角色(角色ID,角色名稱(唯一的),角色介紹)
  3. 許可(許可ID,權限名稱) - 選項卡/屏幕/動作放在這裏
  4. 用戶到角色(用戶ID,角色ID)
  5. 角色到權限(角色ID,允許ID)

但我的要求是要儘可能靈活,而且這個系統還在不斷增長(6年和數量)。

我想很多應用程序可以讓用戶扮演一對多的關係角色,而不是像我這樣的多對多角色,但我不會在任何應用程序中努力編寫權限或角色來授予權限。