2 votes

Utilisation d'un fournisseur de rôles ASP.NET à partir d'une application non Web (Timer Job) pour vérifier l'appartenance à un rôle

J'utilise ce code dans un web part SharePoint, qui vérifie si un utilisateur est dans un rôle (pour les sites authentifiés par formulaire).

foreach (string role in System.Web.Security.Roles.GetAllRoles())
  foreach (string user in System.Web.Security.Roles.GetUsersInRole(role))

Je compare ensuite les noms d'utilisateur des utilisateurs existants dans le rôle, et le nom d'utilisateur (sous forme de chaîne) que j'essaie d'autoriser. Et cela fonctionne bien, comme prévu, tant que le fournisseur de rôles est configuré pour l'application Web.

Cependant, j'ai également une tâche de temporisation qui est utilisée pour traiter les emails entrants envoyés au serveur smtp et relayés localement vers le dossier de dépôt smtp ( C:\inetpub\mailroot\drop ). Le job timer lit ensuite l'email depuis le dossier de dépôt, et l'analyse/le traite. Pour identifier l'utilisateur qui envoie l'email, je prends l'adresse "from" et je fais une recherche sur le site Sharepoint pour obtenir l'identité de l'utilisateur en utilisant SPUtility.

Mais je dois vérifier si l'utilisateur a un rôle spécifié par le fournisseur de rôles FBA de ce site Web. Les détails du fournisseur de rôles sont une boîte noire, inconnus et peuvent être modifiés au moment de l'exécution. Je dois donc utiliser la fonctionnalité intégrée du fournisseur de rôles, à savoir Roles.GetAllRoles , Roles.GetUsersInRole(x) . (Je ne peux pas accéder directement à la base de données ou à une autre source de données en coulisses). Je connais cependant l'adresse du site web sur lequel je dois autoriser l'utilisateur à partir de l'horloge de travail.

Mais, System.Web.Security.Roles.GetAllRoles() n'est pas accessible au job timer car il ne s'agit pas d'une application web asp.net (il fait en fait partie du service Windows OWSTIMER.exe).

Donc, comment puis-je vérifier si un "loginname" est membre d'un rôle à partir d'un Job Timer ?

REMARQUE : Cette question pourrait également être posée sans tenir compte de SharePoint et en supposant que je souhaite vérifier un "nom de connexion" à partir d'un service Windows ou d'une application WinForms. J'ai essentiellement besoin de vérifier si un utilisateur est dans un rôle FBA (RoleProvider spécifié dans les paramètres web.config d'une application web asp.net 2.0-3.5), à partir d'une source qui n'est pas l'application Windows où le fournisseur de rôle est défini et accessible.

De plus, je ne peux pas utiliser de service web puisque l'objectif est de n'avoir qu'un Web Part SharePoint et un Job Timer SharePoint.

2voto

Tom Vervoort Points 3207

Vous ne précisez pas votre version de SharePoint, je suppose donc que vous parlez ici de SharePoint 2007. Toutefois, le même principe s'appliquerait à SharePoint 2010.

Le fichier OWSTIMER.exe est stocké dans 12hive \bin. Vous pouvez créer un fichier OWSTIMER.exe.config dans le même dossier et y enregistrer vos fournisseurs de rôles et d'adhésions de la même manière que vous le feriez dans un fichier web.config.

À titre d'exemple, jetez un coup d'œil à cet article. http://msdn.microsoft.com/en-us/library/bb977430(v=office.12).aspx (la partie intéressante se trouve dans le sujet 'alertes')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X