

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esempio 2: RBAC di base con autorizzazioni verificate e Cedar
<a name="avp-basic-rbac-examples"></a>

Questo esempio utilizza Verified Permissions e Cedar per dimostrare l'RBAC di base. Come accennato in precedenza, il costrutto base di Cedar è un'entità. Gli sviluppatori definiscono le proprie entità e possono facoltativamente creare relazioni tra le entità. L'esempio seguente include tre tipi di entità: `Users``Roles`, e`Problems`. `Students`e `Teachers` possono essere considerate entità del tipo `Role,` e ciascuna `User` può essere associata a zero o a uno qualsiasi dei`Roles`.

![Esempio di implementazione RBAC di base con Amazon Verified Permissions e Cedar per implementare un PDP](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/avp-example-2.png)


In Cedar, queste relazioni vengono espresse collegando il a come elemento principale. `Role` `Student` `User` `Bob` Questa associazione raggruppa logicamente tutti gli utenti studenti in un unico gruppo. [Per ulteriori informazioni sul raggruppamento in Cedar, consulta la documentazione di Cedar.](https://docs.cedarpolicy.com/overview/terminology.html#term-group)

La seguente politica valuta la decisione relativa all'azione `ALLOW` `submitProblem,` per tutti i principali collegati al gruppo logico del tipo. `Students` `Role`

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

La seguente politica si riferisce alla decisione `ALLOW` relativa all'azione `submitProblem` o `answerProblem` a tutti i principali collegati al gruppo `Teachers` logico del tipo. `Role`

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

Per valutare le richieste con queste politiche, il motore di valutazione deve sapere se il principale a cui si fa riferimento nella richiesta di autorizzazione fa parte del gruppo appropriato. Pertanto, l'applicazione deve trasmettere le informazioni pertinenti sull'appartenenza al gruppo al motore di valutazione come parte della richiesta di autorizzazione. Ciò avviene tramite la `entities` proprietà, che consente di fornire al motore di valutazione Cedar i dati sugli attributi e sull'appartenenza al gruppo per il principale e la risorsa coinvolte nella chiamata di autorizzazione. Nel codice seguente, l'appartenenza al gruppo viene indicata definendo `User::"Bob"` come la chiamata `Role::"Students"` di un genitore.

```
{
  "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": []
        }
      ]
  }
}
```

In questo esempio, Bob è l'utente connesso che effettua la `answerProblem` richiesta. Pertanto, Bob è il principale e l'entità è del tipo`User`. L'azione che Bob sta cercando di eseguire è`answerProblem`. Per valutare se Bob è in grado di eseguire l'`answerProblem`azione, è necessario fornire una struttura di entità che colleghi l'entità `User` con un valore di `Bob` e le assegni l'appartenenza al gruppo elencando un'entità principale come`Role::"Students"`. Poiché le entità del gruppo di utenti `Role::"Students"` sono autorizzate solo a eseguire l'azione`submitProblem`, questa richiesta di autorizzazione restituisce un risultato positivo. `DENY`

D'altra parte, se il tipo `User` che ha un valore pari a `Alice` e fa parte del gruppo `Role::"Teachers"` tenta di eseguire l'`answerProblem`azione, la richiesta di autorizzazione restituisce lo stesso risultato`ALLOW`, poiché la politica impone che i responsabili del gruppo `Role::"Teachers"` siano autorizzati a eseguire l'azione `answerProblem` su tutte le risorse. Il codice seguente mostra questo tipo di richiesta di autorizzazione che restituisce 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": []
        }
      ]
  }
}
```