Forum Discussion
Enmascaramiento de datos RLS
Hola @prajwala ,
Para implementar RLS con enmascaramiento de datos en Power BI, asegurándose de que los usuarios que no forman parte de un grupo de AD específico (como el grupo de AD de costo de administración) vean información enmascarada u oculta relacionada con los costos, puede lograrlo mediante la creación de roles de RLS dinámicos mediante el Editor tabular y expresiones DAX. A continuación, te explicamos cómo puedes implementarlo paso a paso:
- Creación de un rol de RLS mediante el editor tabular
- Abra el modelo de Power BI en el Editor tabular.
- Vaya a la sección Roles en el panel de la izquierda.
- Cree o modifique un rol, como Mask_Cost_Data.
- Agregue la condición de filtro DAX para comprobar si un usuario forma parte del grupo AD de costo de administración.
- Utilice USERNAME() o USERPRINCIPALNAME()
The key here is leveraging USERNAME() or USERPRINCIPALNAME() to dynamically evaluate the current user's membership.Lógica de enmascaramiento dinámico:
Si el usuario no forma parte del grupo de AD de coste de administración, muestre los datos enmascarados (por ejemplo, cero, nulo o "Restringido"). De lo contrario, muestre los datos de costo real.
Ejemplo de expresión DAX para columnas de costo:
Puede escribir esto como una columna calculada o modificar una medida en el Editor tabular:MaskedCost =
IF (
ISFILTERED ( 'UserADGroup'[GroupName] ) &&
CONTAINS ( 'UserADGroup', 'UserADGroup'[GroupName], "Management Cost AD" ),
[Cost],
"Restricted"
)Ejemplo de expresión DAX para columnas de costo:
Pasos:Supongamos que tiene una tabla o una fuente de datos con grupos de usuarios vinculados a usuarios. Esto se puede importar o consultar dinámicamente.
Tabla: 'UserADGroup' con columnas:
[UserEmail] o [UserName] (coincide con USERPRINCIPALNAME()).
[Nombre del grupo] (contiene los nombres de los grupos, como "Coste de gestión, AD").
Combine esta tabla con la tabla de datos principal donde se almacenan los costos.
Enmascarar datos para usuarios no autorizados
Ahora, use la lógica anterior dentro de una medida en lugar de una columna para mayor flexibilidad. Modifique la medida de costo:Masked_Cost_Measure =
VAR UserInGroup =
LOOKUPVALUE ( 'UserADGroup'[GroupName], 'UserADGroup'[UserEmail], USERPRINCIPALNAME() )
RETURN
IF ( UserInGroup = "Management Cost AD", SUM ( 'FactTable'[Cost] ), BLANK () )Explicación:
LOOKUPVALUE comprueba si el correo electrónico del usuario actual pertenece al grupo de anuncios de coste de administración.
Si el usuario forma parte del grupo, la medida muestra el costo real.
De lo contrario, devuelve BLANK() o cualquier valor enmascarado (por ejemplo, "Restringido" o 0).
- Definir el rol de RLS para grupos de usuarios
- In Tabular Editor:
- Create an RLS filter on your 'UserADGroup' table:
'UserADGroup'[UserEmail] = USERPRINCIPALNAME()
This ensures that users only see their respective group data.
- Create an RLS filter on your 'UserADGroup' table:
- Aplique esta función al modelo.
- In Tabular Editor:
- Prueba de RLS en Power BI
- Después de guardar los cambios en el Editor tabular, cargue el modelo en Power BI.
- Utilice la función "Ver como roles" para simular diferentes usuarios o grupos:
- Pruebe con un usuario que pertenezca al grupo "Management Cost AD".
- Pruebe con un usuario que no pertenezca al grupo.
- Compruebe que los usuarios no autorizados vean los datos enmascarados o restringidos, mientras que los usuarios autorizados vean los costos reales.
Espero que la solución proporcionada funcione para usted
Si he resuelto su pregunta, considere marcar mi publicación como una solución. ¡Gracias!
Un reconocimiento siempre es apreciado, ya que ayuda a reconocer el esfuerzo y mantiene a la comunidad próspera.