Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Proteger o usuário admiin Pessoal gostaria de ajuda para proteger o usuário admin de alteração e exclusão por parte de outros usuários que não seja o próprio usuário admin. Tentei ocultar o mesmo mas sem sucesso. Alguém ajuda ai?...
PS
Proteger o usuário admiin  
Pessoal gostaria de ajuda para proteger o usuário admin de alteração e exclusão por parte de outros usuários que não seja o próprio usuário admin. Tentei ocultar o mesmo mas sem sucesso. Alguém ajuda ai?

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 (27)


MG

Eu particularmente criei um novo atributo na tabela system_user chamado "priv_admin".
Nas listas de usuário, não sendo o próprio admin, ou seja, priv_admin = 'Y',ele não é exibido.
Resolvi assim. Ah, esse atributo é setado diretamente no BD.
PS

Marcelo, pode mostrar o trecho do código onde fez essa alteração por gentileza?
MG

Depois de adicionado o atributo no BD e no model, vc deve colocar a variável na session

LoginForm
  1. <?php
  2. public function onLogin ($param)
  3. {
  4.     ...
  5.     TSession::setValue('privadmin',$user->priv_admin);
  6.     ...
  7. }
  8. ?>


No SystemUserList, coloque nos botões de editar excluir uma condição:

  1. <?php
  2. $action1->setDisplayCondition( array($this'displayAction') );
  3. public function displayAction($param)
  4. {
  5.      $result TRUE;
  6.      $priv_admin TSession::getValue('privadmin');
  7.      if ($priv_admin == 'N') {
  8.          $result FALSE;
  9.      }
  10.      return $result;
  11. }
  12. ?>


Portando se o usuário logado for priv_admin = 'Y' ele poderá editar ou excluir, senão, os botões serão inibidos.
PS

Marcelo, me desculpe por mais uma vez chamando por você, é que sou iniciante no Adianti Studio e só não consigo colocar código no arquivo SystemUserList. Poderia mostrar onde colocou esse código por gentileza?

  1. <?php
  2. $action1->setDisplayCondition( array($this'displayAction') );
  3. public function displayAction($param)
  4. {
  5.      $result TRUE;
  6.      $priv_admin TSession::getValue('privadmin');
  7.      if ($priv_admin == 'N') {
  8.          $result FALSE;
  9.      }
  10.      return $result;
  11. }
  12. ?>

MG

Paulo, vamos lá!

No final do SystemUserList crie o metodo acima (displayAction).

No controle SystemUserList existem 3 botões, associados à datagrid responsáveis pelas áções de editar, excluir ou trocar o status, Basta após a inserção deles na datagrid, adicionar os códigos abaixo:
  1. <?php
  2.         ...     
  3.         $action_edit->setDisplayCondition([$this,'displayAction']);
  4.         ...
  5.         $action_del->setDisplayCondition([$this,'displayAction']);
  6.        ....
  7.    
  8.         $action_onoff->setDisplayCondition([$this,'displayAction']);
  9. ?>

PS

Marcelo não estou conseguindo, pode enviar o código do seu SystemUserList ?
PS

Marcelo, desculpe-me, na realidade eu queria somente esconder o usuário admin da lista. Para que outro usuário ao logar, não o veja na grid.
MG

Paulo
Bem, agora uma um pouco de figura.
Eu sugiro então que você construa um novo controle.
LA

Boa Tarde Marcelo, desculpe te incomodar novamente com este tema.
Eu acredito que tenha entendido o que propôs, mas desta forma, os botoes não aparecem em nenhum registro da datragrid se o usuário logado não for o admin, certo?

O que preciso é que o único registro que não apareça os botões de alteração seja o do ADMIN. Você teria alguma orientação a me dar nesse caso?

O meu problema é que tenho um grupo chamado TI, onde os usuários pertencentes a ele, devem poder personificar-se como outros usuários, para testes e manutenções. Porem, ninguém poderia personificar o admin, pois lhe daria um acesso muito maior que não lhe é permitido.

Desde já agradeço.
Aproveito para agradecer, pois sua colaboração com o fórum vem me ajudando muito.
MG

Livea, não tem problema. Estamos aqui para ajudar.

Pergunta 1: Sim, os botões são escondidos quando usuário for diferente de Admin.

Caso 2: O $param do display condition é o objeto da linha, ou seja, troque o $param por $object.
A partir dai vc terá acesso aos atributos da linha. No caso, você terá o $object->priv_admin da linha.
Caso ele seja "N", desabilite o botão. No caso você poderia verificar se o usuário logado é Admin e se for
e o object for um privadmin, habilita para edição.

Ajudei ou compliquei?
LA

Bom dia Marcelo.

Ajudou e muito, usei o object e funcionou perfeitamente.
Muito obrigada pelo retorno tão rapidamente e pela ajuda de sempre

Grata.
LA

Bom dia Marcelo.

Ajudou e muito, usei o object e funcionou perfeitamente.
Muito obrigada pelo retorno tão rapidamente e pela ajuda de sempre

Grata.
CM

Boa noite Marcelo.
Sei que o post é antigo, fiz exatamente como explicou a Livea, mas não funciona nem a pau. Ou exibe todos, ou nenhum botão.
Pior que uso a mesma função em outra lista (Financeiro) e funciona perfeitamente.

Eis meu código:

Para os botões da grid:
  1. <?php 
  2. // create DELETE action
  3.         $action_del = new TDataGridAction(array($this'onDelete'));
  4.         $action_del->setButtonClass('btn btn-default');
  5.         $action_del->setLabel(_t('Delete'));
  6.         $action_del->setImage('far:trash-alt red');
  7.         $action_del->setField('id');
  8.         $this->datagrid->addAction($action_del); 
  9.         $action_del->setDisplayCondition( array($this'displayAction') );
  10. ?>

Para a função.
  1. <?php 
  2. public function displayAction($object)
  3.     {
  4.         $result TRUE;
  5.         $priv_admin TSession::getValue('privadmin');
  6.         if ($priv_admin == 'N'
  7.         {
  8.           $result FALSE;
  9.         }
  10.           return $result;
  11.     }
  12. ?>
MG

Bom dia Cláudio. Quando você fala que usa em outro módulo e funciona, você está dizendo que a variável de sessão é a mesma?

Verifique se a variável de sessão tem algum conteúdo neste ponto. Utilize var_dump($priv_admin).
Você chegou a conferir se esta variável está recebendo o valor correto?
CM

Boa tarde Marcelo.
Uso em outra grid de financeiro, só que não com esta variável, uso assim.

  1. <?php 
  2. public function displayColumn$object )
  3.     {
  4.         if ($object->tipo_movimento_txt == "Receita" OR $object->tipo_movimento_txt == "Despesa" OR $object->tipo_movimento_txt == "Receita Loja")
  5.         {
  6.             return TRUE;
  7.         }
  8.         return FALSE;
  9.     }
  10. ?>


Mas com esse código que você postou, funciona só que oculta todos os botões quando Não é Admin e exibe todos os botões quando o user é Admin.
CM

Não sei bem como usar o var_dump($priv_admin).
Em que ponto tenho que colocar?
MG

Claudio
Coloque depois a atribuição e para ter certeza coloque um "exit" depois, assim.
Veja o que é exibido. O exit força o encerramento para ter certeza de ver o que foi impresso pelo var_dump.

  1. <?php
  2. public function displayAction($object)
  3.     {
  4.         $result TRUE;
  5.         $priv_admin TSession::getValue('privadmin');
  6.         var_dump($priv_admin); // =================> aqui
  7.         exit; ==================================> aqui
  8.         if ($priv_admin == 'N'
  9.         {
  10.           $result FALSE;
  11.         }
  12.           return $result;
  13.     }
  14. ?>
CM

Como eu disse antes, A variavel está trazendo o valor correto.

string(1) "Y"

Para Administrador e:

string(1) "N"

Para Não Administrador.


MG

Claudio
Se está tudo como disse, não tem por que não funcionar.
Poderia compartilhar o código para que eu possa tentar executar aqui?
CM

Boa tarde Marcelo. Segue.

LoginForm.class.php

  1. <?php 
  2. class LoginForm extends TPage
  3. {
  4.     protected $form// form
  5.     
  6.    
  7.     function __construct($param)
  8.     {
  9.         parent::__construct();
  10.         
  11.         $ini  AdiantiApplicationConfig::get();
  12.         
  13.         $this->style 'clear:both';
  14.         // creates the form
  15.         $this->form = new BootstrapFormBuilder('form_login');
  16.         $this->form->setFormTitle'LOG IN' );
  17.         
  18.         // create the form fields
  19.         $login = new TEntry('login');
  20.         $password = new TPassword('password');
  21.         
  22.         // define the sizes
  23.         $login->setSize('70%'40);
  24.         $password->setSize('70%'40);
  25.         $login->style 'height:35px; font-size:14px;float:left;border-bottom-left-radius: 0;border-top-left-radius: 0;';
  26.         $password->style 'height:35px;font-size:14px;float:left;border-bottom-left-radius: 0;border-top-left-radius: 0;';
  27.         
  28.         $login->placeholder _t('User');
  29.         $password->placeholder _t('Password');
  30.         
  31.         $login->autofocus 'autofocus';
  32.         $user   '<span class="login-avatar"><span class="fa fa-user"></span></span>';
  33.         $locker '<span class="login-avatar"><span class="fa fa-lock"></span></span>';
  34.         $unit   '<span class="login-avatar"><span class="fa fa-university"></span></span>';
  35.         $lang   '<span class="login-avatar"><span class="fa fa-globe"></span></span>';
  36.         
  37.         $this->form->addFields( [$user$login] );
  38.         $this->form->addFields( [$locker$password] );
  39.         
  40.         if (!empty($ini['general']['multiunit']) and $ini['general']['multiunit'] == '1')
  41.         {
  42.             $unit_id = new TCombo('unit_id');
  43.             $unit_id->setSize('70%');
  44.             $unit_id->style 'height:35px;font-size:14px;float:left;border-bottom-left-radius: 0;border-top-left-radius: 0;';
  45.             $this->form->addFields( [$unit$unit_id] );
  46.             $login->setExitAction(new TAction( [$this'onExitUser'] ) );
  47.         }
  48.         
  49.         if (!empty($ini['general']['multi_lang']) and $ini['general']['multi_lang'] == '1')
  50.         {
  51.             $lang_id = new TCombo('lang_id');
  52.             $lang_id->setSize('70%');
  53.             $lang_id->style 'height:35px;font-size:14px;float:left;border-bottom-left-radius: 0;border-top-left-radius: 0;';
  54.             $lang_id->addItems$ini['general']['lang_options'] );
  55.             $lang_id->setValue$ini['general']['language'] );
  56.             $lang_id->setDefaultOption(FALSE);
  57.             $this->form->addFields( [$lang$lang_id] );
  58.         }
  59.         
  60.         $btn $this->form->addAction(_t('Log in'), new TAction(array($this'onLogin')), '');
  61.         $btn->class 'btn btn-primary';
  62.         $btn->style 'height: 40px;width: 90%;display: block;margin: auto;font-size:17px;';
  63.         
  64.         $wrapper = new TElement('div');
  65.         $wrapper->style 'margin:auto; margin-top:100px;max-width:460px;';
  66.         $wrapper->id    'login-wrapper';
  67.         $wrapper->add($this->form);
  68.         
  69.         // add the form to the page
  70.         parent::add($wrapper);
  71.     }
  72.     
  73.     /**
  74.      * user exit action
  75.      * Populate unit combo
  76.      */
  77.     public static function onExitUser($param)
  78.     {
  79.         try
  80.         {
  81.             TTransaction::open('permission');
  82.             
  83.             $user SystemUser::newFromLogin$param['login'] );
  84.             if ($user instanceof SystemUser)
  85.             {
  86.                 $units $user->getSystemUserUnits();
  87.                 $options = [];
  88.                 
  89.                 if ($units)
  90.                 {
  91.                     foreach ($units as $unit)
  92.                     {
  93.                         $options[$unit->id] = $unit->name;
  94.                     }
  95.                 }
  96.                 TCombo::reload('form_login''unit_id'$options);
  97.             }
  98.             
  99.             TTransaction::close();
  100.         }
  101.         catch (Exception $e)
  102.         {
  103.             new TMessage('error',$e->getMessage());
  104.             TTransaction::rollback();
  105.         }
  106.     }
  107.     
  108.     /**
  109.      * Authenticate the User
  110.      */
  111.     public static function onLogin($param)
  112.     {
  113.         $ini  AdiantiApplicationConfig::get();
  114.         
  115.         try
  116.         {
  117.             $data = (object) $param;
  118.             
  119.             (new TRequiredValidator)->validate_t('Login'),    $data->login);
  120.             (new TRequiredValidator)->validate_t('Password'), $data->password);
  121.             
  122.             if (!empty($ini['general']['multiunit']) and $ini['general']['multiunit'] == '1')
  123.             {
  124.                 (new TRequiredValidator)->validate_t('Unit'), $data->unit_id);
  125.             }
  126.             
  127.             TSession::regenerate();
  128.             $user ApplicationAuthenticationService::authenticate$data->login$data->password );
  129.             
  130.              TSession::setValue('privadmin',$user->priv_admin);
  131.  
  132.             if ($user)
  133.             {
  134.                 ApplicationAuthenticationService::setUnit$data->unit_id ?? null );
  135.                 ApplicationAuthenticationService::setLang$data->lang_id ?? null );
  136.                 SystemAccessLogService::registerLogin();
  137.                 
  138.                 $frontpage $user->frontpage;
  139.                 if ($frontpage instanceof SystemProgram and $frontpage->controller)
  140.                 {
  141.                     AdiantiCoreApplication::gotoPage($frontpage->controller); // reload
  142.                     TSession::setValue('frontpage'$frontpage->controller);
  143.                 }
  144.                 else
  145.                 {
  146.                     AdiantiCoreApplication::gotoPage('EmptyPage'); // reload
  147.                     TSession::setValue('frontpage''EmptyPage');
  148.                 }
  149.             }
  150.             TTransaction::close();
  151.         }
  152.         catch (Exception $e)
  153.         {
  154.             new TMessage('error',$e->getMessage());
  155.             TTransaction::rollback();
  156.         }
  157.     }
  158.     
  159.     /** 
  160.      * Reload permissions
  161.      */
  162.     public static function reloadPermissions()
  163.     {
  164.         try
  165.         {
  166.             TTransaction::open('permission');
  167.             $user SystemUser::newFromLoginTSession::getValue('login') );
  168.             
  169.             if ($user)
  170.             {
  171.                 $programs $user->getPrograms();
  172.                 $programs['LoginForm'] = TRUE;
  173.                 TSession::setValue('programs'$programs);
  174.                 
  175.                 $frontpage $user->frontpage;
  176.                 if ($frontpage instanceof SystemProgram AND $frontpage->controller)
  177.                 {
  178.                     TApplication::gotoPage($frontpage->controller); // reload
  179.                 }
  180.                 else
  181.                 {
  182.                     TApplication::gotoPage('EmptyPage'); // reload
  183.                 }
  184.             }
  185.             TTransaction::close();
  186.         }
  187.         catch (Exception $e)
  188.         {
  189.             new TMessage('error'$e->getMessage());
  190.         }
  191.     }
  192.     
  193.     /**
  194.      *
  195.      */
  196.     public function onLoad($param)
  197.     {
  198.     }
  199.     
  200.     /**
  201.      * Logout
  202.      */
  203.     public static function onLogout()
  204.     {
  205.         SystemAccessLogService::registerLogout();
  206.         TSession::freeSession();
  207.         AdiantiCoreApplication::gotoPage('LoginForm''');
  208.     }
  209.     public function onClear$param )
  210.     {
  211.          $this->form->clear(TRUE);  
  212.     }
  213. }
  214. ?>


SystemUSerLis.class.php

  1. <?php 
  1. <?php
  2. class SystemUserList extends TStandardList
  3. {
  4.     protected $form;     // registration form
  5.     protected $datagrid// listing
  6.     protected $pageNavigation;
  7.     protected $formgrid;
  8.     protected $deleteButton;
  9.     protected $transformCallback;
  10.     
  11.     
  12.     public function __construct()
  13.     {
  14.         parent::__construct();
  15.         
  16.         parent::setDatabase('permission');            // defines the database
  17.         parent::setActiveRecord('SystemUser');   // defines the active record
  18.         parent::setDefaultOrder('id''asc');         // defines the default order
  19.         parent::addFilterField('id''=''id'); // filterField, operator, formField
  20.         parent::addFilterField('name''like''name'); // filterField, operator, formField
  21.         parent::addFilterField('email''like''email'); // filterField, operator, formField
  22.         parent::addFilterField('active''=''active'); // filterField, operator, formField
  23.         
  24.         // creates the form
  25.         $this->form = new BootstrapFormBuilder('form_search_SystemUser');
  26.         $this->form->setFormTitle(_t('Users'));
  27.         
  28.         // create the form fields
  29.         $id = new TEntry('id');
  30.         $name = new TEntry('name');
  31.         $email = new TEntry('email');
  32.         $active = new TCombo('active');
  33.         
  34.         $active->addItems( [ 'Y' => _t('Yes'), 'N' => _t('No') ] );
  35.         
  36.         // add the fields
  37.         //$this->form->addFields( [new TLabel('Id')], [$id] );
  38.         $this->form->addFields( [new TLabel(_t('Name'))], [$name] );
  39.         //$this->form->addFields( [new TLabel(_t('Email'))], [$email] );
  40.         //$this->form->addFields( [new TLabel(_t('Active'))], [$active] );
  41.         
  42.         $id->setSize('30%');
  43.         $name->setSize('70%');
  44.         $email->setSize('70%');
  45.         $active->setSize('70%');
  46.         
  47.         // keep the form filled during navigation with session data
  48.         $this->form->setDataTSession::getValue('SystemUser_filter_data') );
  49.         
  50.         // add the search form actions
  51.         $btn $this->form->addAction(_t('Find'), new TAction(array($this'onSearch')), 'fa:search');
  52.         $btn->class 'btn btn-sm btn-primary';
  53.         $this->form->addAction(_t('New'),  new TAction(array('SystemUserForm''onEdit')), 'fa:plus green');
  54.         
  55.         // creates a DataGrid
  56.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  57.         //$this->datagrid->datatable = 'true';
  58.         $this->datagrid->style 'width: 100%';
  59.         $this->datagrid->setHeight(320);
  60.         
  61.         // creates the datagrid columns
  62.         $column_id = new TDataGridColumn('id''Id''center'50);
  63.         $column_name = new TDataGridColumn('name'_t('Name'), 'left');
  64.         $column_login = new TDataGridColumn('login'_t('Login'), 'left');
  65.         $column_email = new TDataGridColumn('email'_t('Email'), 'left');
  66.         $column_active = new TDataGridColumn('active'_t('Active'), 'center');
  67.         
  68.         $column_login->enableAutoHide(500);
  69.         $column_email->enableAutoHide(500);
  70.         $column_active->enableAutoHide(500);
  71.         // add the columns to the DataGrid
  72.         $this->datagrid->addColumn($column_id);
  73.         $this->datagrid->addColumn($column_name);
  74.         $this->datagrid->addColumn($column_login);
  75.         $this->datagrid->addColumn($column_email);
  76.         $this->datagrid->addColumn($column_active);
  77.         $column_active->setTransformer( function($value$object$row) {
  78.             $class = ($value=='N') ? 'danger' 'success';
  79.             $label = ($value=='N') ? _t('No') : _t('Yes');
  80.             $div = new TElement('span');
  81.             $div->class="label label-{$class}";
  82.             $div->style="text-shadow:none; font-size:12px; font-weight:lighter";
  83.             $div->add($label);
  84.             return $div;
  85.         });
  86.         
  87.         // creates the datagrid column actions
  88.         $order_id = new TAction(array($this'onReload'));
  89.         $order_id->setParameter('order''id');
  90.         $column_id->setAction($order_id);
  91.         
  92.         $order_name = new TAction(array($this'onReload'));
  93.         $order_name->setParameter('order''name');
  94.         $column_name->setAction($order_name);
  95.         
  96.         $order_login = new TAction(array($this'onReload'));
  97.         $order_login->setParameter('order''login');
  98.         $column_login->setAction($order_login);
  99.         
  100.         $order_email = new TAction(array($this'onReload'));
  101.         $order_email->setParameter('order''email');
  102.         $column_email->setAction($order_email);
  103.         
  104.         // create EDIT action
  105.         $action_edit = new TDataGridAction(array('SystemUserForm''onEdit'));
  106.         $action_edit->setButtonClass('btn btn-default');
  107.         $action_edit->setLabel(_t('Edit'));
  108.         $action_edit->setImage('far:edit blue');
  109.         $action_edit->setField('id');
  110.         $this->datagrid->addAction($action_edit);
  111.         $action_edit->setDisplayCondition( array($this'displayAction') );
  112.         // create DELETE action
  113.         $action_del = new TDataGridAction(array($this'onDelete'));
  114.         $action_del->setButtonClass('btn btn-default');
  115.         $action_del->setLabel(_t('Delete'));
  116.         $action_del->setImage('far:trash-alt red');
  117.         $action_del->setField('id');
  118.         $this->datagrid->addAction($action_del); 
  119.         $action_del->setDisplayCondition( array($this'displayAction') );
  120.         // create CLONE action
  121.         $action_clone = new TDataGridAction(array($this'onClone'));
  122.         $action_clone->setButtonClass('btn btn-default');
  123.         $action_clone->setLabel(_t('Clone'));
  124.         $action_clone->setImage('far:clone green');
  125.         $action_clone->setField('id');
  126.         $this->datagrid->addAction($action_clone);
  127.         $action_clone->setDisplayCondition( array($this'displayAction') );
  128.         // create ONOFF action
  129.         $action_onoff = new TDataGridAction(array($this'onTurnOnOff'));
  130.         $action_onoff->setButtonClass('btn btn-default');
  131.         $action_onoff->setLabel(_t('Activate/Deactivate'));
  132.         $action_onoff->setImage('fa:power-off orange');
  133.         $action_onoff->setField('id');
  134.         $this->datagrid->addAction($action_onoff);
  135.         $action_onoff->setDisplayCondition( array($this'displayAction') );
  136.         // create ONOFF action
  137.         $action_person = new TDataGridAction(array($this'onImpersonation'));
  138.         $action_person->setButtonClass('btn btn-default');
  139.         $action_person->setLabel(_t('Impersonation'));
  140.         $action_person->setImage('far:user-circle gray');
  141.         $action_person->setFields(['id','login']);
  142.         $this->datagrid->addAction($action_person);
  143.         $action_person->setDisplayCondition( array($this'displayAction') );
  144.         // create the datagrid model
  145.         $this->datagrid->createModel();
  146.         
  147.         // create the page navigation
  148.         $this->pageNavigation = new TPageNavigation;
  149.         $this->pageNavigation->enableCounters();
  150.         $this->pageNavigation->setAction(new TAction(array($this'onReload')));
  151.         $this->pageNavigation->setWidth($this->datagrid->getWidth());
  152.         
  153.         $panel = new TPanelGroup;
  154.         $panel->add($this->datagrid)->style 'overflow-x:auto';
  155.         $panel->addFooter($this->pageNavigation);
  156.         
  157.         // header actions
  158.         $dropdown = new TDropDown(_t('Export'), 'fa:list');
  159.         $dropdown->setPullSide('right');
  160.         $dropdown->setButtonClass('btn btn-default waves-effect dropdown-toggle');
  161.         $dropdown->addAction_t('Save as CSV'), new TAction([$this'onExportCSV'], ['register_state' => 'false''static'=>'1']), 'fa:table fa-fw blue' );
  162.         $dropdown->addAction_t('Save as PDF'), new TAction([$this'onExportPDF'], ['register_state' => 'false''static'=>'1']), 'far:file-pdf fa-fw red' );
  163.         $dropdown->addAction_t('Save as XML'), new TAction([$this'onExportXML'], ['register_state' => 'false''static'=>'1']), 'fa:code fa-fw green' );
  164.         $panel->addHeaderWidget$dropdown );
  165.         
  166.         // vertical box container
  167.         $container = new TVBox;
  168.         $container->style 'width: 100%';
  169.         $container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  170.         $container->add($this->form);
  171.         $container->add($panel);
  172.         
  173.         parent::add($container);
  174.     }
  175.     public function displayAction($object)
  176.     {
  177.         $result TRUE;
  178.         $priv_admin TSession::getValue('privadmin');
  179.         //var_dump($priv_admin); // =================> aqui
  180.         //exit; //==================================> aqui
  181.         if ($priv_admin == 'N'
  182.         {
  183.           $result FALSE;
  184.         }
  185.           return $result;
  186.     }
  187.     
  188.     public function onTurnOnOff($param)
  189.     {
  190.         try
  191.         {
  192.             TTransaction::open('permission');
  193.             $user SystemUser::find($param['id']);
  194.             if ($user instanceof SystemUser)
  195.             {
  196.                 $user->active $user->active == 'Y' 'N' 'Y';
  197.                 $user->store();
  198.             }
  199.             
  200.             TTransaction::close();
  201.             
  202.             $this->onReload($param);
  203.         }
  204.         catch (Exception $e)
  205.         {
  206.             new TMessage('error'$e->getMessage());
  207.             TTransaction::rollback();
  208.         }
  209.     }
  210.     
  211.     /**
  212.      * Clone group
  213.      */
  214.     public function onClone($param)
  215.     {
  216.         try
  217.         {
  218.             TTransaction::open('permission');
  219.             $user = new SystemUser($param['id']);
  220.             $user->cloneUser();
  221.             TTransaction::close();
  222.             
  223.             $this->onReload();
  224.         }
  225.         catch (Exception $e)
  226.         {
  227.             new TMessage('error'$e->getMessage());
  228.             TTransaction::rollback();
  229.         }
  230.     }
  231.     
  232.     /**
  233.      * Impersonation user
  234.      */
  235.     public function onImpersonation($param)
  236.     {
  237.         try
  238.         {
  239.             TTransaction::open('permission');
  240.             TSession::regenerate();
  241.             $user SystemUser::validate$param['login'] );
  242.             ApplicationAuthenticationService::loadSessionVars($user);
  243.             SystemAccessLogService::registerLogin(true);
  244.             AdiantiCoreApplication::gotoPage('EmptyPage');
  245.             TTransaction::close();
  246.         }
  247.         catch (Exception $e)
  248.         {
  249.             new TMessage('error'$e->getMessage());
  250.             TTransaction::rollback();
  251.         }
  252.     }
  253. }
  254. ?>
MG

Claudio
Sua dúvida inicial foi ue estava ocultando todos os botões quando o usuário não era admin e exibia todos quando era admim.
Pelo que pude ver no seu código o comportamento está correto, pois você está chamando a mesma displayConditions em todos eles.
Não há problemas, está CORRETO!!!
Se deseja este comportamento em apenas um botão, somente neste vc deve chamar displayAction.
CM

Pois é amigo. Pelo visto não vai dar certo desta forma, porquê o usuário que não é admin pode editar dados de outros usuários.
Sendo desta forma, ele não faz nada, mesmo que eu use a função somente para um botão.

Na minha lista financeira, conforme imagem funciona perfeitamente.

Veja, ele oculta botão de exclusão quando o Tipo é "Receita Loja".

Mas quando não é, exibe os dois botões.
Dessa forma que seria interessante.

https://zeromeia.com/imagens/ERRO_BOTOES_LISTA_USER.png
MG

Claudio
Depende da sua regra.
Da forma que implementou está correto. Você está usando a mesma função pra todos.
Você já tentou criar uma função para cada botão?
CM

Concordo com você que da forma que está, funciona corretamente.
É uma hipótese criar uma função para cada botão.
Vou tentar.
CM

Não deu certo, porquê ele oculta somente um botão.
CM

Vou deixar de lado esse tema, tenho mais dois post no fórum para resolver.

Se você puder ajudar eu agradeço muito. Só falta isso pra finalizar o sistema.

https://www.adianti.com.br/forum/pt/view_6851?acentuacao-em-grid-do-mestre-detal

https://www.adianti.com.br/forum/pt/view_6822?confirmar-gravar-abrir-pdf-e-retor

Abraço Marcelo e obrigado por sua paciência e tempo em ajudar as pessoas.
MG

Claudio
Está um pouco confuso.
Mas o que exatamente você precisa?
Quais ações vc quer inibir e quais você quer exibir quando um usuário não é "admin"?