Pergunta

Eu escrevo um controlador como abaixo:

public class AccountController : Controller
{
    public ActionResult Login(/*---*/)
    {
        GenericIdentity identity = new GenericIdentity("userName");
        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "role1", "role2" });
        this.HttpContext.User = principal;
        /*---*/;
    }
}

Depois de login, eu posso obter o nome de usuário por User.Identity.Name em outro controlador. Mas User.IsInRole ( "role1") sempre retornará false.

Como posso atribuir um valor para o usuário, eu não quero usar Membership ...

Foi útil?

Solução

Hm.

Usando associação?

Pelo menos a API de nível inferior. Você precisa atribuir isto um diretor em algum evento (que basicamente se transforma em um cookie e é desserializado com cada chamada).

Os detalhes estão no http://support.microsoft.com/kb/306590

Ou também na http://msdn.microsoft.com/en- us / library / aa302399.aspx

Outras dicas

Você precisa manter os dados do usuário em algum lugar para que todas as solicitações de páginas subsequentes têm acesso a ele. Normalmente você iria criar um tíquete de autenticação e armazená-lo em um cookie. Então, para cada pedido que você extrair os dados e criar seu IPrincipal. Isso pode ser feito no método Application_AuthenticateRequest de Global.ascx,

MVC - Como armazenar / Atribuir papéis de usuários autenticados tem mais informações sobre uma maneira simples de fazer o que quiser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top