Usuário com melhor resposta
Controlar acesso conforme perfil do usuário em ASP.NET C# (Web Form)

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.
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
Todas as 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