Recentemente recebi um desafio de um camarada lá no Linkedin, que disse o seguinte:
“quero usar RLS pra ocultar as “abas”. Dependendo da pessoa, quer mostrar uma aba ou não…”.

Nota: abas ou páginas são sinônimos nesse post.
Esse é um assunto bastante complexo e nativamente o Power BI não resolve isso, então tem que ser no work around. Inclusive, pra quem quiser saber mais de RLS sugiro ler meu post sobre isso, aqui: https://powerbixpert.com/2020/08/20/power-bi-rls/.
O Problema
São dois os problemas nesse cenário. Primeiro você precisa modelar os dados de forma que você consiga dizer quais usuários acessam quais páginas; e Segundo como fazer pra que apenas as páginas desejadas sejam visíveis e acessíveis pelos usuários.
Vale notar que pra que esse work around funcione todas as abas do relatório precisam estar como escondidas (hide).
Mão na massa
Modelo de dados
Então, pra resolver o primeiro ponto, que é do modelo de dados, você precisa de uma tabela de páginas, de uma tabela de usuários e de uma tabela de usuários_paginas.

Com isso já dá pra ver que, Pedro Carvalho tem acesso em todas as páginas, enquanto que Adele e Pradeep tem acesso apenas nas páginas 1 e 2, home e geral, respectivamente.

Importante: o relacionamento entre USER_PAGINA e PAGINAS que tem sentindo “ambos” deve ser habilitador a opção “apply security filter in both directions” pra que roles de RLS sejam transmitidas nesse relacionamento.

Acesso às páginas
Pra resolver o segundo ponto, de visualização e acesso às páginas, existem algumas formas que são: ou você usa um slicer dropdown com single select na página, que é o que eu usei, e a partir da seleção desse dropdown o usuário acessa a página; ou então você cria um botão pra cada página e esconde os botões de acordo com acesso do usuário, que eu acho mais deselegante porque o botão fica transparente, mas dá pra ver que tem algum objeto ali…
Pra criar esse slicer basta criar um slicer com a coluna de nome das páginas e criar uma medida que pega o nome que tá no slicer. Então importante: o nome da aba tem que ser exatamente igual ao que estiver no slicer. Boa prática é colocar esse slicer como single select.

Depois, criar um botão que pega o valor da medida e passa como argumento do Page Navigation.
Então quando o slicer estiver com a página GERAL selecionada, ao clicar no botão GO o relatório irá pra aba GERAL.
RLS Role
Por fim, é preciso criar uma role do RLS, pra saber como, leia aqui. No caso aqui o RLS ficou assim:

Testando
Com tudo pronto, agora é testar. Antes vamos lembrar das permissões que temos:
Então se eu pegar o usuário Adele, só vão aparecer 2 páginas pra mim, vamos ver.

Vamos tentar agora com usuário Pedro:


Referências
https://www.daytodatastuff.co.uk/blog/dynamically-hide-a-page-in-power-bi
https://www.youtube.com/watch?v=u8O2wqZ1IGk – Dynamically Filter Page Navigation Per User With Row Level Security (RLS)
Olá! achei muito interessante essa modo de fazer RLS. Fiz aqui num painel meu, e deu certo em partes. O filtro por página funcionou na navegação página de navegação, lá ele só vê as páginas que selecionei pra ele corretamente. Entretanto, o usuário com acessos restritos ainda consegue navegar “cladestinamente” para outras páginas que ele não teria acesso, através das guias de página normalmente.
Você sabe como resolver?
LikeLike
Difícil dizer, compartilha um arquivo power bi desktop pra gente tentar entender melhor e ver como podemos resolver. E como é que ele faz pra navegar “clandestinamente” ?
LikeLike