我经常遇到以下场景,我需要提供许多不同类型的权限。我主要将 ASP.NET / VB.NET 与 SQL Server 2000 一起使用。
设想
我想提供一个可以处理不同参数的动态权限系统。假设我想授予部门或特定人员访问应用程序的权限。并假设我们有许多应用程序在不断增长。
过去,我选择了以下两种我知道的方法之一。
使用具有用于确定如何应用参数的特殊列的单个权限表。此示例中的特殊列是
TypeID
和TypeAuxID
。SQL 看起来像这样。SELECT COUNT(PermissionID) FROM application_permissions WHERE (TypeID = 1 AND TypeAuxID = @UserID) OR (TypeID = 2 AND TypeAuxID = @DepartmentID) AND ApplicationID = 1
为每种类型的权限使用一个映射表,然后将它们全部连接在一起。
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 q.SectionID=@SectionID AND (emp.UserID=@UserID OR dept.DeptID=@DeptID OR (emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1 ORDER BY q.QID ASC
我的想法
我希望这些例子有意义。我把它们拼凑在一起。
第一个示例需要较少的工作,但它们都不是最好的答案。有没有更好的方法来处理这个?