Arquivos do Blog
AuthorizationAttribute Customizado no ASP.NET MVC
Publicado por pedrofernandesblog
Vou mostrar um exemplo prático de como podemos criar um AuthorizationAttribute customizado para, por exemplo, redirecionar para uma página específica em caso de acesso não autorizado.
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1.FilterAttributes
{
public class MyAuthorizationAttribute : ActionFilterAttribute
{
private string _userName;
public MyAuthorizationAttribute(string userName)
{
_userName = userName;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (!UserIsAuthenticated())
{
// Redirect to login page
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "Login" },
{ "action", "NaoPermitido" }
});
}
}
private bool UserIsAuthenticated()
{
return HttpContext.Current.User.Identity.Name == _userName;
}
}
}
Para usar fazemos assim:
[MyAuthorization("Pedro")]
public ActionResult Teste() ...
Se o nome do usuário logado não for Pedro, será redirecionado para o controller Login e a action NaoPermitido.
Publicado em .NET Framework, ASP.NET MVC, C#
Tags: .NET Framework, ASP.NET MVC, AuthorizationAttribute, C#
ASP.NET MVC Action Filters: HandleError, Authorize e OutputCache
Publicado por pedrofernandesblog
Um Action Filter é um atributo que quando adicionado a uma action de um controller, altera a forma que a action é executada.
HandleError
O Action Filter HandleError é utilizado para redirecionar para uma página de erro customizada quando algum erro é disparado pela action do controller.
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}
public ActionResult About()
{
return View();
}
}
Quando acontecer o erro NullReferenceException na action Index, o ASP.NET MVC irá procurar na pasta das views daquele controller uma view chamada “Error” e renderiza-la para o usuário. Quando a view chamada “Error” estiver na pasta “Shared”, será compartilhada com todos os controllers da aplicação.
Podemos também, redirecionar para páginas de erros específicas para cada tipo de erro:
[HandleError(ExceptionType = typeof(NullReferenceException),
View = "NullError")]
[HandleError(ExceptionType = typeof(SecurityException),
View = "SecurityError")]
public class HomeController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}
public ActionResult About()
{
return View();
}
}
Authorize
Este Action Filter é um dos mais importantes, pois serve para definirmos as diretrizes de segurança da aplicação, com ele é possível determinar quais usuários ou grupos de usuários terão acesso a determinadas actions do controller.
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult About()
{
return View();
}
}
Este código acima, determina que apenas usuários logados podem entrar na action About(). Qualquer acesso não autorizado será redirecionado para a página de login.
Também é possível definir uma segurança baseada em grupos de usuários:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize(Roles="Admin, Funcionarios")]
public ActionResult About()
{
return View();
}
}
Somente usuários do grupo Admin e Funcionarios tem acesso a action About().
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize(Users = "Pedro, Olga")]
public ActionResult About()
{
return View();
}
}
Somente o usuário Pedro e a usuária Olga podem acessar a action About().
OutputCache
Este ActionFilter habilita o cache das actions dos controllers, útil para quando determinadas páginas não mudam com freqüencia e torna desnecessário fazer todo o processamento diversas vezes.
public class HomeController : Controller
{
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return DateTime.Now;
}
public ActionResult About()
{
return View();
}
}
Ao executar a action acima, será exibida na tela a hora atual. E durante 15 segundos você verá a mesma data e hora, isso porque o resultado da action foi colocado no cache e é reaproveitado em vez de executar a action novamente, se este AcionFilter for usado corretamente, é possível ter uma melhora significativa de desempenho da aplicação.
Publicado em ASP.NET MVC
Tags: Action Filter, ASP.NET MVC, Authorize, HandleError, OutputCache

