Forum Discussion
Fórmula RLS de múltiples condiciones
Hola a todos,
Quiero implementar una seguridad dinámica de nivel de fila y necesito su ayuda.
Tengo dos mesas
Quiero poner una condición, si el usuario es un administrador o pertenecen a la departement_ID 3 para ver todos los datos, de lo contrario para ver sólo sus datos de departamento.
Mi fórmula dax no funciona. No sé cómo definir el "NO FILTER".
si ([Role]<>"manager" [Departement_ID]<>1,
[User_name] - USERNAME(),
"NoFilter" )
esa es mi relación, la seguridad bidireccional está habilitada
Gracias
En realidad, no desea filtrar la tabla de usuarios, desea filtrar la tabla de ingresos y no necesita que la tabla de usuarios se una a la tabla de ingresos. Puedes escribir tu meaure de seguridad así.
VAR _UN = USERNAME() VAR _Role = LOOKUPVALUE(Users[Role],Users[User_name],_UN) VAR _Dept = LOOKUPVALUE(Users[Department_ID],Users[User_name],_UN) RETURN SWITCH( TRUE(), _Role = "manager",TRUE(), _Dept = 3,TRUE(), Revenues[Dept_ID] = _Dept,TRUE() )Y esto se aplica a su tabla de ingresos.
Básicamente, si el rol , administrador o los usuarios dept id 3, devolverá TRUE para cada fila de la tabla de ingresos. RLS muestra solo las filas donde el filtro es TRUE, por lo que mostrará cada fila. Si se trata de un empleado en otro departamento, encuentra su ID de departamento y lo compara con el identificador de departamento de la tabla de ingresos que sólo devolverá TRUE si es su departamento.
Gerente en el departamento 1
trabajador en el departamento 3
trabajador en el departamento 4
He adjuntado mi archivo de muestra para que lo mires.
2 Replies
- jdbuchanan71Super User
En realidad, no desea filtrar la tabla de usuarios, desea filtrar la tabla de ingresos y no necesita que la tabla de usuarios se una a la tabla de ingresos. Puedes escribir tu meaure de seguridad así.
VAR _UN = USERNAME() VAR _Role = LOOKUPVALUE(Users[Role],Users[User_name],_UN) VAR _Dept = LOOKUPVALUE(Users[Department_ID],Users[User_name],_UN) RETURN SWITCH( TRUE(), _Role = "manager",TRUE(), _Dept = 3,TRUE(), Revenues[Dept_ID] = _Dept,TRUE() )Y esto se aplica a su tabla de ingresos.
Básicamente, si el rol , administrador o los usuarios dept id 3, devolverá TRUE para cada fila de la tabla de ingresos. RLS muestra solo las filas donde el filtro es TRUE, por lo que mostrará cada fila. Si se trata de un empleado en otro departamento, encuentra su ID de departamento y lo compara con el identificador de departamento de la tabla de ingresos que sólo devolverá TRUE si es su departamento.
Gerente en el departamento 1
trabajador en el departamento 3
trabajador en el departamento 4
He adjuntado mi archivo de muestra para que lo mires.
- AnonymousNot applicable
@jdbuchanan71 muchas gracias
funciona bien 🙂