Forum Discussion
Superusuario de RLS o no
Considere un ejemplo sencillo de hojas de horas. Quiero saber si es posible implementar decir 2 reglas de negocio de seguridad:
1. El usuario que ha iniciado sesión puede ver sus propias hojas de horas
2. Un superusuario puede ver todas las hojas de horas
Supongamos que tengo 4 tablas Hojas de horas, TimesheetLines y Recursos y una tabla SuperUsers. Las hojas de horas se unen a recursos en El espacio de tiempoOwnerId y Resources tiene un identificador, un nombre y una dirección de correo electrónico que coinciden con USERPRINCIPALNAME().
Mi DAX puede ser:
Medidas:
LoggedInUser - USERPRINCIPALNAME()
LoggerInUserId á LOOKUPVALUE(Resources[ResourceId], Resources[EmailAddress], [LoggedInUser])
RLS en TimesheetLines:
NOT ISBLANK([LoggedInUser]) && (
RELATED(Timesheets[TimesheetOwnerId]) á [LoggedInUserId] //My timesheet
||
CONTAINS(SuperUsers, [ResourceId], [LoggedInUserId]) //Superusers puede ver el parte de horas de todos
)
Todo esto funciona bien. La característica que quiero es que los superusuarios resalten qué filas les pertenecen (por ejemplo, formato condicional para cambiar el color de fondo), así que en mi cabeza estoy pensando que necesito una bandera para indicar si mi propio hoja de horas verdadero/falso, pero ¿cómo implementar eso?
No puedo utilizar la función USERPRINCIPALNAME() en una columna calculada.
Traté de clonar mi tabla de hojas de horas haciendo referencia a ella y aplicando el mismo RLS DAX obviamente excluyendo superusuarios sin embargo no podía unir las 2 tablas ya que entonces el filtro se aplica en ambas direcciones, y no podía unir porque entonces no podía usar la función RELACIONADA. Así que estoy pensando que tengo que usar un método de no relación para unir de la tabla clonada a la tabla real entonces tal vez relacionado funcionaría o algo así.
Desde que escribí esto descubrí un problema similar: https://www.edureka.co/community/29920/level-security-applied-through-lookupvalue-default-filter
Pero no entendía la sugerencia en este sitio web - qué campo uso en el siguiente y cuál es mi expresión.
En mi escenario:
Measure(
IF(ISFILTERED(<Field>),
<expression>,
CALCULATE(<expression>,
FILTER(Timesheets, Timesheets[TimesheetOwnerId] á [LoggedInUserResourceId)
)
)Otra sugerencia que tuve fue
Measure á SELECTEDVALUE(Timesheets[TimesheetOwnerId]) ? [LoggedInUserResourceId]pero no estaba seguro de por qué funciona esto. Tal vez necesite perservidor con esto.
3 Replies
- amitchandakSuper User
@GryPTonite, no muy claro. Ha creado una jerarquía o una tabla de acceso de usuario
RLS - Seguridad de nivel de fila
https://community.powerbi.com/t5/MBAS-Gallery/Microsoft-Power-BI-Unleash-row-level-security-patterns-in-Power/td-p/712613
https://radacad.com/dynamic-row-level-security-with-organizational-hierarchy-power-bi
https://www.blue-granite.com/blog/using-dynamic-row-level-security-with-organizational-hierarchies
https://docs.microsoft.com/en-us/power-bi/service-admin-rls
https://blog.tallan.com/2018/04/10/row-level-security-in-power-bi-part-1-roles-and-users/
https://radacad.com/what-do-you-need-to-implement-dynamic-row-level-security-in-power-bi- GryPToniteFrequent Visitor
Supongo que la tabla SuperUsers es una lista personalizada y actúa como tabla de acceso o más bien como una lista de quiénes usuarios que pueden ver todas las hojas de horas. La persona que ha iniciado sesión es un superusuario o no.
Si un superusuario inicia sesión puede ver las hojas de horas de todos, incluidas las suyas, con el fin de diferenciar cuál es el superusuario hojas de horas y las que no son quiero una marca verdadera/falsa por hojas de horas (si la marca tiene que sentarse en la tabla Hojas de horas que está bien porque tengo una relación a través de TimesheetId para que pueda usar la función RELACIONADA. Lo que determina su propio parte de horas es su tabla principal Hojas de horas tiene un campo TimesheetOwnerId que coincide con el ResourceId y en la tabla Resources y esta tabla tiene una dirección de correo electrónico que coincide con userPRINCIPAL() Le sugiero que lea el enlace que proporcioné para obtener un ejemplo similar, una persona respondió a este artículo sugiriendo que podría ser un error y dio una solución alternativa, es la solución alternativa viable.
- v-xicaiCommunity Support
Hola @GryPTonite ,
Puede establecer la seguridad de nivel de fila (RLS) para administrar roles, consulte el vínculo Hoja de trucos de seguridad dinámica de Power BI Desktop, que describe los pasos detallados. Tal vez no funciona, hay algunos consejos para que funcione y probarlo eficientemente.
Saludos
Amy
Equipo de apoyo a la comunidad _ Amy
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.