Como eu passar mais de um valor a um costume método RoleProvider getUserRoles em meu aplicativo MVC?
-
19-09-2019 - |
Pergunta
Eu gostaria de cola meu sistema permissioning personalizado em um novo aplicativo ASP.NET MVC. Eu fiz uma quantidade justa de trabalho de escrever meu próprio AuthorizeAttribute personalizado para o aplicativo. Eu também escrevi o meu próprio personalizados MembershipProvider e RoleProvider implementações. Tudo isso funciona muito bem, até eu preciso verificar as funções meu usuário é uma parte. Eu fiz tudo isso para que eu pudesse simplesmente fazer isso em meus controladores, e eu usei o modelo MVC padrão no VS2010 para retro caber meu código como um protótipo:
[CustomAuth(Roles='X')]
public ActionResult DoSomething()
O meu sistema personalizado é um pouco whacky embora. Eu não põem em uma db SQL. É um webservice simples que fornece 3 métodos: CheckPassword, GetPermissions, WebLogin. WebLogin simplesmente envolve tanto CheckPassword e GetPermissions em uma chamada. Ao usar WebLogin de dentro ValidateUser não funcionou eu chamei TestPassword de dentro MembershipProvider.ValidateUser (username, password) e quando esta chamada foi bem sucedido gostaria de obter de volta o UserID, senão ele iria falhar e eu voltar a NULL.
O problema é quando eu pôr em meu implementação de RoleProvider. A classe abstrata definida GetRolesForUser com um único parâmetro do nome de utilizador. Meus GetPermissions () método precisa de mais do que um único nome de usuário para o trabalho. Ela é definida assim:
GetPermissions(privateKey,userName)
Claramente, chamando isso de dentro o seguinte método RoleProvider não está indo para o trabalho. Eu não posso passar PrivateKey ao método que é suportado fora da caixa.
public override string[] GetRolesForUser(string username)
É impossível obter o meu próprio método personalizado chamado de dentro de minha própria RoleProvider personalizado?
Solução
Você pode lançar o provedor de função como seu tipo personalizado, que lhe dará acesso a seus métodos. Porque a sua função está fora da interface, porém, este firmemente casais seu aplicativo para o seu provedor de função -. Que é provavelmente muito bem para seus propósitos
RoleProvider rp = Roles.Provider;
(rp as MyRoleProvider).GetPermissions(privateKey,userName);
Outras dicas
Eu acho que deveria ser:
(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);