我經常遇到以下情況,我需要提供許多不同類型的權限。我主要使用ASP.NET/VB.NET與SQL Server 2000處理多種權限類型的最佳方法是什麼?
方案
我想提供一個動態的權限系統,可以在不同的參數工作。假設我想給一個部門或只是一個特定的人訪問一個應用程序。並假裝我們有一些不斷增長的應用程序。
在過去,我選擇了以下兩種方式之一,我知道這樣做。
1)使用帶有特殊列的單個權限表,用於確定如何應用參數。本例中的特殊列是TypeID和TypeAuxID。 SQL看起來像這樣。
SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1
2)使用的映射表的每個類型的權限,然後將它們連接在一起。
SELECT COUNT(perm.PermissionID)
FROM application_permissions perm
LEFT JOIN application_UserPermissions emp
ON perm.ApplicationID = emp.ApplicationID
LEFT JOIN application_DepartmentPermissions dept
ON perm.ApplicationID = dept.ApplicationID
WHERE [email protected]
AND ([email protected] OR [email protected] OR
(emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1
ORDER BY q.QID ASC
我的思想
我希望的例子是有意義的。我把它們拼湊在一起。
第一個例子需要較少的工作,但他們都不覺得最好的答案。有沒有更好的方法來處理這個問題?
我用這種方法發現的問題是,使用這種方法很容易耗盡角色。正如你所看到的,6個角色的值爲2^6 = 64,當31個角色將有2^31 = 2,147,483,647這是最大的int值。所以在T-SQL中,可以使用的最大數據類型是bigint(2^63)。當然你可以使用varchar類型,但是當我有很多角色時,我更喜歡使用John Downey的解決方案。 – 2011-10-07 00:47:08