Ir para conteúdo
  • 0

Como aplicar duas regras de RLS distintas sem que interfiram uma na outra?


Caiomens

Pergunta

  • Alunos

Estou desenvolvendo um painel no Power BI para gerenciar registros de atendimentos realizados por clientes. Tenho uma tabela fato que contém o ID dos registros, informações sobre os atendimentos (como datas e motivos), além de colunas importantes para o RLS, como Divisões (área responsável pelo atendimento) e CNPJ (identificador do cliente).

Cenário Atual:

Atualmente, uso uma regra de RLS baseada no CNPJ do cliente. Essa regra é aplicada através da tabela carteira que vincula a carteira de vendedores aos CNPJs e ao estado correspondente. A tabela filtra a dimensão de clientes, que por sua vez filtra a tabela fato.

Utilizo a função SWITCH no RLS para validar o usuário logado e definir se a filtragem deve ser feita por UF ou pelo ID do vendedor, além de permitir perfis com acesso completo aos dados.

Novo Desafio:

Agora, preciso aplicar uma segunda regra de RLS para os responsáveis das Divisões. Essa regra deve limitar o acesso às divisões vinculadas à UF do usuário, exigindo a criação de um novo perfil.

No entanto, ao implementar ambas as regras – uma na tabela de clientes usando a tabela carteira, e outra na dimensão de divisões – percebi que elas interferem uma na outra. Ou o acesso é liberado indevidamente, ou todas as informações são filtradas, o que compromete o funcionamento do painel.

Solicitação de Ajuda:

Gostaria de saber como aplicar essas duas regras de RLS de forma que uma não interfira na outra. Minha fonte de dados está no BigQuery, e utilizo a importação dos dados no Power BI. Já considerei duplicar a base para aplicar cada regra separadamente, mas isso aumentaria significativamente o consumo de processamento.

Exemplos:

Tabela Dimensão Usuários

Nome / ID Usuário / e-mail / perfil / UF

Tabela RLS

CNPJ / ID Usuário / UF

Tabela Dimensão Divisão

Nome Divisão / ID Divisão / UF / Demais dados

Função Swich usada no RLS do cenário atual (Tabela Cliente)

var _perfil =
CALCULATETABLE(
VALUES(dUsuarios[perfil]),
dUsuarios[email] = USERPRINCIPALNAME()
)

var _idusuario =
CALCULATETABLE(
VALUES(dUsuarios[idusuario]),
dUsuarios[email] = USERPRINCIPALNAME()
)

var _uf =
CALCULATETABLE(
VALUES(dUsuarios[uf]),
dUsuarios[email] = USERPRINCIPALNAME()
)

var _rls =
SWITCH(
_perfil,
1, True,
2, [uf] = _uf,
3, [idusuario] = _idusuario,
False
)
return _rls

Segunda Função Swich usada no RLS do novo desafio (Tabela Divisão)

var _perfil =
CALCULATETABLE(
VALUES(dUsuarios[perfil]),
dUsuarios[email] = USERPRINCIPALNAME()
)

var _idusuario =
CALCULATETABLE(
VALUES(dUsuarios[idusuario]),
dUsuarios[email] = USERPRINCIPALNAME()
)

var _uf =
CALCULATETABLE(
VALUES(dUsuarios[uf]),
dUsuarios[email] = USERPRINCIPALNAME()
)

var _rls =
SWITCH(
_perfil,
4,  [uf] = _uf,
False
)
return _rls

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...