none
Controlar acesso conforme perfil do usuário em ASP.NET C# (Web Form) RRS feed

  • Pergunta

  • Boa noite pessoal, gostaria de saber como eu faço para controlar o acesso de determinados usuários a algumas pastas especificas, no caso a minha aplicação possui duas pastas [Aluno] e [Professor] onde as mesma possui os seus respectivos arquivos com a imagem abaixo, estou utilizando Forms Authentication e no meu banco de dados possui um campo chamado codigoPerfil, aonde 1 quer dizer professor e 2 quer dizer aluno. A minha dúvida é justamente essa como devo fazer para quando o usuário conectar no meu sistema o mesmo vê se é aluno ou professor caso o codigoPerfil seja igual a 1 o mesmo rederiza o usuário para Professor/home.aspx caso contrário se o usuário for aluno rederiza para Aluno/home.aspx, também gostaria de saber como controlar, ou seja apenas usuários com perfil 1 acessa a parte de professores, mesmo que o usuário digite o caminho do professor e esteja logado o mesmo irá solicitar login novamente.

    Segue abaixo duas imagens na intenção de exemplificar o que eu estou dizendo, deste já agradeço a todos. 

    sexta-feira, 7 de fevereiro de 2014 22:48

Respostas

  • Você pode tentar duas soluções:

    Solução 1 - Faça você mesmo:

    Ao efetuar login na sua aplicação, verifique se o usuário é do tipo 1 ou 2 (sugiro o uso de um Enum) e coloque em uma chave de Sessão (Session) essa informação:

    Crie um Enum para representar o tipo de Acesso:

    public enum TipoAcesso    {        Professor =1,        Aluno =2    }   

    Adicione um código como o a seguir após o usuário efetuar o login:

    // Após efetuar o Login
    TipoAcesso tipoAcesso = UmMetodoQueDeterminaOTipoDeAcessoDoUsuario();
    Session["TipoAcesso"= tipoAcesso;

    Então, no evento Page_Load das páginas específicas de cada acesso, verifique o tipo de acesso do usuário atual:

    // Na página sob a pasta professor
       public void Page_Load(object sender, EventArgs e)
       {
           if (Session["TipoAcesso"!= null)
           {
               TipoAcesso tipoAcesso = (TipoAcesso)Session["TipoAcesso"];
               if (tipoAcesso != TipoAcesso.Professor)
               {
                   Response.Redirect("~/PermissaoNegada.aspx");
               }
           }
       }

    E:

    // Na página sob a pasta aluno
       public void Page_Load(object sender, EventArgs e)
       {
           if (Session["TipoAcesso"!= null)
           {
               TipoAcesso tipoAcesso = (TipoAcesso)Session["TipoAcesso"];
               if (tipoAcesso != TipoAcesso.Aluno)
               {
                   Response.Redirect("~/PermissaoNegada.aspx");
               }
           }
       }

    Recomendo não forçar o login novamente e sim criar uma pagina de erro que informe ao usuário o porque ele não pode acessar aquele recurso.

    Solução 2 - utilizar Roles do ASP.NET Membership:

    Você pode utilizar os recursos do próprio ASP.NET para realizar seu requisito, porém é uma solução que exige um conhecimento do funcionamento de Roles do ASP.NET. Recomendo a leitura dos links a seguir para tanto:

    http://www.asp.net/web-forms/tutorials/security/roles/creating-and-managing-roles-cs

    http://msdn.microsoft.com/en-us/library/yh26yfzy(v=vs.100).ASPX

    • Marcado como Resposta Giovani Cr segunda-feira, 17 de fevereiro de 2014 10:55
    segunda-feira, 10 de fevereiro de 2014 18:06

Todas as Respostas

  • Ninguém tem alguma sugestão??? 
    sábado, 8 de fevereiro de 2014 14:58
  • Você pode tentar duas soluções:

    Solução 1 - Faça você mesmo:

    Ao efetuar login na sua aplicação, verifique se o usuário é do tipo 1 ou 2 (sugiro o uso de um Enum) e coloque em uma chave de Sessão (Session) essa informação:

    Crie um Enum para representar o tipo de Acesso:

    public enum TipoAcesso    {        Professor =1,        Aluno =2    }   

    Adicione um código como o a seguir após o usuário efetuar o login:

    // Após efetuar o Login
    TipoAcesso tipoAcesso = UmMetodoQueDeterminaOTipoDeAcessoDoUsuario();
    Session["TipoAcesso"= tipoAcesso;

    Então, no evento Page_Load das páginas específicas de cada acesso, verifique o tipo de acesso do usuário atual:

    // Na página sob a pasta professor
       public void Page_Load(object sender, EventArgs e)
       {
           if (Session["TipoAcesso"!= null)
           {
               TipoAcesso tipoAcesso = (TipoAcesso)Session["TipoAcesso"];
               if (tipoAcesso != TipoAcesso.Professor)
               {
                   Response.Redirect("~/PermissaoNegada.aspx");
               }
           }
       }

    E:

    // Na página sob a pasta aluno
       public void Page_Load(object sender, EventArgs e)
       {
           if (Session["TipoAcesso"!= null)
           {
               TipoAcesso tipoAcesso = (TipoAcesso)Session["TipoAcesso"];
               if (tipoAcesso != TipoAcesso.Aluno)
               {
                   Response.Redirect("~/PermissaoNegada.aspx");
               }
           }
       }

    Recomendo não forçar o login novamente e sim criar uma pagina de erro que informe ao usuário o porque ele não pode acessar aquele recurso.

    Solução 2 - utilizar Roles do ASP.NET Membership:

    Você pode utilizar os recursos do próprio ASP.NET para realizar seu requisito, porém é uma solução que exige um conhecimento do funcionamento de Roles do ASP.NET. Recomendo a leitura dos links a seguir para tanto:

    http://www.asp.net/web-forms/tutorials/security/roles/creating-and-managing-roles-cs

    http://msdn.microsoft.com/en-us/library/yh26yfzy(v=vs.100).ASPX

    • Marcado como Resposta Giovani Cr segunda-feira, 17 de fevereiro de 2014 10:55
    segunda-feira, 10 de fevereiro de 2014 18:06