Autor Tópico: Acesso a usuario por grupos - RESOLVIDO  (Lida 4227 vezes)

dellapiazza

  • Intermediário
  • ***
  • Mensagens: 172
    • Email
Acesso a usuario por grupos - RESOLVIDO
« Online: Outubro 09, 2012, 01:33:26 pm »
Estou com problema quando criando por exemplo 3 Grupos e dar acesso a 2 deles, o acesso é liberado apenas para o primeiro grupo defino para o usuário. Alguém poderia fazer um teste.

Obs. Aplicação de segurança criada pelo SC


Grato
André
« Última modificação: Maio 20, 2013, 10:48:46 pm por dellapiazza »
André Della Piazza
SC 8.1 / Win Server 2008 R2 / SQL Server 2014 Express

Bernhard

  • Administrator
  • Expert
  • *****
  • Mensagens: 1619
Re:Acesso a usuario por grupos
« Responder #1 Online: Outubro 11, 2012, 10:42:20 am »
Bom dia André,

Este problema vem acontecendo apenas com aplicações de controle, ou o problema está acontecendo independente do tipo de app?

att,
Bernhard Bernsmann

dellapiazza

  • Intermediário
  • ***
  • Mensagens: 172
    • Email
Re:Acesso a usuario por grupos
« Responder #2 Online: Outubro 12, 2012, 06:36:41 pm »
Bernhard, o problema esta ocorrendo com qualquer app.

Esta dando permissão apenas para o ultimo registro da tabela sec_users_groups.
Segue código (lembrando que esta app de segurança é gerada pelo próprio SC)


$sql = "SELECT app_name, priv_access, priv_insert, priv_delete, priv_update,
               priv_export, priv_print
         FROM dbo.sec_groups_apps
         WHERE group_id IN
               (SELECT group_id
               FROM dbo.sec_users_groups
               WHERE login = '". [usr_login] ."')";
      
sc_select(rs, $sql);
if ({rs} !== false)
{
   while (!$rs->EOF)
   {
      if( $rs->fields[1] == 'Y' ||
          $rs->fields[2] == 'Y' ||
          $rs->fields[3] == 'Y' ||
          $rs->fields[4] == 'Y' ||
          $rs->fields[5] == 'Y' ||
          $rs->fields[6] == 'Y')
      {
          sc_apl_status($rs->fields[0], 'on');
      }
      else
      {
          sc_apl_status($rs->fields[0], 'off');
      }

      sc_apl_conf($rs->fields[0], 'access', has_priv($rs->fields[1]));
      sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
      sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
      sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
      //export
      $export_permission = 'btn_display_'. has_priv($rs->fields[5]);
      sc_apl_conf($rs->fields[0], $export_permission, 'xls');
      sc_apl_conf($rs->fields[0], $export_permission, 'word');
      sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
      sc_apl_conf($rs->fields[0], $export_permission, 'xml');
      sc_apl_conf($rs->fields[0], $export_permission, 'csv');
      sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
      //export
      
      $export_permission = 'btn_display_'. has_priv($rs->fields[6]);
      sc_apl_conf($rs->fields[0], $export_permission, 'print');

      $rs->MoveNext();   
   }
   $rs->Close();
   
   sc_redir('mnu_Principal_SGI');   
}

Grato
André Della Piazza
SC 8.1 / Win Server 2008 R2 / SQL Server 2014 Express

Bernhard

  • Administrator
  • Expert
  • *****
  • Mensagens: 1619
Re:Acesso a usuario por grupos
« Responder #3 Online: Outubro 12, 2012, 07:56:16 pm »
Boa noite,

Reportei este problema para que nossa equipe de bugs.

att,
Bernhard Bernsmann

dellapiazza

  • Intermediário
  • ***
  • Mensagens: 172
    • Email
Re:Acesso a usuario por grupos
« Responder #4 Online: Maio 20, 2013, 10:16:22 am »
Bernhard, ainda não consigo dar permissão para um usuário, num sistema que tenha 2 grupos ou mais:
Por exemplo:

Grupos: Vendas, Faturamento e Financeiro

Se der permissão ao usuário nos grupos Faturamento e Financeiro, o SC libera apenas o Faturamento.
Estou tendo que dar permissão como admin (acessa todos os módulos).

Poderia verificar.
André Della Piazza
SC 8.1 / Win Server 2008 R2 / SQL Server 2014 Express

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Acesso a usuario por grupos
« Responder #5 Online: Maio 20, 2013, 10:27:07 am »
 
Código: [Selecionar]
   {
          sc_apl_status($rs->fields[0], 'on');
      }
      else
      {
          sc_apl_status($rs->fields[0], 'off');
      }

Creio que seu problema está nesta linha de código acima meu amigo. O que acontece, você libera uma app em um grupo já no outro grupo a mesma é bloqueada, então sempre pegará a definição do último grupo.

Oque terá que fazer, antes de comecar a validar usar o sc_reset_apl_status(), depois execute apenas a -> sc_apl_status($rs->fields[0], 'on');, liberando as apps liberadas e pois as outras estarão bloqueadas por padrão...

Espero ter lhe ajudado
« Última modificação: Maio 20, 2013, 10:28:43 am por Almeida »

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

saulobborges

  • Expert
  • *****
  • Mensagens: 1392
    • SGi Sistemas
    • Email
Re:Acesso a usuario por grupos
« Responder #6 Online: Maio 20, 2013, 11:21:29 am »
Código: [Selecionar]
   {
          sc_apl_status($rs->fields[0], 'on');
      }
      else
      {
          sc_apl_status($rs->fields[0], 'off');
      }

Creio que seu problema está nesta linha de código acima meu amigo. O que acontece, você libera uma app em um grupo já no outro grupo a mesma é bloqueada, então sempre pegará a definição do último grupo.

Oque terá que fazer, antes de comecar a validar usar o sc_reset_apl_status(), depois execute apenas a -> sc_apl_status($rs->fields[0], 'on');, liberando as apps liberadas e pois as outras estarão bloqueadas por padrão...

Espero ter lhe ajudado

Pra separar do jeito que você esta querendo você terá que mexer no esquema de segurança do SC, quando se fala em permissões por grupos no SC entende-se que se deve definir em cada grupo todas as aplicações que aquele determinado grupo terá acesso, não é pra separar Grupos de Aplicações e sim grupos de usuários.

Pra ter essa separação por grupos de aplicações você terá que criar pelo menos mais três tabelas pra conseguir relacionar aplicações com os grupos de aplicações e os grupos de aplicações aos grupos de usuários.

Confuso né..!! Mas só assim pra funcionar....

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Acesso a usuario por grupos
« Responder #7 Online: Maio 20, 2013, 01:07:41 pm »
No meu caso tenho o scritpcase usando a segurança que é gerada por ele, crio vários grupos, e funciona perfeitamente, só que em todos os grupos tem todas as app para serem liberadas ou não.

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

dellapiazza

  • Intermediário
  • ***
  • Mensagens: 172
    • Email
Re:Acesso a usuario por grupos
« Responder #8 Online: Maio 20, 2013, 02:34:34 pm »
Almeida, é exatamente o que estou fazendo (igual a você)
Este é o código que o SC esta gerando, você fez alguma alteração nele?

$sql = "SELECT
      app_name,
      priv_access,
      priv_insert,
      priv_delete,
      priv_update,
      priv_export,
      priv_print
         FROM dbo.sec_groups_apps
         WHERE group_id IN
             (SELECT
             group_id
         FROM
             dbo.sec_users_groups
         WHERE
             login = '". [usr_login] ."')";
      
sc_select(rs, $sql);

if ({rs} !== false)
{
   while (!$rs->EOF)
   {
      if( $rs->fields[1] == 'Y')
      {
          sc_apl_status($rs->fields[0], 'on');
      }
      else
      {
          sc_apl_status($rs->fields[0], 'off');
      }

      sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
      sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
      sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
      //export
      $export_permission = 'btn_display_'. has_priv($rs->fields[5]);
      sc_apl_conf($rs->fields[0], $export_permission, 'xls');
      sc_apl_conf($rs->fields[0], $export_permission, 'word');
      sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
      sc_apl_conf($rs->fields[0], $export_permission, 'xml');
      sc_apl_conf($rs->fields[0], $export_permission, 'csv');
      sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
      //export
      
      $export_permission = 'btn_display_'. has_priv($rs->fields[6]);
      sc_apl_conf($rs->fields[0], $export_permission, 'print');

      $rs->MoveNext();   
   }
   $rs->Close();
   if(sc_logged({login})):
      sc_log_add('login', {lang_login_ok});
      sc_user_logout('logged_user', 'logout', 'Login');
      sc_redir('mnu_Principal_SGI');   
   endif;
}
André Della Piazza
SC 8.1 / Win Server 2008 R2 / SQL Server 2014 Express

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Acesso a usuario por grupos
« Responder #9 Online: Maio 20, 2013, 09:25:59 pm »
dellapiazza, tente usar esse código que lhe informo abaixo, não o testei apenas fiz aqui mesmo usando minha lógica,
esse código apenas liberará aplicações, não bloqueia às, então todas as APPS tem que estar com segurança SIM no scriptcase,
as que tiverem com segurança NÃO serão liberadas. Se precisar de um código que bloqueie às faça uma lógica em cima dessa que lhe passei, qualquer coisa se precisar de ajuda estou aqui para tentar ajudar no que sei...


Código: [Selecionar]
sc_reset_apl_status();
sc_reset_apl_conf();

$sql = "SELECT
      app_name,
      priv_access,
      priv_insert,
      priv_delete,
      priv_update,
      priv_export,
      priv_print
         FROM dbo.sec_groups_apps
         WHERE group_id IN
             (SELECT
             group_id
         FROM
             dbo.sec_users_groups
         WHERE
             login = '". [usr_login] ."')";
     
sc_select(rs, $sql);

if ({rs} !== false)
{
   while (!$rs->EOF)
   {
      if($rs->fields[1] == 'Y')
      {
          sc_apl_status($rs->fields[0], 'on');
      }

  if(has_priv($rs->fields[2]) == "on"){
  sc_apl_conf($rs->fields[0], 'insert', "on");
  }
  if(has_priv($rs->fields[3]) == "on"){
  sc_apl_conf($rs->fields[0], 'delete', "on");
  }
  if(has_priv($rs->fields[4]) == "on"){
          sc_apl_conf($rs->fields[0], 'update', "on");
  }
      //export
  if(has_priv($rs->fields[5]) == "on"){
  $export_permission = 'btn_display_'. has_priv($rs->fields[5]);
  sc_apl_conf($rs->fields[0], $export_permission, 'xls');
  sc_apl_conf($rs->fields[0], $export_permission, 'word');
  sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
  sc_apl_conf($rs->fields[0], $export_permission, 'xml');
  sc_apl_conf($rs->fields[0], $export_permission, 'csv');
  sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
   }
      //export
      if(has_priv($rs->fields[6]) == "on"){
         $export_permission = 'btn_display_'. has_priv($rs->fields[6]);
         sc_apl_conf($rs->fields[0], $export_permission, 'print');
  }

      $rs->MoveNext();   
   }
   $rs->Close();
   if(sc_logged({login})):
      sc_log_add('login', {lang_login_ok});
      sc_user_logout('logged_user', 'logout', 'Login');
      sc_redir('mnu_Principal_SGI');   
   endif;
}

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

dellapiazza

  • Intermediário
  • ***
  • Mensagens: 172
    • Email
Re:Acesso a usuario por grupos
« Responder #10 Online: Maio 20, 2013, 10:47:10 pm »
Almeida, código APROVADO, funcionou perfeitinho.

Estava com este problema a muito tempo. MUITO OBRIGADO MESMO.....

Obrigado também ao nosso amigo Saulo.

Deus abençoe a todos.
André Della Piazza
SC 8.1 / Win Server 2008 R2 / SQL Server 2014 Express

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Acesso a usuario por grupos
« Responder #11 Online: Junho 21, 2013, 05:08:02 pm »
dellapiazza, tente usar esse código que lhe informo abaixo, não o testei apenas fiz aqui mesmo usando minha lógica,
esse código apenas liberará aplicações, não bloqueia às, então todas as APPS tem que estar com segurança SIM no scriptcase,
as que tiverem com segurança NÃO serão liberadas. Se precisar de um código que bloqueie às faça uma lógica em cima dessa que lhe passei, qualquer coisa se precisar de ajuda estou aqui para tentar ajudar no que sei...


Código: [Selecionar]
sc_reset_apl_status();
sc_reset_apl_conf();

$sql = "SELECT
      app_name,
      priv_access,
      priv_insert,
      priv_delete,
      priv_update,
      priv_export,
      priv_print
         FROM dbo.sec_groups_apps
         WHERE group_id IN
             (SELECT
             group_id
         FROM
             dbo.sec_users_groups
         WHERE
             login = '". [usr_login] ."')";
     
sc_select(rs, $sql);

if ({rs} !== false)
{
   while (!$rs->EOF)
   {
      if($rs->fields[1] == 'Y')
      {
          sc_apl_status($rs->fields[0], 'on');
      }

  if(has_priv($rs->fields[2]) == "on"){
  sc_apl_conf($rs->fields[0], 'insert', "on");
  }
  if(has_priv($rs->fields[3]) == "on"){
  sc_apl_conf($rs->fields[0], 'delete', "on");
  }
  if(has_priv($rs->fields[4]) == "on"){
          sc_apl_conf($rs->fields[0], 'update', "on");
  }
      //export
  if(has_priv($rs->fields[5]) == "on"){
  $export_permission = 'btn_display_'. has_priv($rs->fields[5]);
  sc_apl_conf($rs->fields[0], $export_permission, 'xls');
  sc_apl_conf($rs->fields[0], $export_permission, 'word');
  sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
  sc_apl_conf($rs->fields[0], $export_permission, 'xml');
  sc_apl_conf($rs->fields[0], $export_permission, 'csv');
  sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
   }
      //export
      if(has_priv($rs->fields[6]) == "on"){
         $export_permission = 'btn_display_'. has_priv($rs->fields[6]);
         sc_apl_conf($rs->fields[0], $export_permission, 'print');
  }

      $rs->MoveNext();   
   }
   $rs->Close();
   if(sc_logged({login})):
      sc_log_add('login', {lang_login_ok});
      sc_user_logout('logged_user', 'logout', 'Login');
      sc_redir('mnu_Principal_SGI');   
   endif;
}

Almeida, não entendi muito bem sua explicação.

Eu uso Grupos pelo código gerado no SC.. logo quando 1(um) usuario participa de 2(dois) grupos apenas um deles é liberado...
Fazendo essa modificação como tenho que comportar com as lberações de apps por grupo ? em todas as minhas app eu marquei SIm em segurança..
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Acesso a usuario por grupos - RESOLVIDO
« Responder #12 Online: Junho 21, 2013, 06:04:42 pm »
A segurança do SC até na versão que eu utilizei, estava executando a liberação dos grupos repetidamente, independente se estava liberando ou bloqueando. Então se você liberava uma app em um grupo e em outro bloqueava, prevalecia o útlimo.

Oque eu auxiliei nosso amigo a fazer foi verificar antes de cada liberação se erá uma liberaçao(on), se fosse liberava, se não fosse não fazia nada, deixava como esta.

Ex:
while(apps){
if($variavel == "on") //liberar
  //então libera a app;
}

Isso em liberar apps e liberar botões.
de uma analisada no código, qualquer coisa poste aqui seu código que dou uma olhada.

Abraco

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Acesso a usuario por grupos - RESOLVIDO
« Responder #13 Online: Agosto 28, 2013, 03:41:45 pm »
Almeida, desculpe-me a demora mas tive que parar um pouco por conta do nascimento de minhas gêmeas..

meu código está assim..

Código: [Selecionar]
sc_reset_apl_status();
sc_reset_apl_conf();
$sql = "SELECT
app_name,
priv_access,
priv_insert,
priv_delete,
priv_update,
priv_export,
priv_print
      FROM dbo.seguranca_groups_apps
      WHERE group_id IN
          (SELECT
       group_id
   FROM
       dbo.seguranca_users_groups
   WHERE
       login = '". [usr_login] ."')";


sc_select(rs, $sql);
if ({rs} !== false)
{
while (!$rs->EOF)
{
if( $rs->fields[1] == 'Y' ||
    $rs->fields[2] == 'Y' ||
    $rs->fields[3] == 'Y' ||
    $rs->fields[4] == 'Y' ||
    $rs->fields[5] == 'Y' ||
    $rs->fields[6] == 'Y')
{
    sc_apl_status($rs->fields[0], 'on');
}
else
{
    sc_apl_status($rs->fields[0], 'off');
}

sc_apl_conf($rs->fields[0], 'access', has_priv($rs->fields[1]));
sc_apl_conf($rs->fields[0], 'insert', has_priv($rs->fields[2]));
sc_apl_conf($rs->fields[0], 'delete', has_priv($rs->fields[3]));
sc_apl_conf($rs->fields[0], 'update', has_priv($rs->fields[4]));
//export
$export_permission = 'btn_display_'. has_priv($rs->fields[5]);
sc_apl_conf($rs->fields[0], $export_permission, 'xls');
sc_apl_conf($rs->fields[0], $export_permission, 'word');
sc_apl_conf($rs->fields[0], $export_permission, 'pdf');
sc_apl_conf($rs->fields[0], $export_permission, 'xml');
sc_apl_conf($rs->fields[0], $export_permission, 'csv');
sc_apl_conf($rs->fields[0], $export_permission, 'rtf');
//export

$export_permission = 'btn_display_'. has_priv($rs->fields[6]);
sc_apl_conf($rs->fields[0], $export_permission, 'print');

$rs->MoveNext();
}
$rs->Close();
if(sc_logged({login})):
sc_log_add('login', {lang_login_ok});
sc_user_logout('logged_user', 'logout', 'login_obras');
sc_redir('menu_obras');
endif;
}
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Acesso a usuario por grupos - RESOLVIDO
« Responder #14 Online: Agosto 28, 2013, 04:12:02 pm »
Usando esse exemplo que passei logo acima não funcionou no seu caso não?
Pois verificando seu código é igual ao anterior do nosso amigo.

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência