Come faccio a passare più di un valore a un metodo RoleProvider GetUserRoles personalizzato nella mia MVC app?

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

Domanda

Mi piacerebbe incollare il mio sistema permissioning personalizzato in un nuovo ASP.NET MVC app. Ho fatto una buona dose di lavoro scrivere il mio AuthorizeAttribute personalizzato per l'applicazione. Ho anche scritto il mio proprio personalizzati MembershipProvider e RoleProvider implementazioni. Tutto questo funziona benissimo, fino a quando ho bisogno di controllare i ruoli il mio utente è una parte. Ho fatto tutto questo in modo si potrebbe semplicemente fare questo sul mio controller, e ho usato il modello MVC predefinito in VS2010 per Retro Fit il mio codice come prototipo:

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

Il mio sistema personalizzato è un po 'sgargianti però. Io non chiamo in un db SQL. Si tratta di un semplice webservice che fornisce 3 metodi: CheckPassword, GetPermissions, weblogin. Weblogin avvolge semplicemente sia CheckPassword e GetPermissions in una singola chiamata. Quando si utilizza weblogin dall'interno ValidateUser non ha funzionato ho chiamato testpassword dall'interno MembershipProvider.ValidateUser (nome utente, password) e quando questa chiamata era successo mi rimetto l'UserID, altrimenti sarebbe fallita e mi piacerebbe tornare un NULL.

Il problema è quando chiamo nel mio attuazione RoleProvider. La classe astratta definita GetRolesForUser con un singolo parametro di userName. Il mio metodo GetPermissions () ha bisogno di più di un solo nome utente per lavorare. Essa è definita in questo modo:

GetPermissions(privateKey,userName)

Chiaramente, la chiamata a questo dal di dentro il seguente metodo RoleProvider non è andare a lavorare. Non posso passare PrivateKey al metodo supportato dalla scatola.

public override string[] GetRolesForUser(string username)

E 'impossibile ottenere il mio metodo personalizzato chiamato da dentro il mio proprio RoleProvider personalizzato?

È stato utile?

Soluzione

Si può lanciare il provider di ruoli come tipo personalizzato, che vi darà l'accesso ai vostri metodi. Perché la vostra funzione è al di fuori l'interfaccia però, questo strettamente coppie l'applicazione per il vostro provider di ruoli -. Che è probabilmente bene per i vostri scopi

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

Altri suggerimenti

Credo che dovrebbe essere:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top