0

Je dois utiliser la méthode Roles.GetUsersInRole (role) pour obtenir des noms d'utilisateurs qui devraient recevoir un courrier électronique lorsqu'un événement se produit. J'utilise l'authentification Windows.Utilisation de rôles dans asp.net avec l'authentification Windows

Dans mon web Config:

 <system.web> 
     <authentication mode="Windows" /> 
     <identity impersonate="false" /> 
     <roleManager enabled="true" 
       defaultProvider="AspNetWindowsTokenRoleProvider"/> 
... 
     </system.web> 

tout compile bien mais quand je l'appelle cette méthode je reçois cette erreur:

{ "Le fournisseur de rôle configuré (WindowsTokenRoleProvider) repose sur l'authentification Windows pour déterminer la ASP.NET Role Manager ne peut pas être utilisé pour gérer les utilisateurs et les groupes Windows.Veuillez utiliser SQLRoleProvider si vous souhaitez prendre en charge l'assignation personnalisée d'utilisateur/rôle. "}

Est-ce un problème de configuration? Je dois continuer à utiliser l'authentification Windows, mais je dois aussi pouvoir obtenir les noms d'utilisateur des groupes.

S'il n'y a aucun paramètre de configuration pour accomplir ceci est-il n'importe quel genre de travail qui m'apporterait cette fonctionnalité?

Merci

+0

Oui, vous pouvez utiliser le fournisseur SQL rôle pour autoriser l'accès au contrôleur MVC dans votre application Web. Vous pouvez également afficher/masquer les parties d'une vue à l'aide de la méthode User.IsInRole (String) qui renvoie un type booléen. –

Répondre

3

Voici un exemple de travail application ASP.NET MVC 4 qui utilise l'authentification Windows avec le fournisseur de rôles SQL Server.

Dans le fichier web.config à l'article <system.web>:

<roleManager enabled="true" defaultProvider="SqlRoleProvider"> 
    <providers> 
    <add name ="SqlRoleProvider" 
    type="System.Web.Security.SqlRoleProvider" 
    connectionStringName="AspNetMembershipConnString" 
    applicationName="MembershipAndRoleProviderSample"/> 
    </providers> 
</roleManager> 

Cela indique au runtime asp.net utiliser fournisseur de rôle Sql et indique que la chaîne de connexion à utiliser pour localiser la base de données. Étant donné que nous utilisons le fournisseur de rôles SQL, nous avons besoin d'une base de données dans laquelle les utilisateurs et les rôles sont stockés. Pour créer la base de données, utilisez la commande aspnet_regsql.exe (sur ma machine Windows 10 Pro sous C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) qui permet de créer le schéma qui contient les utilisateurs et les rôles. Lorsque vous créez le schéma à l'aide de cet outil, assurez-vous que le nom de la base de données est le même que celui indiqué dans votre chaîne de connexion dans le fichier web.config (à venir).

Retour au fichier web.config ajouter la chaîne de connexion

<connectionStrings>  
    <add connectionString="DATA SOURCE = PersonalLaptop\SQLEXPRESS2014; INITIAL CATALOG = AspNetMembership; INTEGRATED SECURITY = SSPI;" 
      name="AspNetMembershipConnString" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 

Assurez-vous que le nom de la chaîne de connexion est le même que celui de la section de fournisseur de rôle sql.

Remarque: Vous n'avez pas besoin du fournisseur d'appartenance, car vous utilisez le mode d'authentification Windows intégrée.

Créer un rôle et ajoutez un utilisateur

Il y a 2 façons de le faire.

1) Ouvrez la base de données SQL où aspnet_regsql.exe a créé les tables et procédures stockées.Créer un nouveau record en aspnet_Users, aspnet_Applications, aspnet_UsersInRoles et aspnet_Roles tables. Puisque vous utilisez l'authentification Windows, assurez-vous d'ajouter le nom d'utilisateur Windows (nom de domaine complet/nom d'utilisateur local) dans le tableau aspnet_Users.

2) Dans la méthode de l'indice de HomeController utilisent le code:

Roles.CreateRole("SuperDuperUsers"); 
Roles.AddUserToRole("<WindowsUserName>", "SuperDuperUsers"); 

Cela va créer le rôle et l'utilisateur sera ajouté dans ce rôle pour vous.

J'ai téléchargé l'échantillon asp.net mvc 4 application here sur GitHub pour vous.

Dans le repo github, fichier SqlScriptOfTheDatabase.sql contient le schéma qui est créé pour stocker les utilisateurs et les rôles et leurs relations. Vous pouvez utiliser ceci au lieu d'utiliser la commande aspnet_regsql.exe si vous le souhaitez.

Espérons que cela aide!

+0

Merci pour votre réponse extrêmement approfondie. Je espère que notre personnel informatique peut gérer les groupes grâce à un annuaire actif. Y at-il un moyen de configurer la base de données de sorte qu'elle sera mise à jour lorsqu'il y a un changement dans AD? – user3839756

+0

@ user3839756 vous êtes les bienvenus! Puisque vous souhaitez restreindre l'accès à certaines parties de votre application Web en fonction des rôles que vous définissez dans le fichier web.config, il doit s'agir d'un travail manuel. Une fois que vous avez configuré les groupes AD, vous pouvez affecter un groupe à un rôle particulier qui aura un accès particulier dans votre application Web. Le mappage des groupes et des rôles AD devra être effectué manuellement simplement parce que l'entreprise décidera quels départements peuvent voir ou modifier les parties de l'application. J'espère que cela a du sens. –