ASP.NET MVC - Custom Authorization Attribute

Por vezes precisamos de alterar o comportamento da autorização numa aplicação. No meu caso precisei de fazê-lo para implementar a autenticação num projecto com a access token do Facebook.

Podemos implementar as nossas próprias regras recorrendo à interface IAuthorizationAttribute e fazer o override ao AuthorizeCore. Este método è boleano, e retorna verdadeiro caso o utilizador tenha permissões ou falso senão tiver.

Um exemplo simples:

public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (new Services.UserService().IsAuthenticated())
            {
                return true;
            }
            return false;
        }
    }

No service UserService tenho um método para verificar se o utilizador tem permissões (IsAuthenticated()).

Depois só preciso de usar o atributo [CostumAuthorize] nos controllers/actions.

[CustomAuthorize]
        public ActionResult EditarPerfil()
        {
        
        }

O utilizador apenas poderá ver a action Perfil se tiver as permissões necessárias.
Podem ver mais informações sobre a class AuthorizeAttribute aqui: http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

Published 1-4-2011 20:27 por Guilherme Cardoso
Filed under:

Comments

# re: ASP.NET MVC - Custom Authorization Attribute

Como vc esta recuperando as informações do usuario que esta tentando acessar este controller ?

quarta-feira, 31 de Agosto de 2011 13:12 by Bernardo

# re: ASP.NET MVC - Custom Authorization Attribute

Boas Bernardo,

Podes usar uma classe para criar lidares com o usuário como um objeto (crias as propriedades nome, email, etc, e a classe pode ser UserObject) e no service UserService() usas uma propriedade para o objecto que crias-te, que te vá buscar o teu user a uma sessão por exemplo, converta-o para o objecto UserObject e o retorne (podias chamar-lhe GetCurrentUser).

Assim acedes ao user através de UserService().GetCurrentUser

Ou seja: string email = Services.UserService().GetCurrentUser.Email

Esta é uma solução possível, mas tens outras formas para fazer isto claro.

quarta-feira, 31 de Agosto de 2011 14:00 by Guilherme Cardoso

Leave a Comment

(requerido) 
(requerido) 
 
(opcional)
(requerido) 
If you can't read this number refresh your screen
Enter the numbers above: