0

J'essaie d'implémenter un gestionnaire de rôles personnalisé dans une application MVC5 en utilisant le Custom Role Provider Tutorial suivant.Gestionnaire de rôles personnalisé/fournisseur

J'ai créé mon fournisseur de rôles personnalisé surpassant les 2 fonctions requises.

namespace Models.Security 
{ 
public class CustomRoleProvider : RoleProvider 
{ 
/// logic 
public override string[] GetRolesForUser(string username) 
    { 
/// logic 
public override bool IsUserInRole(string username, string roleName) 
    { 

Il me faut ensuite modifier ma config Web pour utiliser ce nouveau fournisseur ...

<system.web> 
<compilation debug="true" targetFramework="4.5.2" /> 
<httpRuntime targetFramework="4.5.2" /> 
<roleManager enabled="true" defaultProvider="CustomRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/> 
    </providers> 
</roleManager> 

Cependant quand je tente accéder à ma demande, je reçois l'erreur suivante:

Parser erreur Message: Impossible de charger le type 'Models.Security.CustomRoleProvider'.

Source Error: 

Line 29:  <providers> 
Line 30:   <clear /> 
Line 31:   <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/> 
Line 32:  </providers> 
Line 33:  </roleManager> 

Pour autant que je sache, j'ai fait tout ce qui est nécessaire. La seule chose qui est différente est que j'utilise une adhésion personnalisée liant à AD

<authentication mode="Forms"> 
    <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="200" slidingExpiration="false" protection="All" /> 
</authentication> 
<membership defaultProvider="ADMembershipProvider"> 
    <providers> 
    <clear /> 
    <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" /> 
    </providers> 
</membership> 

Y at-il autre chose que je dois faire? Est-ce que MVC5 a changé l'approche?

Répondre

0

Oui. MVC 5 utilise l'identité, les fournisseurs de rôles sont un concept d'adhésion ASP.NET. Vous n'avez pas besoin de fournisseurs de rôle dans Identity, car vous contrôlez les rôles. C'est une entité dans votre projet (ou du moins c'est possible si vous sous-classe IdentityRole), donc vous pouvez faire ce que vous voulez.

+0

Alors, y a-t-il un moyen facile de se déplacer entre les deux? Tous les exemples que j'ai trouvés sur/en utilisant des pages d'envergure de rôle d'identité! J'ai des tables personnalisées avec des rôles et des actions créés que je veux vérifier par rapport à un attribut d'autorisation sur une action. Je veux vraiment enregistrer tous les rôles sur mon objet UserPrincipal lors de la connexion, puis l'utiliser tout au long de la session. –

0

Vous pouvez toujours utiliser roleManager et votre fournisseur de rôle personnalisé. Il suffit de définir votre principal pour taper RolePrincipal. Vous pouvez le faire sur IAuthenticationFilter et l'enregistrer sur global.asax. Voir ces deux liens pour un exemple de code: RolePrincipal/ IAuthenticationFilter