Skip to main content
Announcements
Qlik Connect 2025: 3 days of full immersion in data, analytics, and AI. May 13-15 | Orlando, FL: Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
RafaelTorquato
Contributor II
Contributor II

Visualização limitada conforme permissão

Bom dia,

Tenho uma desafio que está bem difícil resolver.
Possuo uma tabela com despesas por unidade, onde aquele um diretor responsável por elas. Do outro lado possuo uma com a Receita por Unidade. 

Preciso fazer limitações relacionadas ao Diretor.

Ex:
- Diretor Fulano, pode ver as Despesas da Unidade X e da Receita da Unidade X;

- Diretor Ciclano, pode ver as Despesas da Unidade Y e da Receita das Unidades X, Y e Z;

- Diretor Beltrano, pode ver as Despesas da Unidade Z e da Receita da Unidade Z;

Então pode acontecer do diretor ter acesso somente a uma Unidade de Despesa e acesso a demais Unidades de Receita.

Tem alguma forma de resolver isso? Tentei através do Section Access, mas não consegui usar duas colunas, somente com uma, mas ai a Receita acaba ficando toda liberada.

Labels (2)
1 Solution

Accepted Solutions
RafaelTorquato
Contributor II
Contributor II
Author

Bom dia,

Havia feito um ApplyMap do diretor para as despesas, então consigo vincular o nome do diretor com as despesas que ele pode visualizar.

Fiz da seguinte forma, antes do SectionAccess, criei uma tabela para cada diretor com uma chave e no where, limito o que a tabela daquele diretor vai trazer.

NoConcatenate
ACESSOS:
LOAD *,
    'CONSOLIDADO|CONSOLIDADO' AS CHAVESECTIONACCESS
    RESIDENT CONSOLIDADO;
    
    Concatenate
    
    LOAD * ,
    'RECEITACONSOLIDADO|FULANO' AS CHAVESECTIONACCESS 
    RESIDENT CONSOLIDADO Where DIRETORIA='FULANO' OR WildMatch(RECEITA,'*');
 
    Concatenate
    LOAD * ,
    'RECEITA X|CICLANO' AS CHAVESECTIONACCESS
    RESIDENT CONSOLIDADO WHERE DIRETORIA='CICLANO' OR WildMatch(RECEITA,'RECEITA X');
    
    Concatenate
    LOAD * ,
    'RECEITA Y|BELTRANO' AS CHAVESECTIONACCESS
    RESIDENT CONSOLIDADO WHERE DIRETORIA='BELTRANO' OR WildMatch(RECEITA,'RECEITA Y');
    
   e assim em diante até dar um DROP TABLE na minha tabela CONSOLIDADO.



 



View solution in original post

3 Replies
mageste
Partner - Contributor III
Partner - Contributor III

Olá!

Como você montou o script de Section Access? Consegue compartilhar aqui?

Eu pensei no seguinte: você pode criar no script de carga colunas relativas às somas de cada unidade, daí com isso consegue selecionar qual usuário vê qual com o Section Access.

Algo como " if(Unidade = A, Despesa, Null()) as Despesa_Unidade_A ", a mesma coisa para as demais unidades e a tabela de receita.

Daí o Section Access ficaria tipo: 

 

Section Access;

SecurityTable:
LOAD * INLINE [
ACCESS, USERID,  OMIT
USER, DOMINIO\Diretor_Fulano, Despesa_Unidade_A
USER, DOMINIO\Diretor_Fulano, Receita_Unidade_A
USER, DOMINIO\Diretor_Ciclano, Despesa_Unidade_B
USER, DOMINIO\Diretor_Ciclano, Receita_Unidade_B
USER, DOMINIO\Diretor_Ciclano, Despesa_Unidade_C
USER, DOMINIO\Diretor_Ciclano, Receita_Unidade_C
];

 

Pra parte dos visuais, usaria uma condição de cálculo pra cada coluna, e daí só mostraria as colunas de soma > 0, por exemplo.

 

RafaelTorquato
Contributor II
Contributor II
Author

Bom dia,

Havia feito um ApplyMap do diretor para as despesas, então consigo vincular o nome do diretor com as despesas que ele pode visualizar.

Fiz da seguinte forma, antes do SectionAccess, criei uma tabela para cada diretor com uma chave e no where, limito o que a tabela daquele diretor vai trazer.

NoConcatenate
ACESSOS:
LOAD *,
    'CONSOLIDADO|CONSOLIDADO' AS CHAVESECTIONACCESS
    RESIDENT CONSOLIDADO;
    
    Concatenate
    
    LOAD * ,
    'RECEITACONSOLIDADO|FULANO' AS CHAVESECTIONACCESS 
    RESIDENT CONSOLIDADO Where DIRETORIA='FULANO' OR WildMatch(RECEITA,'*');
 
    Concatenate
    LOAD * ,
    'RECEITA X|CICLANO' AS CHAVESECTIONACCESS
    RESIDENT CONSOLIDADO WHERE DIRETORIA='CICLANO' OR WildMatch(RECEITA,'RECEITA X');
    
    Concatenate
    LOAD * ,
    'RECEITA Y|BELTRANO' AS CHAVESECTIONACCESS
    RESIDENT CONSOLIDADO WHERE DIRETORIA='BELTRANO' OR WildMatch(RECEITA,'RECEITA Y');
    
   e assim em diante até dar um DROP TABLE na minha tabela CONSOLIDADO.



 



mageste
Partner - Contributor III
Partner - Contributor III

Entendi!

Acredito que com essa estrutura você consegue montar o Section Access com o REDUCTION, é até melhor do que usar o OMIT.

No caso, pra cada tabela de diretor você criaria a mesma linha da chave como o campo REDUCTION, tipo:

 

    Concatenate
    LOAD * ,
    'RECEITA X|CICLANO' AS CHAVESECTIONACCESS,
    'RECEITA X|CICLANO' AS REDUCTION
    RESIDENT CONSOLIDADO WHERE DIRETORIA='CICLANO' OR WildMatch(RECEITA,'RECEITA X');
 
 
E depois você consegue fazer esse filtro no Section Access em algo como:
 
Section Access;
 
Tabela_Seguranca:
LOAD * INLINE[
ACCESS,     USERID,                    REDUCTION
USER,          CICLANO,                RECEITA X|CICLANO
USER,          FULANO,                 RECEITACONSOLIDADO|FULANO
USER,          PRESIDENTE,        CONSOLIDADO|CONSOLIDADO
 ];
 
Section Application;