

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Exemplo 3: Controle de acesso multilocatário para RBAC e ABAC com OPA e Rego
<a name="opa-abac-rbac-examples"></a>

Para aprimorar o exemplo do RBAC na seção anterior, você pode adicionar atributos aos usuários. 

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


Esse exemplo inclui as mesmas funções do exemplo anterior, mas adiciona o atributo de usuário`account_lockout_flag`. Esse é um atributo específico do usuário que não está associado a nenhuma função específica. Você pode usar os mesmos dados externos do RBAC usados anteriormente neste exemplo: 

```
 {
    "roles": {
        "tenant_a": {
            "all_access_role": ["viewData", "updateData"]
        },
        "tenant_b": {
            "update_data_role": ["updateData"],
            "view_data_role": ["viewData"]
        }
    }
}
```

O atributo `account_lockout_flag` do usuário pode ser passado para o serviço de dados como parte da entrada de uma consulta OPA `/viewData/tenant_a` para o usuário Bob:

```
 {
    "tenant_id": "tenant_a",
    "role": "all_access_role",
    "path": ["viewData", "tenant_a"],
    "method": "GET",
    "account_lockout_flag": "true"
}
```

A regra que é consultada para a decisão de acesso é semelhante aos exemplos anteriores, mas inclui uma linha adicional para verificar o `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"
}
```

Essa consulta retorna uma decisão de autorização de`false`. Isso ocorre porque `account_lockout_flag attribute` é `true` para Bob, e a regra Rego `allowViewData` nega o acesso, embora Bob tenha a função e o inquilino corretos.