none
Verificação de autenticação automática em toda aplicação RRS feed

  • Pergunta

  • Boa tarde.

    Venho do Zend com PHP e trabalho com Windows Forms a vários anos.  Conheço ASP.Net WebForms mas no ASP.NET MVC estou começando agora meus estudos.

    Estou olhando quanto a autenticação e o atributo[Autorize] funciona direitinho, sem nada para reclamar.   Porém tenho uma dúvida:

    Meu site, na verdade minha aplicação Web, é um sistema de gestão comercial (um mini-erp) web.  Desta forma não há áreas públicas, o usuário sempre tem que estar autenticado para ter acesso as controllers e views.

    Tem alguma configuração no Web.Config ou no Global.asax que eu diga que qualquer acesso não autenticado tem que jogar para /Login?  Não quero por isso em cada action, em cada controller.

    Desde já agradeço!

    Romulo Oliveira
    Nova Friburgo - RJ

    terça-feira, 13 de novembro de 2012 20:34

Respostas

  • Sim, você pode setar isso nas configurações globais dentro do global.asax ou você pode configurar nos controllers tambem:

    protected void Application_Start()          
    {
        GlobalFilters.Filters.Add(new AuthorizeAttribute()
        {
            Roles = "",
            Users = ""
        });
    }

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    terça-feira, 13 de novembro de 2012 21:16

Todas as Respostas

  • Sim, você pode setar isso nas configurações globais dentro do global.asax ou você pode configurar nos controllers tambem:

    protected void Application_Start()          
    {
        GlobalFilters.Filters.Add(new AuthorizeAttribute()
        {
            Roles = "",
            Users = ""
        });
    }

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    terça-feira, 13 de novembro de 2012 21:16
  • Mas iai, ta curtindo MVC ou prefere o PHP?

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    terça-feira, 13 de novembro de 2012 21:17
  • Bom dia.

    Legal o MVC da Microsoft só que o Razor com EF deixa tudo muito automático e acho que terei problemas em views mais complexas.  Vejo o EF como uma solução legal mas me preocupo quando eu tiver com o sistema em produção.  O ERP da empresa hoje conta com 700 tabelas, estou fazendo um projeto pessoal mas rapidamente vou chegar a 80 tabelas.   Fico preocupado com a performance.

    Já usei ASP.NET antes (2.0) com ADO.Net puro e o resultado era muito bom, muito rápido.  Eu gostaria de usar ADO.Net puro no MVC 4 mas daí não vou usar o Razor e nem os Data Annotations das classes.   Usando MVC 4 sem estes recursos (atributos Required por exemplo) me sentirei andando contra o rio, entende?  Por isso estou aderindo ao MVC exatamente como a Microsoft sugere.  As facilidades comparando com o Zend são muito boas (Razor).  No PHP tenho muita flexibilidade e padrão com o Zend, sinto-me no controle da situação.   Com estas facilidades do MVC e Razor é legal mas tem hora que eu não sei direito como irá funcionar.

    Outra coisa é que no PHP eu criei um padrão XML onde toda a view, 100% mesmo, era gerada apenas via arquivo XML.  Consegui uma reutilização de código acima do normal com aquilo.  Em Razor não tem como pois não posso gerar ele dinamicamente.   Crio alguns helpers para mim mas eu queria algo para criar a view inteira lendo um XML.   Mas fazendo isso não consigo fazer a validação pelo Model e outras coisas legal que a MS nos oferece.

    Obrigado pela resposta!

    Romulo Oliveira
    Nova Friburgo - RJ

    quarta-feira, 14 de novembro de 2012 10:29
  • Que tipo de problema você acha que pode ter com o EF? Normalmente as lentidões com o entity são devido a joins que não deveriam ser feitos, mas são feitos por terem sido mal projetados; mas concordo, fazer o SQL na mão é sempre melhor em questão de performance :)


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 14 de novembro de 2012 10:55
  • Concordo com o Murilo, SQL na mão e otimo rsrsrs... estou iniciando em mvc tbm e me sinto meio perdido, mais a cada descoberta fico mais facinado mvc 4 + EF \o/

    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    quarta-feira, 14 de novembro de 2012 15:43
  • Performance basicamente.  Antes quando eu olhava o Hibernate e NHibernate, onde tudo tinha que ser configurado em arquivos XML eu já me afastava logo.  Mas o EF com o esquema dos atributos nas classes realmente deixou tudo muito mais simples e está funcionando muito bem.

    Aproveitando o assunto eu estava fazendo um teste.  Em uma tabela eu fiz um select com o EF e na View peguei os dados e montei um foreach tranquilo.

    Daí em outro teste eu fiz o select mas apenas com alguns campos onde eu fiz um Select New {Campo1, Campo2}.

    Na view estava dando erro pois o objeto esperado estava sendo diferente do enviado.  Solução?

    Meu modelo é IDConexao.  Criei um IDConexaoView com apenas os 4 campos que eu quero.  Daí funcionou perfeitamente.   Essa é a melhor técnica mesmo?

    quarta-feira, 14 de novembro de 2012 17:22
  • Você pode usar o .Select para selecionar campos especificos do seu Model:

    public class Pessoa{
         public int Id{get;set;}
         public string Nome{get;set;}
         public int Idade{get;set;}
    }
    
    public static void Main(){
         var nome = _db.Pessoa
                    .Where(p => p.Id == 1)
                    .Select(p => new {p.Nome})
                    .First();
    }

    Assim você pega somente o nome da pessoa com Id = 1.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 14 de novembro de 2012 17:50
  • Você pode usar o .Select para selecionar campos especificos do seu Model:

    public class Pessoa{
         public int Id{get;set;}
         public string Nome{get;set;}
         public int Idade{get;set;}
    }
    
    public static void Main(){
         var nome = _db.Pessoa
                    .Where(p => p.Id == 1)
                    .Select(p => new {p.Nome})
                    .First();
    }

    Assim você pega somente o nome da pessoa com Id = 1.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    Murilo existe alguma diferença em termos de performance escrever este teu exemplo de consulta da seguinte maneira
    var nome = (from p in _db.Pessoa
               where p => 1
               select p.Nome).First();

    quinta-feira, 15 de novembro de 2012 00:22
  • Acredito que não pois quando o código é compilado eles viram a mesma coisa.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 15 de novembro de 2012 00:30
  • Murilo, uma coisa estranha.

    Configurei no Web.Config assim:

    <authentication mode="Forms">
      <forms loginUrl="~/Login/Login" timeout="2880" />
    </authentication>

    Ele direciona corretamente porém a view não é executada.  Coloco qualquer caractere lá e nada.  Coloco um breakpoint na controller e nada.

    Só que se eu tirar as linhas que você me ensinou do Application_Start e eu chamar a Login/Login ele roda direitinho. 

    O que pode ser?

    sexta-feira, 16 de novembro de 2012 19:52
  • Você precisar setar a sua action Login com o attribute [AllowAnonymous]:

    [AllowAnonymous]
    public ActionResult Login(){
    
    }

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    sexta-feira, 16 de novembro de 2012 20:32