Como Gerenciar acessos ao sistema
02/05/2012
0
abs.
Fernando Borstmann
Posts
04/05/2012
Edson Melo
resolvi este problema de um modo facil e rapido
na ficha do usuario criei um campo com 50 caracteres, ou seja 50 vezes a letra S, onde cada um corresponde a um item do menu, tenho uma funcão que troca o S por N, e quando o usuario vai acessar a opção ele verifica se naquela posicao tem um S para sim pode acessar ou um N para não pode acessar, para tal controle uso a funcao copy(string, posicao, 1) para verificar se ele pode e outra para trocar, a letra daquela posicao. simples mesmo, a unica coisa que teria que pesquisar e esta funcao que troca a letra, tenho mas esta no meu computador em casa e não esta aqui comigo agora
qualquer coisa ou duvida estou a disposicao
edson garcia de melo
07/05/2012
Fernando Borstmann
mas não entendi muito bem, voce tem um campo no banco com 50 posições e verifica pra cada form que o usuário abre uma posição desse campo? tem como postar o codigo para eu tentar entender? agradeco
07/05/2012
Rodrigo Odasaki
Você não especificou bem qual seria a plataforma: MVC, Windows Forms, Web Forms..
Mas indo direto ao tratamento no banco, veja como eu faria:
Você disse que precisa especificar permissões para determinados usuários, onde cada
usuário faria parte de um perfil.
Neste meu explo eu criei 4 tabelas sendo: Usuario, UsuarioPerfil, PerfilPermissao e Permissao, conforme o exemplo abaixo:
<img src=http://1.bp.blogspot.com/-GWB-2S2-M88/T6eIQzLfNuI/AAAAAAAAAGY/MSp22m5jrvE/s1600/devpermissao.png>
07/05/2012
Rodrigo Odasaki
07/05/2012
Rodrigo Odasaki
A tabela Usuario armazena os usarios do sistema.
Imagem: http://2.bp.blogspot.com/-rM7mYznI1vA/T6eISdfUgxI/AAAAAAAAAG4/YXxntt12RoU/s1600/devpermissao_usuarios.png
A tabela UsuarioPerfil armazena os perfils do sistema.
Imagem: http://3.bp.blogspot.com/-jZys5KyFbpw/T6eIRRR6I6I/AAAAAAAAAGg/_jwPkibkM40/s1600/devpermissao_perfil.png
A tabela Permissao armazena as ações a quais cada perfil poderá ter.
Imagem: http://2.bp.blogspot.com/-eAbuPMZHtU4/T6eISEj-mgI/AAAAAAAAAGw/DWL5eH93KIg/s1600/devpermissao_permissao.png
A tabela PerfilPermissao é uma tabela auxiliar, onde 1 perfil pode ter N permissões.
Imagem: http://1.bp.blogspot.com/-sVnspxtzSwY/T6eIRkVoHyI/AAAAAAAAAGo/iq7DP0JVbcE/s1600/devpermissao_perfilpermissao.png
Seguem um JOIN feito entre Usuario X UsuarioPerfil:
Imagem: http://3.bp.blogspot.com/-X4dUDp2LARM/T6eIQR9ICYI/AAAAAAAAAGQ/XsgetctkPZI/s1600/UsuarioXPerfil.png
E um Join jeito entre a tabela PerfilPermissao e Permissao:
http://4.bp.blogspot.com/-s-7tMitTDwk/T6eIP0jdmNI/AAAAAAAAAGI/O3CS1VyvOpI/s1600/PermissaoXPerfilPermissao.png
Veja, que nesta última imagem,
o usuário com perfil Usuário só pode visualizar.
o usuário com perfil Moderador pode Visualizar e Alterar.
o usuário com perfil Administrador pode Visualizar, Alterar, Incluir e Excluir.
Então na sua aplicação, você obtém qual o usuário e aplica a validação de permissão em página ou ação.
Este meu exemplo é teórico em uma aplicação web forms, mas eu acredito que você possa aplicar o mesmo conceito em windows forms..
Aplicando permissão na página:
Página Admin.aspx
Você deseja apenas que usuários com perfil de admin acessem esta página:
if Usuario.Perfil != Administrador
Aqui você faz sua ação: Você pode dar uma execption ou redirecionar ele para outra página.
else
CarregaPagina
Mais uma vez, o exemplo acima foi apenas teórico, você pode aplicar o mesmo conceito em ações dentro de uma página, ou seja, todos os usuários com qualquer perfil pode acessar a página, mas de acordo com o perfil você libera o acesso de uma determinado controle.
Abraços.
07/05/2012
Rodrigo Odasaki
Você pode pesquisar, mas resumindo, dentro do diretório de instalação do seu Framework na 2.0, existe um arquivo chamado: aspnet_regsql
O diretório dele fica em: C:\Windows\Microsoft.NET\Framework\v2.0.50727
Este arquivo é um assistente a qual você poderá explicar sua base, ele apenas executa um script criando algumas tabelas no seu banco, já possui diversas tabelas de usuários, roles e etc e você pode facilmente integrar com os controles do VS, pelo menos em web forms.
Da uma pesquisada, eu já respondi algo sobre Membership neste tópico:
https://www.devmedia.com.br/forum/memberchip/395462
Abraços
07/05/2012
Rodrigo Odasaki
Onde eu disse: Não sei se funciona em web forms.
Correto: Não sei se funciona em windows forms.
07/05/2012
Fernando Borstmann
08/05/2012
Rodrigo Odasaki
Eu não trabalho com windows forms, mas acredito que seja mais ou menos assim.
Este exemplo é bem simples, eu fiz com ADO.NET, mas preferia fazer com LINQ TO SQL ou entity, já que desta forma ele me traz tudo em objeto.
Neste meu exemplo, eu criei uma classe chamada Usuario, nela eu criei minhas propriedades, enumeradores e métodos para validar e autenticar.
Basicamente, você pode controlar a permissão assim:
- Negando o acesso ao form
- Ocultando controles
Como você disse, seu usuário está relacionado em 1 perfil e cada perfil possui diferentes permissões.
Imagem tela de login do Form1:
http://1.bp.blogspot.com/-LxwgSrtfJLQ/T6kQIsk8XqI/AAAAAAAAAHs/RetoOVvY_xQ/s1600/printForm1.png
Imagem codigo login do Form1:
http://4.bp.blogspot.com/-NK_cS_xkdy0/T6kQGvzp9FI/AAAAAAAAAHU/YbJFpfnZCR8/s1600/codForm1.png
Imagem classe Usuario:
http://3.bp.blogspot.com/-4ZAZu9-wmRA/T6kQF2nvyfI/AAAAAAAAAHM/MxF1fztOPUo/s1600/classeUsuario.png
Imagem método Autenticar:
http://2.bp.blogspot.com/--8rNP2NJ0hk/T6kQFasDCBI/AAAAAAAAAHE/GLrRHp9-be0/s1600/classeUsuario-Autenticar.png
Basicamente, o que eu faço é:
1º Validar o login e senha
2º Consultar no método Autenticar, se o usuário e a senha existe
3º Se ele existe, ele já retorna um objeto do Usuario preenchido
4º Depois eu redireciono para o Form Home passando o objeto
5º No form Home, eu coloquei 2 exemplos, onde somente usuários com perfis de administradores, podem visualizar um Panel com controles conforme a imagem abaixo:
Imagem: Ocultando controles
http://1.bp.blogspot.com/-s9xb1mmaYWg/T6kQIOcMcrI/AAAAAAAAAHk/To5IUsZ408s/s1600/permissaoPorHide.png
6º Também existe outro exemplo, onde eu posso negar o acesso ao form, mostrando uma mensagem:
Imagem: Negando acesso:
http://1.bp.blogspot.com/-I-J1cCjVkpw/T6kQHX89k6I/AAAAAAAAAHc/XIXNTfU9jmA/s1600/permissaoPorAviso.png
Estes exemplos são bem simples, agora utilizando aquela tabela auxiliar chamada PerfilPermissoes, você simplesmente consulta direto no banco se o perfil possui as permissões e vai realizando a validação por ação de acordo com o perfil.
09/05/2012
Rodrigo Odasaki
No exemplo acima, eu montei a permissão em referência ao perfil do usuário.
Exemplo, se ele for do perfil Administrador: Conceda o acesso, se for Usuário: Negue o acesso.
Montei um exemplo agora, que ele concede o acesso de acordo com as permissões do Perfil utilizando aquela tabela Auxiliar chamada PerfilPermissao.
1º Criei uma classe chamada Permissao que possui propriedades, enumeradores e um método que é responsável em verificar se o perfil possui permissão:
http://4.bp.blogspot.com/-kycbe3Lo_RQ/T6oS0G-qoDI/AAAAAAAAAIo/jPb5cgTat94/s1600/classePermissao.png
2º Temos um botão chamado Adicionar Usuário:
http://rodrigoodasaki.blogspot.com.br/2012/05/teste.html
3º No método do botão eu fiz uma validação antes de chamar o Form AdicionarUsuario, utilizando o método VerificaPermissao.
http://1.bp.blogspot.com/-_QNOQiEkNA4/T6oSyfZpnJI/AAAAAAAAAII/OsUKFLn-Ph0/s1600/AcessoPorPermissaoMetodo.png
4º No método VerificaPermissao, ele recebe como parâmetro o o IdPerfil do usuário e o IdPermissao da permissão desejada. Nota-se que eu estou utilizando um enum para ficar mais fácil o entendimento. Basicamente neste método eu estou utilizando o ExecuteScalar() onde ele retorna apenas um registro, então eu faço um if para saber se ele obteve algum registro ou não. Se sim, ele retorna true a qual é liberado o Form. Como disse, você pode ocultar as ações ou retornar mensagens negando o acesso.
http://2.bp.blogspot.com/-uum6Q4GCvKI/T6oSzwCXJFI/AAAAAAAAAIg/O35McKX9SNs/s1600/VerificaPermissao.png
Veja: Estou acessando com o usuário joao.alves a qual faz parte do perfil Usuario, onde não possui permissão do tipo Incluir:
http://2.bp.blogspot.com/-KXYZH42j8NY/T6oSzQwC-OI/AAAAAAAAAIY/4YLA-yw1rcI/s1600/SemPermissao.png
Já acessando com o usuário carlos.henrique a qual faz parte do perfil Administrador, onde possui permissão do tipo Incluir:
http://3.bp.blogspot.com/-lvGjoq_LtuY/T6oSy65_xsI/AAAAAAAAAIQ/djhrPoX-bUM/s1600/PossuiPermissao.png
Novamente, segue as entidades:
http://1.bp.blogspot.com/-GWB-2S2-M88/T6eIQzLfNuI/AAAAAAAAAGY/MSp22m5jrvE/s1600/devpermissao.png
E a tabela auxiliar PerfilPermissao:
http://1.bp.blogspot.com/-sVnspxtzSwY/T6eIRkVoHyI/AAAAAAAAAGo/iq7DP0JVbcE/s1600/devpermissao_perfilpermissao.png
Veja que o primeiro registro possui o IdPerfil = 1 e IdPermissao = 1, ou seja o perfil do tipo Usuario só possui permissão Visualizar. Desta forma, você pode incluir N permissões para qualquer Perfil, e o método VerificaPermissao fica responsável por tratar as permissões e liberar o acesso na aplicação.
Não sei se esta é a forma correta, eu sou programador web forms e asp.net mvc, onde já é um pouco diferente. Também não estou seguindo boas práticas e nem trabalhando com criptografia e ncamadas, já que o foco é entender como aplicar permissões de acordo com o perfil do usuário.
Abraçoss
09/05/2012
Rodrigo Odasaki
Onde está:
2º Temos um botão chamado Adicionar Usuário:
http://rodrigoodasaki.blogspot.com.br/2012/05/teste.html
Certo:
http://4.bp.blogspot.com/-9KgTXNDQ_Dk/T6oSxwxCnwI/AAAAAAAAAIA/JvYKzXHG_rA/s1600/AcessoPorPermissao.png
09/05/2012
Fernando Borstmann
Agradeço toda sua atenção, vou montar o projeto com base nas suas orientações e ver como se comporta.
abraço
09/05/2012
Rodrigo Odasaki
Enviei o projeto e o banco para seu e-mail, tenho certeza que será de grande utilidade.
Como estou utilizando SQL Server, você precisa pegar os 2 arquivos com extensão .mdf e .log e jogar dentro da pasta Data do seu SQL Server e depois pelo SQL Server Management Studio, você precisa dar um Attach no base.
Caso o projeto não execute, clique com o botão direito no projeto, acesse as propriedades e em Propriedades na guia Signing, desmarque a opção Sign the ClickOnce manifests.
Abraços
13/12/2014
Denilosn Carlos
obrigado
Clique aqui para fazer login e interagir na Comunidade :)