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?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top