2009-07-13 24 views
1

我與之合作的網站在處理用戶和權限方面有點複雜。如何構建具有多個權限級別的多個用戶?

這些用戶類型:

  • 用戶
  • 基金審批
  • 基金管理
  • 企業審批
  • 企業聯繫

現在也有設施,及這就是這些權限級別進入的地方玩。設備鏈接到用戶和用戶級別的表像這樣:

user_id  facility_id  userlevel 
joebob  ABCInc   Facility Admin 

到目前爲止很簡單,但現在我想的是能夠允許一個用戶級別上設置另一個用戶等級限制一定設施。例如,我是Facility Admin,我只想讓用戶提交某些表單。我將如何存儲這個?

我在想一個鏈接facility_id,userlevel和permissionlevel的新表。但是,權限級別究竟是什麼?一個int?或者,我會像canOrderThings或canSearchForStuff那樣向表中添加列?

我看到如果像this可以工作,但它似乎會有點混亂,難以跟蹤,如果你有大量的權限。你會如何添加權限級別而不會把所有的東西都扔掉?甚至設置權限級別會讓我覺得有些挑戰。

另外用戶級別直接與用戶表中的用戶關聯,但這些服務器的用途不同。

有沒有更好的方法來構造所有這些?

回答

2

對於選項使用第二個表是個好主意。一些論壇框架使用這種方法。
您的每個用戶都會得到一個UserGroupId,這通常是一個Int,因爲他們最容易處理。例如UserGroupId,可以是管理員,2可以是教師(取決於你的組織)。

然後你有一張名爲Permissions的表,在這張表上你包括了所有的選項列,就像這樣。

UserGroupID --|-- SearchEnabled --|-- CanOrder 
      1     0   1 
      2     1   1 

使用一個簡單的二進制系統,1啓用,0禁用,您可以控制每個用戶組的選項。這使您可以通過單個查詢獲取所有權限,同時仍可提供非常大的自定義區域。

儘管您不必使用二進制數字。例如,您可以使用值1,2,3,其中1是完全許可,2是部分的,3是零。這取決於你的規定如何具體。

現在,在您允許用戶執行選項之前,您需要對用戶權限(應該存儲在數組或類中以便快速訪問)進行簡單檢查。爲了使搜索你會使用的條件,如

If ($user['SearchEnabled') 
{ 
    $generate->SearchOptions(); 
} 
else 
{ 
    $generate->Error('NoSearchPermissions'); 
} 

使用二進制數的函數具有簡單的顯而易見的好處是否TRUE或FALSE。如果您使用的是不同的編號系統,它需要更多的工作,檢查的具體價值
If ($user['SearchEnabled'] == 2 || $user['SearchEnabled'] == 1)

+0

[+1]你打我吧!很高興看到這是做事的好方法。 – EvilChookie 2009-07-13 23:37:37

0

好吧,如果我想實現我的應用程序的權限,我可以這樣做3種方式(我能想到的對我的頭頂上):

  1. 在用戶表(和記錄,如果你使用orm)把一個級別int。因此,例如,1級用戶只能查看錶單,2級可以發佈,3級是admin並且可以編輯等。然後,在視圖中,您只需檢查用戶是什麼級別並回顯表單即可編輯等(根據您的問題,我想這是你已經做什麼)

    優點:

    • 易於設置
    • 讓您組權限在一起。

    缺點:

    • 如果您需要1和2之間的水平,你必須做大量的工作。所以,後來增加水平很難。
  2. 加入用戶表的權限表。基本上其他回答者在這個線程中描述的是什麼。

    優點:

    • 您並不僅限於水平,可以在兩者之間,你想添加儘可能多的水平。
    • 您可以微調每個用戶能夠做什麼。

    缺點:

    • 您不能組的權限,但我想你可以只給它們一次全部,如果你想要的。
    • 告訴用戶他/她有什麼更多的工作,因爲你只能列出所有的權限,或者做一個大規模的切換來確定他們是否是管理員。 (例:我是一個普通用戶以及我可以編輯的形式,而不是搜索?)
  3. 結合這些,所以基本上在user表中你可以有一個字符串,它有值分別爲「管理員」,並在每個頁面上看看他們是否是管理員。

    優點:

    • ,只要你想,沒有拋出任何不WAK的您可以添加多次。像「超級管理員」或「少了幾分管理員」

    缺點類型:

    • 如果你是微調每一個用戶,你最終會得到很多新的用戶類型的快。
    • 添加新的用戶類型字符串可能比較困難,除非用戶類型字符串表被連接到表權限,但現在我們變得非常複雜。
+0

您對權限表的用戶做出了錯誤的假設。您可以通過在一個選項下設置多個權限來分組權限。如果需要,CanSearch可以控制10個子函數,這取決於您如何定義每個子類別的使用。很容易告訴用戶他們基於** UserGroupId **,我是管理員或教師或學生等。 – 2009-07-14 00:05:50

相關問題