Direitos

Delphi

12/09/2007

Alguem aqui utiliza esquema de direitos no aplicativo? Por exemplo, usuário ´A´ pode acessar funcionalidade ´B´ mas não pode acessar funcionalidade ´Z´. Como vocês fazem? Qual a estrutura das tabelas? Usam criptografia? Como é a segurança sobre essa tabela?


Rjun

Rjun

Curtidas 0

Respostas

Daykas

Daykas

12/09/2007

Você quer dizer níveis de permissão.
Eu uso. Na tabela de cadastro de usuários eu crio campos para isso de acordo com o número de menus criados.
Quando o usuário é cadastrado, o administradro marca os checks qu epossuem a inscrição do que ele pode acessar, ou desmarca o que não pode. Isso fica gravado na tabela.
Quando o usuário loga, o sistema precisa reconhecê-lo para autenticá-lo e, nesta verificação, o sistema habilita os menus de acordo com as permissões condecidas.
É mais ou menos assim: o menu financeiro só habilita se a coluna p4 do usuário for iguala a 1, senão fica desabilitada.
Para isso você deve criar uma função, senão vai encher de if, then e else.

Valew;


GOSTEI 0
Paullsoftware

Paullsoftware

12/09/2007

Você quer dizer níveis de permissão. Eu uso. Na tabela de cadastro de usuários eu crio campos para isso de acordo com o número de menus criados. Quando o usuário é cadastrado, o administradro marca os checks qu epossuem a inscrição do que ele pode acessar, ou desmarca o que não pode. Isso fica gravado na tabela. Quando o usuário loga, o sistema precisa reconhecê-lo para autenticá-lo e, nesta verificação, o sistema habilita os menus de acordo com as permissões condecidas. É mais ou menos assim: o menu financeiro só habilita se a coluna p4 do usuário for iguala a 1, senão fica desabilitada. Para isso você deve criar uma função, senão vai encher de if, then e else. Valew;

amigo desculpa se meter assim na sua resposta, mais teria como enviar um exemplo que como você fez?? estou tentando implementar no meu sistema exatamente isso mais até agora o máximo que consigo é cadastrar os menus dentra da tabela dinamicamente... desde já agradeço amigo! :wink:


GOSTEI 0
Rjun

Rjun

12/09/2007

A minha dúvida está no seguinte: tenho 3 tabelas: DIREITO, USUARIO e LINKUSUARIODIREITO.

Na tabela que faz a ligação está o código do usuário, código do direito e um campo que indica se o usuário tem ou não direito. Alguem faz algo parecido com isso? Imagine que alguem consiga acesso a tabela e altere o valor das permissões. Isso com certeza não seria bom. Criptografar um campo que indica TRUE ou FALSE também não parece ser muito eficiente. Qual seria o caminho?


GOSTEI 0
Paulo

Paulo

12/09/2007

RJun, na tabela Usuario, voce vai gravar o nome e a senha do usu. Nesta tabela, eu usaria criptografia, pois o usu só será validado com o login e a senha, então se alguem alterasse na mão, teria problemas para criptografar, pois ele precisaria conhecer o algoritmo criptográfico. Depois, em outra tabela, você guardaria os menus. Cada menu terá um ID e na outra tabela(chamaria de conta ou algo parecido), voce teria o ID do usu e o ID do menu(permissão). No momento da validação a sua query iria ver na tabela de usu se aquele usu existe com aquela senha e na tabela conta verificar que nível ou permissão ele teria, para buscar na tabela menu os menus a que ele teria direito. Vale para menus suspensos ou mesmo para TreeView.


GOSTEI 0
Rjun

Rjun

12/09/2007

Na verdade, o que quero não sao direitos para ´Menu´. Imagine por exemplo um PDV. E tem a função de Suprimento. Antes de chamar o método de suprimento, devo verificar se o usuário tem direito. Se não tem uma tela pedindo um usuário e senha de alguem que tenha direito é exibida. O problema é a tabela de direito. Ela tem o código do usuario, código do direito e o estado desse direito.

IdUsuario    IdDireito     Estado
   0001            0001          1


O problema é que se algum usuário tenha acesso a essa tabela, ele pode modiciar o valor da coluna Estado. Criptografar essa coluna não parece ser uma boa ideia, pois seria fácil descriptografar.

Estou utilizando SQL Server e normalmente os clientes tem a senha do SA do banco.


GOSTEI 0
Rjun

Rjun

12/09/2007

up


GOSTEI 0
Rodolfo.pirolo

Rodolfo.pirolo

12/09/2007

Rogerio,

Para resolver este problema estou utilizando o componente User Control.

Já deve ter ouvido falar dele.

www.usercontrol.net

Rodolfo


GOSTEI 0
Paullsoftware

Paullsoftware

12/09/2007

Rogerio, Para resolver este problema estou utilizando o componente User Control. Já deve ter ouvido falar dele. www.usercontrol.net Rodolfo
não acho legal ficar dependendo de componentes de terceiros...


GOSTEI 0
Brjedi

Brjedi

12/09/2007

Você pode estudar o componente e pegar as idéias.

´Na informática nada se cria, tudo se copia´

[]s,


GOSTEI 0
Delphi32

Delphi32

12/09/2007

Rjun, eu desenvolvi o meu código baseado no código do UserControl.
Na tabela de direitos eu gravo apenas o que o usuário pode fazer. Quer dizer, o que o usuário não pode fazer eu não gravo na tabela.
Nessa tabela, assim como você, tenho o campo código do usuário, código do que está sendo permitido e mais uma chave criptográfica. Essa chave criptográfica é que valida se o usuário tem realmente acesso àquela opção ou se a tabela foi modificada. Para gerar a chave eu não pego simplesmente um True ou False. A chave é gerada em cima de uma string composta por vários códigos. Por exemplo: no campo da chave você pode gravar o hash md5 da seguinte string:
CODIGO_DO_USUARIO+CODIGO_PERMISSAO. Dessa forma, o usuário até pode mudar o campo código de usuário para o código dele, mas a chave não vai bater. E como eu só tenho na tabela o que ele pode fazer, fica tudo certo. Qualquer coisa, posta aí. Tô voltando hoje ao fórum...

t+!


GOSTEI 0
Delphi32

Delphi32

12/09/2007

nossa.... desculpem por levantar esse ´defunto´...
mas achei o tópico no pesquisar e achei que estava vendo o índice do fórum... pelo tempo você até já resolveu o problema, não é?

t+!


GOSTEI 0
POSTAR