Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Conflicto de seguridad de nivel de fila con la lógica de negocios

Hola, nuevo en Power BI y espero que alguien pueda sugerir una solución a este problema:

Tengo 3 tablas (vea a continuación el ejemplo) y necesito implementar la seguridad de nivel de fila:

BRANCH (código de sucursal, nombre de rama)

  • 123, rama123
  • 234, rama234
  • 345, sucursal345

TRANSACTION (código de sucursal, tipo, [otras cosas...])

  • 123, 1, ...
  • 123, 1, ...
  • 345, 2, ...

USER_BRANCH (usuario, código de sucursal)

BRANCH está en el lado "uno" de las relaciones 1:* en el modelo con los otros 2

El RLS que queremos es que el usuario debe ser igual a userprincipalname(). Lo tenemos funcionando bien si tenemos un branchcode para el usuario ([user] = userprincipalname() o algo así), PERO

AQUÍ ESTÁ EL PROBLEMA:

La lógica de negocios usada en la aplicación indica que si un usuario no tiene un código de sucursal (está en blanco),entonces tiene acceso a TODAS las ramas. Estos usuarios estarían en una oficina en casa que necesita ver todas las transacciones sin importar cuál sea la sucursal.

La única solución que estoy viendo es agregar cada combinación de usuarios "en blanco" para todas las ramas, pero eso agregará 50,000 registros y no estoy entusiasmado con eso. ¿Alguien tiene otra solución?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Ok, lo conseguí trabajando sin entrar en grupos asignados a múltiples roles.

  1. Despegué el filtrado de seguridad en ambas direcciones entre BRANCH y USER_BRANCH
  2. Agregué este filtro al rol en BRANCH:
    O bien(
    contiene (USER_BRANCH, [branchcode], "", [user], userprinicalname())
    ,contiene (USER_BRANCH, [branchcode], [branchcode], [user], userprinicalname())
    )

View solution in original post

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

Ok, lo conseguí trabajando sin entrar en grupos asignados a múltiples roles.

  1. Despegué el filtrado de seguridad en ambas direcciones entre BRANCH y USER_BRANCH
  2. Agregué este filtro al rol en BRANCH:
    O bien(
    contiene (USER_BRANCH, [branchcode], "", [user], userprinicalname())
    ,contiene (USER_BRANCH, [branchcode], [branchcode], [user], userprinicalname())
    )

Syndicate_Admin
Administrator
Administrator

¿Funcionaría esto? ¿Colocar los usuarios "en blanco" en un rol o grupo que no tiene el filtro en ese campo?

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.