none
Autenticação sem Membership MVC4 RRS feed

  • Pergunta

  • Alguém sabe como construir uma autenticação sem utilizar os componentes do membership?

    Queria fazer algo especifico e restringir algumas rotas para determinados perfis de usuarios.

    quarta-feira, 9 de janeiro de 2013 15:57

Respostas

  • algo assim encaixa no que você quer?

    http://blog.lambda3.com.br/2008/07/autenticao-e-autorizao-com-asp-net-mvc/

    ara compensar isso há a boa notícia de que eles vão evoluir um pouco mais esse controlador e as views, permitindo trocar os mecanismos de autenticação e autorização, se não quisermos usar o membership do ASP.Net, que é onde o atributo [Authorize] e o controlador estão acoplados atualmente. Será possível estender este modelo de 2 formas então:

    1. Trocando o membership do ASP.Net por algum outro framework;
    2. Trocando o provider de membership do ASP.Net. Para permitir isso, o construtor do controlador já inicia com uma injeção de dependência bonita, dêem uma olhada:
       16 public AccountController()
       17     : this(null, null)
       18 {
       19 }
       20 
       21 public AccountController(IFormsAuthentication formsAuth,MembershipProvider provider)
       22 {
       23     FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
       24     Provider = provider ?? Membership.Provider;
       25 }


    Essa interface, IFormsAuthentication, é nova, e é parte do MVC. OMembershipProvider é o velho conhecido MembershipProvider do ASP.Net. Dessa forma, fica fácil injetar um outro provider, para testar, e até mesmo trocá-lo. Para arrancar de vez o Membership do ASP.Net (primeira opção acima), a recomendação até agora é refazer o controlador. Mas isso vai melhorar.

    Vimos que há view para trocar senha, para fazer login e se cadastrar. Como fica? Vou mostrar um screenshots abaixo, mas antes fiz um controlador simples, onde um usuário normal só pode ver uma lista de categorias, e o usuário admin pode alterar. Vejam o controlador:

        1 public class CategoriaController : Controller
        2 {
        3     [Authorize(Roles="All,Admin")]
        4     public ActionResult Index()
        5     {
        6         return View("Index", (newNorthwind2005Model.NorthwindEntities()).
        7             Categories.ToList());
        8     }
        9 
       10     [Authorize(Roles = "Admin")]
       11     public ActionResult Edit(int id)
       12     {
       13         var northwind = newNorthwind2005Model.NorthwindEntities();
       14         var categoria = (from cat in northwind.Categories
       15                         where cat.CategoryID == id
       16                         select cat).First();
       17         return View(categoria);
       18     }
       19 
       20     [Authorize(Roles = "Admin")]
       21     public ActionResult Update(int id)
       22     {
       23         var northwind = newNorthwind2005Model.NorthwindEntities();
       24         var categoria = (from cat in northwind.Categories
       25                         where cat.CategoryID == id
       26                         select cat).First();
       27         BindingHelperExtensions.UpdateFrom(categoria, Request.Form);
       28         northwind.SaveChanges();
       29 
       30         return Index();
       31     }
       32 }
    

    Naturalmente a ação index, que é a padrão, lista os usuários, mas antes eu preciso estar autenticado. Então, quando eu clico na aba de categorias, sou direcionado à view de login pelo controlador:


    Aprendendo Ad Eternum

    quarta-feira, 9 de janeiro de 2013 17:00