

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 2: RBAC básico com permissões verificadas e Cedar
<a name="avp-basic-rbac-examples"></a>

Este exemplo usa Permissões Verificadas e Cedar para demonstrar o RBAC básico. Conforme mencionado anteriormente, a construção básica do Cedar é uma entidade. Os desenvolvedores definem suas próprias entidades e, opcionalmente, podem criar relacionamentos entre entidades. O exemplo a seguir inclui três tipos de entidades: `Users``Roles`, `Problems` e. `Students`e `Teachers` podem ser consideradas entidades do tipo `Role,` e cada uma `User` pode ser associada a zero ou a qualquer uma das`Roles`.

![Exemplo de uma implementação básica de RBAC com Amazon Verified Permissions e Cedar para implementar um PDP](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/avp-example-2.png)


Em Cedar, essas relações são expressas vinculando o `Role` `Student` ao `User` `Bob` como seu pai. Essa associação agrupa logicamente todos os usuários estudantes em um grupo. Para obter mais informações sobre agrupamento no Cedar, consulte a documentação do [Cedar](https://docs.cedarpolicy.com/overview/terminology.html#term-group).

A política a seguir avalia a decisão `ALLOW` da ação `submitProblem,` para todos os diretores vinculados ao grupo lógico `Students` do tipo. `Role`

```
permit (
    principal in ElearningApp::Role::"Students",
    action == ElearningApp::Action::"submitProblem",
    resource
);
```

A política a seguir avalia a decisão `ALLOW` da ação `submitProblem` ou`answerProblem`, de todos os diretores vinculados ao grupo lógico `Teachers` do tipo. `Role`

```
permit (
    principal in ElearningApp::Role::"Teachers",
    action in [
        ElearningApp::Action::"submitProblem",
        ElearningApp::Action::"answerProblem"
    ],
    resource
);
```

Para avaliar solicitações com essas políticas, o mecanismo de avaliação precisa saber se o principal referenciado na solicitação de autorização é membro do grupo apropriado. Portanto, o aplicativo deve passar informações relevantes de associação ao grupo para o mecanismo de avaliação como parte da solicitação de autorização. Isso é feito por meio da `entities` propriedade, que permite que você forneça ao mecanismo de avaliação do Cedar dados de atributo e associação ao grupo para o principal e o recurso envolvido na chamada de autorização. No código a seguir, a associação ao grupo é indicada pela definição `User::"Bob"` de ter um pai chamado`Role::"Students"`.

```
{
  "policyStoreId": "ELEARNING_POLICYSTOREID",
  "principal": {
    "entityType": "ElearningApp::User",
    "entityId": "Bob"
  },
  "action": {
    "actionType": "ElearningApp::Action",
    "actionId": "answerProblem"
  },
  "resource": {
    "entityType": "ElearningApp::Problem",
    "entityId": "SomeProblem"
  },
  "entities": {
    "entityList": [
        {
            "identifier": {
                "entityType": "ElearningApp::User",
                "entityId": "Bob"
            },
            "attributes": {},
            "parents": [
                {
                    "entityType": "ElearningApp::Role",
                    "entityId": "Students"
                } 
            ]
        },
        {
          "identifier": {
            "entityType": "ElearningApp::Problem",
            "entityId": "SomeProblem"
          },
          "attributes": {},
          "parents": []
        }
      ]
  }
}
```

Neste exemplo, Bob é o usuário logado que faz a `answerProblem` solicitação. Portanto, Bob é o principal e a entidade é do tipo`User`. A ação que Bob está tentando realizar é`answerProblem`. Para avaliar se Bob pode realizar a `answerProblem` ação, você precisa fornecer uma estrutura de entidade que vincule a entidade `User` a um valor de `Bob` e atribua sua associação ao grupo listando uma entidade mãe como`Role::"Students"`. Como as entidades do grupo `Role::"Students"` de usuários só podem realizar a ação`submitProblem`, essa solicitação de autorização é avaliada como. `DENY`

Por outro lado, se o tipo `User` que tem um valor de `Alice` e faz parte do grupo `Role::"Teachers"` tentar realizar a `answerProblem` ação, a solicitação de autorização será avaliada`ALLOW`, pois a política determina que os diretores do grupo `Role::"Teachers"` tenham permissão para realizar a ação `answerProblem` em todos os recursos. O código a seguir mostra esse tipo de solicitação de autorização que avalia a. `ALLOW`

```
{
  "policyStoreId": "ELEARNING_POLICYSTOREID",
  "principal": {
    "entityType": "ElearningApp::User",
    "entityId": "Alice"
  },
  "action": {
    "actionType": "ElearningApp::Action",
    "actionId": "answerProblem"
  },
  "resource": {
    "entityType": "ElearningApp::Problem",
    "entityId": "SomeProblem"
  },
  "entities": {
    "entityList": [
        {
            "identifier": {
                "entityType": "ElearningApp::User",
                "entityId": "Alice"
            },
            "attributes": {},
            "parents": [
                {
                    "entityType": "ElearningApp::Role",
                    "entityId": "Teachers"
                } 
            ]
        },
        {
            "identifier": {
                "entityType": "ElearningApp::Problem",
                "entityId": "SomeProblem"
            },
            "attributes": {},
            "parents": []
        }
      ]
  }
}
```