30% OFF para compra e renovaÇÃo. Comprar agora

Autor Tópico: RESOLVIDO: filtro por grupos  (Lida 996 vezes)

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
RESOLVIDO: filtro por grupos
« Online: Janeiro 16, 2018, 09:06:11 pm »
Olá a todos!
Tenho uma aplicação onde vinculo usuário a um município na tabela do banco de dados (postgresql) criando uma variável global no login, isso usando segurança por grupos. Até ai tudo bem, gero aplicação de consulta (grid) com WHERE relacionada a variável global e o usuário só acessa os dados de seu município. Acontece q para que funcionários da empresa ou administradores possam acessar tenho q criar aplicações diferentes para cada grupo. Gostaria de saber se alguém já desenvolveu algo que através da mesma aplicação o usuário acesse os dados somente do seu município, os administradores acessem de todos.
Procurei nos fóruns e não encontrei uma solução.
att
« Última modificação: Janeiro 21, 2018, 08:45:51 am por inaciofuhr »

Haroldo

  • Expert
  • *****
  • Mensagens: 8337
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:filtro por grupos
« Responder #1 Online: Janeiro 16, 2018, 09:10:31 pm »
assim como guarda o login em global guarde uma  global para o status do usuário (administrador ou normal).

com um if vc monta o conteúdo where conforme o status do usuario:

 

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
Re:filtro por grupos
« Responder #2 Online: Janeiro 20, 2018, 06:06:29 am »
Olá novamente
Haroldo e demais
segue abaixo códigos do login (evento onvalidate) e da grid  para a consulta, se o usuário é do grupo 2 ele traz os dados somente do seu município, mas se o usuário é do grupo 1 (administrador, onde deveria trazer os dados de todos os municipios) ocorre erro. Onde estou errando ou onde deveria usar o if?

//login (onvalidate):

$slogin = sc_sql_injection({login});
$spswd = sc_sql_injection(md5({pswd}));


   $sql = "SELECT
    seg_gruposusers.priv_admin,
    seg_gruposusers.active,
    seg_gruposusers.name,
    seg_gruposusers.email,
   seg_gruposusers.login,
   seg_gruposusers_groups.login,
   seg_gruposusers_groups.group_id
    FROM  public.seg_gruposusers, public.seg_gruposusers_groups   
    WHERE  seg_gruposusers.login = seg_gruposusers_groups.login
    AND seg_gruposusers.login = $slogin
    AND seg_gruposusers.pswd = ".$spswd."";
   
sc_lookup(rs, $sql);
         
if(count({rs}) == 0)
{
   sc_log_add('login Fail', {lang_login_fail} . {login});
   sc_error_message({lang_error_login});
}
else if({rs[0][1]} == 'Y')
{
   $usr_login      = {login};
   $usr_priv_admin = ({rs[0][0]} == 'Y') ? TRUE : FALSE;
   $usr_group      = {rs[0][6]};
   $usr_name      = {rs[0][2]};
   
   switch ($usr_group){
      case 2:
         //USUÁRIO DOS MUNICIPIOS
         $sql2 = "
         SELECT
           login_municipio,
           municipio_id
         FROM
            login_x_municipio_id
         WHERE login_municipio = '".$usr_login."'";   
         sc_lookup(rs2, $sql2);
      
         //$usr_name      = {rs2[0][1]};
         $login_municipio      = {rs2[0][0]};
         $municipio_id         = {rs2[0][1]};
         sc_set_global($municipio_id);
            
        break;
      
      default:
         //$usr_name      = {rs[0][2]};
         $usr_email      = {rs[0][3]};
         $usr_group      = {rs[0][4]};
        break;
       
     }
      
   sc_set_global($usr_login);
   sc_set_global($usr_priv_admin);
   sc_set_global($usr_name);
   sc_set_global($usr_email);
   sc_set_global($usr_group);
}
else
{
   sc_error_message({lang_error_not_active});
   sc_error_exit();
}






// SQL da grid de consulta:
SELECT
    id_ppr,
    ppr_ncm,
    ppr_descricao,
    ppr_cfop,
    ppr_quantidade,
    ppr_unidade,
    ppr_valor_bruto,
    ppr_opracao_nfe,
    ppr_situacao_nfe,
    ppr_data_nfe,
    ppr_ie_emitente,
    ppr_uf_emitente,
    ppr_ie_destinatario,
    ppr_modelo_df,
    ppr_serie_nfe,
    ppr_nfe,
    ppr_total_nfe,
    ppr_situacao_aim,
    ppr_chave_acesso,
    ppr_municipio_id,
    ppr_ano,
    "ppr_data_lancamento"
FROM
    ppr_anual
WHERE
ppr_municipio_id = [municipio_id]

Haroldo

  • Expert
  • *****
  • Mensagens: 8337
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:filtro por grupos
« Responder #3 Online: Janeiro 20, 2018, 10:41:20 am »
Utilize where dinâmico nas Grids
Sc_select_where(add)

Não fixe a cláusula Where nos select principais das aplicações
« Última modificação: Janeiro 21, 2018, 02:07:51 pm por Haroldo »

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
Re:filtro por grupos
« Responder #4 Online: Janeiro 21, 2018, 08:44:21 am »
Valeu Haroldo.
Verifiquei q estava errando em coisas básicas, resolvi pelo lookup do campo do filtro (já que está é a inicial da minha aplicação) relacionando o login do usuário com o municipio.
Grato
Abraços