Comment puis-je passer plus d'une valeur à une méthode personnalisée RoleProvider getUserRoles dans mon application MVC?

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

Question

Je voudrais coller mon système permissioning personnalisé dans une nouvelle application ASP.NET MVC. Je l'ai fait une bonne quantité de travail écrit mon propre AuthorizeAttribute sur mesure pour l'application. J'ai aussi écrit mes propres implémentations personnalisées MembershipProvider et RoleProvider. Tout cela fonctionne à merveille, jusqu'à ce que je dois vérifier les rôles mon utilisateur est une partie. J'ai fait tout cela pour que je puisse simplement le faire sur mes contrôleurs, et j'utilisé le modèle par défaut MVC dans VS2010 à rétro adapter mon code comme prototype:

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

Mon système personnalisé est un peu déjanté bien. Je ne remet pas en une base de données SQL. Il est un simple webservice qui fournit 3 méthodes: CheckPassword, GetPermissions, WebLogin. WebLogin enveloppe tout simplement à la fois CheckPassword et GetPermissions en un seul appel. Lors de l'utilisation WebLogin à l'intérieur ValidateUser ne fonctionnait pas, j'ai appelé TestPassword à l'intérieur MembershipProvider.ValidateUser (userName, mot de passe) et quand cet appel était Successfull je reviendrai le UserID, sinon il échouera et je reviens un NULL.

Le problème est quand je l'appelle dans ma mise en œuvre de RoleProvider. La classe abstraite définie GetRolesForUser avec un seul paramètre de userName. Ma méthode GetPermissions () a besoin de plus d'un seul userName à travailler. Il est défini comme ceci:

GetPermissions(privateKey,userName)

Il est clair que, appeler ce depuis la méthode de RoleProvider suivante ne va pas fonctionner. Je ne peux pas passer privateKey à la méthode qui est soutenu hors de la boîte.

public override string[] GetRolesForUser(string username)

est-il impossible d'obtenir ma propre méthode personnalisée appelée à partir de mon propre RoleProvider personnalisé?

Était-ce utile?

La solution

Vous pouvez lancer le fournisseur de rôle en tant que votre type personnalisé, qui vous donnera des accès à vos méthodes. Parce que votre fonction est en dehors de l'interface bien, ce couple votre demande fermement à votre fournisseur de rôle -. Ce qui est probablement très bien pour vos besoins

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

Autres conseils

Je pense qu'il devrait être:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top