Wie kann ich mehr als einen Wert an eine benutzerdefinierten Roleprovider GetUserRoles Methode in meinem MVC-app passieren?

StackOverflow https://stackoverflow.com/questions/2223741

Frage

Ich mag meine Gewohnheit Permissionierung System in einen neuen ASP.NET MVC-app kleben. Ich habe eine Menge Arbeit getan meine eigenen benutzerdefinierten AuthorizeAttribute für die App zu schreiben. Ich habe auch meine eigenen benutzerdefinierten MembershipProvider und Roleprovider-Implementierungen geschrieben. All dies funktioniert wunderbar, bis ich die Rollen mein Benutzer ist ein Teil überprüfen müssen. Ich habe das alles so konnte ich einfach das tun auf meinem Controller, und ich verwendet, um die Standard-MVC-Vorlage in VS2010 retro meinen Code als Prototyp passen:

[CustomAuth(Roles='X')]
public ActionResult DoSomething()

Ihr maßgeschneidertes System ist aber ein bisschen whacky. Ich nenne nicht in eine SQL-Datenbank. Es ist eine einfache Webservice, die drei Methoden bestimmt: Checkpassword, GetPermissions, Weblogin. Weblogin wickelt einfach beide Checkpassword und GetPermissions in einem Aufruf. Wenn Weblogin aus ValidateUser mit funktionierte nicht ich testpass aus MembershipProvider.ValidateUser (Benutzername, Passwort) genannt, und wenn dieser Aufruf erfolgreich ist, würde ich den Benutzer-ID zurück, sonst wäre es nicht und ich würde ein NULL zurück.

Das Problem ist, wenn ich in meiner Implementierung von Roleprovider nennen. Die abstrakte Klasse GetRolesForUser mit einem einzigen Parameter von username definiert. Mein GetPermissions () Methode braucht mehr als ein einziger Nutzername zu arbeiten. Es ist definiert wie folgt:

GetPermissions(privateKey,userName)

Natürlich ist dies Aufruf von innerhalb der folgenden Roleprovider-Methode wird nicht funktionieren. Ich kann nicht privateKey an die Methode übergeben, die aus der Box unterstützt wird.

public override string[] GetRolesForUser(string username)

Ist es unmöglich, meine eigene benutzerdefinierte Methode aus meinen eigenen benutzerdefinierten Roleprovider genannt zu bekommen?

War es hilfreich?

Lösung

Sie können die Rollenanbieter als Ihre benutzerdefinierten Typ umwandeln, die Sie Zugriff auf Ihre Methoden geben. Da Ihre Funktion außerhalb der Schnittstelle ist jedoch, diese eng Paare Ihrer Anwendung auf dem Rollenanbieter -., Die für Ihre Zwecke wahrscheinlich in Ordnung ist

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);

Andere Tipps

ich denke, es sollte sein:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top