JL
Implementação de permissões de usuários por ações
Boa tarde.
Pessoal estamos sentindo a necessidade de começarmos a modelar alguma coisa que gerencie permissões ao usuários por ações.
Alguém aqui já está implementando algo do tipo? Estamos com algumas sugestões de ideias mas ainda muito obscuro. Gostaria de trocar uma ideia para saber melhor sobre e como estão fazendo. Desde já agradeço a atenção, abraço!
Pessoal estamos sentindo a necessidade de começarmos a modelar alguma coisa que gerencie permissões ao usuários por ações.
Alguém aqui já está implementando algo do tipo? Estamos com algumas sugestões de ideias mas ainda muito obscuro. Gostaria de trocar uma ideia para saber melhor sobre e como estão fazendo. Desde já agradeço a atenção, abraço!
Veja se ajuda:
https://www.adianti.com.br/forum/pt/view_914?templateerp-permissoes-de-acesso-to
João, boas.
O que você esta querendo e muitos também (risos), não eh nenhum bicho de sete cabeças, e por incrível que pareça temos
praticamente 50% pronto. Então vamos la:
Filtro 1 - Nos já temos o relacionamento o que cada usuário pode acessar ou seja ( programas e grupos ).
Filtro 2 - Criar uma tabela de Direitos ( id, direito ) ( Incluir, Alterar, Excluir, Relatorio etc )
Filtro 3 - Criar tabela de Relacionamento ( id Usuario, id programas, id direito, flag ) "FLAG" ( 1 e 2 compatibilidade com TCombo e etc );
Mudar Tela de Usuário e adicionar a Tabela de Relacionamento acima.
Criar uma função ou classe para trazer as informações necessárias referente a tela que o usuário esta acessando, uma vez que dentro
da tela temos as informações do Usuário TSession::getValue('login') e também da Classe __CLASS__.
Cada botão tem o paramentro setDisplayCondition e assim aplicarmos a regra cima.
Pronto, nada complicado..
Espero ter ajudado você e muitos outros..
Att;
Adcionando..
A tabela de Direito tem que ser Unique (id Usuario, id Usuario, id programas, id direito )
Esta tabela ela pode ser mais simples ainda, onde se estiver cadastrado ali significa que "NAO PODE", ou seja
parte do principio que o usuário pode tudo.
Indo ainda mais longe podemos criar o mesmo para grupos, onde ao definir a classe que o grupo pode acessar,
podemos também definir os direitos deste grupo em relação as Classes, neste caso seria necessário criar uma
segunda tabela de relacionamento (id grupo, id programa, id direito, flag ).
Att.
Correcao:
A tabela de Direito tem que ser Unique (id Usuario, id programa, id direito )
Blz, Marcos.
Então essa ideia aqui já estava no gatilho, pois eu já fiz dessa forma em outro sistema que eu tinha. A unica chateação e de estar mapeando Ação de forma manual, ou seja toda vez que precisarmos criar uma nova ação temos que ir na tabela incluir essa ação e fazer os relacionamentos, isso se torna as vezes massante, porém funciona.
Para solucionar algo do tipo, em preparar um rotina de programação onde podemos ler uma classe de controle e verificar os métodos que tenham inicio com 'on' exemplo: onDelete, onSave e a partir dai capturar esses métodos e jogar para a tabela direitos.
O que acha?
João, boas
O cadastro de Usuários e sempre chato e esta dentro das configurações do Sistema, geralmente se cobra por isso, principalmente se tratando de direitos.
No entanto se você partir para o Grupo ai o trabalho será bem menor, basta você determinar qual o grupo ele entra e pronto.
Acho que você não entendeu:
Na tabela direito só vai existir únicos ( EXCLUIR, EDITAR, NOVO, RELATÓRIO etc... )
Na tabela Relacionamento quando você criar os grupos e relaciona-los as Classe de Programas, ali você já determina o que o grupo pode fazer nas classes.
Classe Caixa - Botões ( NOVO, ESTORNO )
Grupo - Operadora de Caixa - ( NOVO )
Grupo - Fiscal de Caixa - ( NOVO, ESTORNO )
Dentro da Classe Caixa você determina se o Botão NOVO para aquele usuário esta habilitado ou não
Dentro da Classe Caixa você determina se o Botão ESTORNO para aquele usuário esta habilitado ou não
Na minha experiencia eu sempre partia do ponto de que ele não tem direito a nada, assim fica mais fácil
conciliar grupo e dentro do grupo usuários com direitos exclusivos, dando a ele direitos específicos.
Você pode até estender isso a campos, Habilitados ou não.
Desculpa, não respondi a sua pergunta..
Repondendo - Acho muito arriscado, tratando de DIREITOS devemos ser sempre céticos, e nunca deve existir um LIKE.
Lembre-se que por mais regras que exista, determinações, conselhos e outras coisas mais as coisas no dia a dia sempre escapam do controle.
Entendi.
Já planejamos aqui, vamos tentar a implementação de mapeamento do métodos da classe através do annotation onde vamos definir se o método irá ser mapeado ou não. Através desse mapeamento vamos alimentar uma tabela do banco de dados chamado 'Função', esse vai ser feito na hora que o usuário cadastrar o programa apontando para um controller, e estamos reescrevendo um método TActionPermissao, onde sempre vamos consultar se usuário logado tem a permissão. Enfim vamos fazer esse teste dependendo vamos passar o feedback aqui.
Marcos agradeço sua atenção.
Olá João, beleza?
Estou implementando as permissões no meu projeto, achei interessante sua ideia... você conseguiu implementar está solução?
att,
Marcelo