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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top