Sécurité configurable par l'utilisateur sur le site Web ASP.NET multi-locataire
-
05-07-2019 - |
Question
Nous construisons un site Web à locataires multiples dans ASP.NET et nous devons laisser chaque client configurer son propre modèle de sécurité. Ils doivent être capables de définir leurs propres rôles et de placer les utilisateurs dans ces rôles. Quelle est la meilleure façon de faire cela?
Il existe une multitude d'exemples simples d'événements page_load comportant un code tel que:
if (!user.InGroup("Admin")
Response.Redirect("/NoAccess.aspx");
Mais cela code les groupes et les permissions dans le code. Comment puis-je le rendre configurable par l'utilisateur?
La solution
Peut-être placez les rôles configurables dans une table de base de données, où vous stockez les rôles et le client hébergé, puis les PagePermissions dans une autre table, par exemple:
Table "Role"
RoleId, TenantId, Role
Table "PagePermissions"
PageId, RoleId
Table "UserRoles"
UserId, RoleId
Ensuite, dans le chargement de la page, vérifiez si l'utilisateur se trouve dans un RoleId disposant d'autorisations pour cette page, par exemple:
Select PageId FROM
UserRoles UR INNER JOIN PagePermissions PP
ON UR.RoleId = PP.RoleID
WHERE UR.Userid = @UserId AND PP.PageID = @PageId
Si aucune ligne n'est renvoyée, refusez l'utilisateur.
Autres conseils
Je créerais un système de configuration pour le site Web qui soit facilement géré dans des fichiers de configuration. Où vous pourriez obtenir des membres tapés et les utiliser comme ceci.
foreach(var group in ThisPageConfiguration.AcceptedRoleNames)
if (user.IsInRole(group))
...
Chaque client peut ensuite configurer son site dans ses fichiers de configuration ... et tous les autres types d'éléments que vous souhaitez configurer.