Deseori întâlnesc următorul scenariu în care trebuie să ofer diferite tipuri de permisiuni. În primul rând folosesc ASP.NET / VB.NET cu SQL Server 2000.
Scenariu
Vreau să ofer un sistem de permisiune dinamic care să poată funcționa pe diferiți parametri. Să spunem că vreau să dau fie unui departament, fie doar unei anumite persoane, acces la o aplicație. Și pretindeți că avem o serie de aplicații care continuă să crească.
În trecut, am ales una dintre următoarele două căi pe care știu să le fac.
1) Utilizați un singur tabel de permisiune cu coloane speciale care sunt utilizate pentru determinarea modului de aplicare a parametrilor. Coloanele speciale din acest exemplu sunt TypeID și TypeAuxID. SQL ar arăta așa.
SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1
2) Utilizați o tabelă de mapare pentru fiecare tip de permisiune, apoi alăturați-le pe toate împreună.
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
Gândurile mele
Sper că exemplele au sens. L-am pietruit împreună.
Primul exemplu necesită mai puțină muncă, dar nici unul dintre ei nu se simte cel mai bun răspuns. Există o modalitate mai bună de a face față acestei situații?