0

Ich versuche, einen benutzerdefinierten Rollenmanager in einer MVC5-Anwendung zu implementieren, indem ich Custom Role Provider Tutorial verwende.Benutzerdefinierter Rollenmanager/Provider

Ich habe meinen Custom Role Provider erstellt, der die 2 erforderlichen Funktionen überwindet.

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

Ich muss dann meine Web-Config ändern diese neue Anbieter zu verwenden ...

<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> 

aber wenn ich versuche, und meine Anwendung greife ich auf die folgende Fehlermeldung erhalten:

Fehler Parser Nachricht: Der Typ 'Models.Security.CustomRoleProvider' konnte nicht geladen werden.

Source Error: 

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

Soweit ich weiß, habe ich alles getan, was erforderlich ist. Das einzige, was anders ist, ist, dass ich eine benutzerdefinierte Mitgliedschaft Link zu 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> 

verwenden Gibt es noch etwas, was ich tun muss? Hat MVC5 den Ansatz geändert?

Antwort

0

Ja. MVC 5 verwendet Identity, Rollenanbieter sind ein ASP.NET-Mitgliedschaftskonzept. Sie brauchen keine Rollenanbieter in Identity, da Sie die Rollen steuern. Es ist eine Entität in Ihrem Projekt (oder zumindest kann es sein, wenn Sie IdentityRole Unterklasse), so dass Sie tun können, was Sie wollen.

+0

So gibt es eine einfache Möglichkeit, zwischen den beiden zu bewegen? Alle Beispiele, die ich bei Identity Role gefunden habe, überspannen Seiten! Ich habe benutzerdefinierte Tabellen mit Rollen und Aktionen erstellt, die ich mit einem Autorisierungsattribut für eine Aktion überprüfen möchte. Ich möchte wirklich alle Rollen gegen mein UserPrincipal-Objekt speichern, wenn ich mich anmelde und dann während der gesamten Sitzung benutze. –

0

Sie können roleManager und Ihren benutzerdefinierten Rollenanbieter weiterhin verwenden. Stellen Sie einfach Ihren Principal auf RolePrincipal ein. Sie können dies auf IAuthenticationFilter tun und es auf global.asax registrieren. Siehe diese zwei Links für einige Beispielcode: RolePrincipal/ IAuthenticationFilter

Verwandte Themen