Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Controle de CRUD por acesso de usuário Pessoal, Gostaria de pedir uma ajuda sobre o controle de acesso do template, hoje temos o controle de unidade, controle da tela e grupos, porém precisava fazer uma adaptação que não estou conseguindo implementar, verifiquei esta possibilidade por sessão, más me parece que por tabela no banco seria o mais recomendado, então vamos lá, vou tentar explicar. Tenho um usuário onde ele lo...
AM
Controle de CRUD por acesso de usuário  
Pessoal,

Gostaria de pedir uma ajuda sobre o controle de acesso do template, hoje temos o controle de unidade, controle da tela e grupos, porém precisava fazer uma adaptação que não estou conseguindo implementar, verifiquei esta possibilidade por sessão, más me parece que por tabela no banco seria o mais recomendado, então vamos lá, vou tentar explicar.

Tenho um usuário onde ele loga no sistema, coloco este usuário em um determinado grupo para acessar tais telas e dentro de um grupo especifico, até ai o templante ja me fornece, bem tranquilo, porém ao dar acesso ao usuário na tela ele tem o acesso ao CRUD inteiro, no caso ele tendo acesso ele pode manipular toda a tela onde pode Adicionar, Editar, Excluir e visualizar, queria controlar essa ação onde no caso este usuário somente poderia ver a tela, outro somente editar, outro somente adicionar, ter uma regra nesses casos para cada usuário.

alguém ja implementou algo assim? podem me ajudar?

Desde já, agradeço.

Obrigado.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (4)


JS

Anderson,

Fiz uma implementação dessa, sendo que criei 2 tipos de Perfil em "Usuários",

Gerente - tem acesso a tudo
Técnico - apenas visualiza

No Login gravo o perfil do usuário na Session

e nos FormList verifico qual o perfil de usuário durante a criação dos botões de CRUD, desta forma desabilito o que quero dependendo do Perfil.

*** Criei um FormView com campo desabilitados para edição setEditable(FALSE), para os casos em que o usuário só pode visualizar (sem CRUD).

Veja se te ajuda!



Ex:

$perfil = TSession::getValue('perfil');

if ($perfil == 'G') {

// create EDIT action

$action_edit = new TDataGridAction(array('ClientesForm', 'onEdit'));

$action_edit->setButtonClass('btn btn-default');

$action_edit->setLabel('Alterar');

$action_edit->setImage('fa:pencil-square-o blue fa-lg');

$action_edit->setField('id');

$this->datagrid->addAction($action_edit);



// create DELETE action

$action_del = new TDataGridAction(array($this, 'onDelete'));

$action_del->setButtonClass('btn btn-default');

$action_del->setLabel('Excluir');

$action_del->setImage('fa:trash-o red fa-lg');

$action_del->setField('id');

$this->datagrid->addAction($action_del);

} else {

$action_view = new TDataGridAction(array('ClientesViewForm', 'onEdit'));

$action_view->setButtonClass('btn btn-default');

$action_view->setLabel('Visualizar');

$action_view->setImage('fa:search blue fa-lg');

$action_view->setField('id');

$this->datagrid->addAction($action_view);

}

AM

Amigão, boa tarde.

Muito obrigado pelo seu retorno e ajuda.

Bom vamos lá, isso que você menciona até tentei implementar, más teria que fazer uma fatia de tela, tipo lança a tela para o usuário conforme sua permissão, também usei a sessão buscando no BD a permissão dele, más depois acho que a manutenção fica ruim conforme vai aumentando as telas, ou eu que não estou entendendo, rsrs tem essa também, rsrs

Más vamos lá, estou tentando aqui o seguinte, sabe a tela de administração onde setamos os grupos? estou quebrando a cabeça aqui para tentar como algo parecido más nas telas, sendo assim seria um campo para setar conforme a permissão dentro do grupo a tela que foi atrelada, tipo uma opção Adicionar, Editar, Excluir, Listar, Importar, Exportar e Imprimir, assim sendo queria ver algo que colocasse este controle dentro da página, assim quando o usuário logar, automaticamente pegando as permissões as telas ja se comportariam conforme setadas.

Estou fazendo uma função aqui para verificar permissão, no caso eu crio um array para fazer um comparativo.

Tipo assim:

crio uma função onde ele verificar o id do usuário por parâmetro, assim ele faz uma consulta no banco de dados e traz o array setado dele, tipo oque ele pode fazer ou não.

Exemplo este array abaixo:

$acao = array();
$acao['create'] = "S";
$acao['read'] = "S";
$acao['update'] = "S";
$acao['delete'] = "S";
$acao['print'] = "S";
$acao['export'] = "S";
$acao['import'] = "S";

seria este retorno;

Array ( [create] => S [read] => S [update] => S [delete] => S [print] => S [export] => S [import] => S )

Array
(
[create] => S
[read] => S
[update] => S
[delete] => S
[print] => S
[export] => S
[import] => S
)

Obs: Cada "S" desses seria "SIM", no caso "N" seria não, fiz o exemplo acima somente com o "S".

Sendo assim, queria ver algo que iniciasse essa regra nas telas más tomando a ação conforme foi setada, na administração da página no grupo.

Não sei se consegui te explicar, más seria + ou - isso, se for fazer isso diretamente na unha até posso conseguir, más queria usar o adianti studio pela praticidade na geração das páginas, muito corrido para fazer do zero.

Más agradeço sua ajuda, muito obrigado, irei rever aqui os pontos mencionado por você.

seria muito show se o framework viesse com essa opção nativamente, ai seria show, más quem sabe!

Más valeu!
IM

Só uma idéia:

E Se fizerem uma classe básica para servir como REUSABLE.

Nela cria somente o básico e as actions ... já com implementação dos CRUDS desabilitando o botão conforme necessidade.

Aí todo novo form vc cria estendendo esse basico.
JS

Vamos lá Anderson,

Dei uma olhada com calma nas tabelas no BD

Existem 3 tabelas que você terá que utilizar:

1. system_user (usuários)
2. system_program (os form´s)
3. system_user_program (tabela que relaciona quais programas (form´s) cada usuário tem acesso)

Na tabela system_user_program você terá que criar os campos :

create
read
update
delete
print
export
import

* todos com tamanho string, 1 (contendo S ou N)

E depois você terá que criar uma tela para gerenciar essas informações para cada usuário (marcar quais opções cada um tem acesso no form)

E quando for criar os botões do datagrid verificar se o usuário tem acesso a cada opção do CRUD (vale fazer uma função que retorna a validação, passando como parametro o id do usuario e verificando na tabela system_user_program )

A grosso modo é isso a solução que você procura.

*** Não irá funcionar utilizando os grupos