Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejemplo 3: Control de acceso multiusuario para RBAC y ABAC con OPA y Rego
Para mejorar el ejemplo del RBAC de la sección anterior, puede añadir atributos a los usuarios.
Este ejemplo incluye las mismas funciones del ejemplo anterior, pero añade el atributo user. account_lockout_flag Se trata de un atributo específico del usuario que no está asociado a ningún rol en particular. Puede utilizar los mismos datos externos del RBAC que utilizó anteriormente para este ejemplo:
{ "roles": { "tenant_a": { "all_access_role": ["viewData", "updateData"] }, "tenant_b": { "update_data_role": ["updateData"], "view_data_role": ["viewData"] } } }
El atributo de account_lockout_flag usuario se puede pasar al servicio de datos como parte de la entrada de una consulta OPA /viewData/tenant_a para el usuario Bob:
{ "tenant_id": "tenant_a", "role": "all_access_role", "path": ["viewData", "tenant_a"], "method": "GET", "account_lockout_flag": "true" }
La regla que se consulta para la decisión de acceso es similar a la de los ejemplos anteriores, pero incluye una línea adicional para comprobar el account_lockout_flag atributo:
default allowViewData = false allowViewData = true { input.method == "GET" input.path = ["viewData", tenant_id] input.tenant_id == tenant_id role_permissions := data.roles[input.tenant_id][input.role][_] contains(role_permissions, "viewData") input.account_lockout_flag == "false" }
Esta consulta devuelve una decisión de autorización defalse. Esto se debe a que account_lockout_flag attribute es true para Bob y la regla Rego allowViewData niega el acceso aunque Bob tenga el rol y el inquilino correctos.