

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
<a name="opa-abac-rbac-examples"></a>

Para mejorar el ejemplo del RBAC de la sección anterior, puede añadir atributos a los usuarios. 

![RBAC y ABAC con OPA y Rego](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa-example-3.png)


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 de`false`. 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.