Usuário com melhor resposta
Controle de Acesso Externo aos Sistemas

Pergunta
-
Olá Pessoal,
Levando em consideração que eu irei desenvolver alguns novos sistemas em ASP.Net MVC 3 ou 4, gostaria de delegar a responsabilidade de controlar os acessos das funcionalidades de todos esses novos sistemas para uma camada de segurança.
Terei que criar um interceptor ou filter? Alguma sugestão?Grato.
Respostas
-
Boa tarde.
Voce pode delegar a funcao para um controlador, em um dos sistemas fiz assim:
Todo controller herda de controller:
public class ProdutoController : Controller
Altere para que seus controllers herdem de um controller base:
public class ItemOperadorController : BaseController
E o BaseController implementa um OnActionExecuting:
protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (Session["Login"] == null) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "controller", "Usuario" }, { "action", "Message" } }); return; } else { base.OnActionExecuting(filterContext); } string rota = RouteData.Values.First().Value.ToString(); int _tipo = 0; if (rota == Rotas.ItemOperador.ToString()) _tipo = 2; if (rota == Rotas.ItemResponsavel.ToString()) _tipo = 3; if (rota == Rotas.ItemEnviarExpedicao.ToString()) _tipo = 4; if (_tipo > (int)Session["Tipo"]) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "controller", "Usuario" }, { "action", "AcessoNegado" } }); } } }
No meu caso, verifico se a session esta vazia e se o usuario tem permissao para acessar a rota.
Espero ter ajudado.
Consultoria .NET
ANALISTA DESENVOLVEDOR
Se esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
Blog .Net Descomplicado- Sugerido como Resposta Leonardo B Moreira quarta-feira, 29 de fevereiro de 2012 13:58
- Marcado como Resposta Janyo Vasconcelos quarta-feira, 29 de fevereiro de 2012 15:49
Todas as Respostas
-
Boa tarde.
Voce pode delegar a funcao para um controlador, em um dos sistemas fiz assim:
Todo controller herda de controller:
public class ProdutoController : Controller
Altere para que seus controllers herdem de um controller base:
public class ItemOperadorController : BaseController
E o BaseController implementa um OnActionExecuting:
protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (Session["Login"] == null) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "controller", "Usuario" }, { "action", "Message" } }); return; } else { base.OnActionExecuting(filterContext); } string rota = RouteData.Values.First().Value.ToString(); int _tipo = 0; if (rota == Rotas.ItemOperador.ToString()) _tipo = 2; if (rota == Rotas.ItemResponsavel.ToString()) _tipo = 3; if (rota == Rotas.ItemEnviarExpedicao.ToString()) _tipo = 4; if (_tipo > (int)Session["Tipo"]) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "controller", "Usuario" }, { "action", "AcessoNegado" } }); } } }
No meu caso, verifico se a session esta vazia e se o usuario tem permissao para acessar a rota.
Espero ter ajudado.
Consultoria .NET
ANALISTA DESENVOLVEDOR
Se esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
Blog .Net Descomplicado- Sugerido como Resposta Leonardo B Moreira quarta-feira, 29 de fevereiro de 2012 13:58
- Marcado como Resposta Janyo Vasconcelos quarta-feira, 29 de fevereiro de 2012 15:49
-
-
-
-
Boa tarde.
Voce pode delegar a funcao para um controlador, em um dos sistemas fiz assim:
Todo controller herda de controller:
public class ProdutoController : Controller
Altere para que seus controllers herdem de um controller base:
public class ItemOperadorController : BaseController
E o BaseController implementa um OnActionExecuting:
protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (Session["Login"] == null) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "controller", "Usuario" }, { "action", "Message" } }); return; } else { base.OnActionExecuting(filterContext); } string rota = RouteData.Values.First().Value.ToString(); int _tipo = 0; if (rota == Rotas.ItemOperador.ToString()) _tipo = 2; if (rota == Rotas.ItemResponsavel.ToString()) _tipo = 3; if (rota == Rotas.ItemEnviarExpedicao.ToString()) _tipo = 4; if (_tipo > (int)Session["Tipo"]) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "controller", "Usuario" }, { "action", "AcessoNegado" } }); } } }
No meu caso, verifico se a session esta vazia e se o usuario tem permissao para acessar a rota.
Espero ter ajudado.
Consultoria .NET
ANALISTA DESENVOLVEDOR
Se esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
Blog .Net DescomplicadoOlá,
Desta maneira quando tento fazer recebo o seguinte erro do browser:
Redirecionamento incorreto
O Firefox detectou que o pedido para este endereço não será concluído devido à forma que o servidor o está redirecionando.
Este problema algumas vezes pode ser causado pela desativação ou bloqueio de cookies.Tentei desta forma e obtive um resultado melhor:
filterContext.Result = new ViewResult { ViewName = "~/Views/SomeController/SomeView.cshtml" };
Porém, minha sessão sempre será nula, já que antes de entrar em qualquer método eu faço esta verificação. Eu nunca conseguirei preencher a sessão. Como você preenche está sessão?
Obrigado, Att, Gabriel Braga Graduando em Sistemas de Informação PUC-Rio