

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh 2: RBAC Dasar dengan Izin Terverifikasi dan Cedar
<a name="avp-basic-rbac-examples"></a>

Contoh ini menggunakan Izin Terverifikasi dan Cedar untuk mendemonstrasikan RBAC dasar. Seperti disebutkan sebelumnya, konstruksi dasar Cedar adalah entitas. Pengembang mendefinisikan entitas mereka sendiri dan secara opsional dapat membuat hubungan antar entitas. Contoh berikut mencakup tiga jenis entitas:`Users`,`Roles`, dan`Problems`. `Students`dan `Teachers` dapat dianggap entitas dari jenis `Role,` dan masing-masing `User` dapat dikaitkan dengan nol atau salah satu`Roles`.

![Contoh implementasi RBAC dasar dengan Izin Terverifikasi Amazon dan Cedar untuk mengimplementasikan PDP](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/avp-example-2.png)


Di Cedar, hubungan ini diekspresikan dengan menghubungkan `Role` `Student` ke `User` `Bob` sebagai induknya. Asosiasi ini secara logis mengelompokkan semua pengguna siswa dalam satu kelompok. Untuk informasi lebih lanjut tentang pengelompokan di Cedar, lihat dokumentasi [Cedar](https://docs.cedarpolicy.com/overview/terminology.html#term-group).

Kebijakan berikut mengevaluasi keputusan untuk tindakan `ALLOW` `submitProblem,` untuk semua kepala sekolah yang terkait dengan kelompok `Students` logis dari jenis tersebut. `Role`

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

Kebijakan berikut mengevaluasi keputusan `ALLOW` untuk tindakan `submitProblem` atau`answerProblem`, untuk semua prinsip yang terkait dengan kelompok `Teachers` logis dari jenis tersebut. `Role`

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

Untuk mengevaluasi permintaan dengan kebijakan ini, mesin evaluasi perlu mengetahui apakah prinsipal yang dirujuk dalam permintaan otorisasi adalah anggota kelompok yang sesuai. Oleh karena itu, aplikasi harus meneruskan informasi keanggotaan grup yang relevan ke mesin evaluasi sebagai bagian dari permintaan otorisasi. Ini dilakukan melalui `entities` properti, yang memungkinkan Anda untuk menyediakan mesin evaluasi Cedar dengan atribut dan data keanggotaan grup untuk kepala sekolah dan sumber daya yang terlibat dalam panggilan otorisasi. Dalam kode berikut, keanggotaan grup ditunjukkan dengan mendefinisikan `User::"Bob"` sebagai orang tua yang dipanggil`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": []
        }
      ]
  }
}
```

Dalam contoh ini, Bob adalah pengguna yang masuk yang membuat `answerProblem` permintaan. Oleh karena itu, Bob adalah prinsipal dan entitas adalah tipe`User`. Tindakan yang Bob coba lakukan adalah`answerProblem`. Untuk mengevaluasi apakah Bob dapat melakukan `answerProblem` tindakan, Anda perlu menyediakan struktur entitas yang menghubungkan entitas `User` dengan nilai `Bob` dan menetapkan keanggotaan grupnya dengan mencantumkan entitas induk sebagai`Role::"Students"`. Karena entitas dalam grup pengguna hanya `Role::"Students"` diizinkan untuk melakukan tindakan`submitProblem`, permintaan otorisasi ini akan dievaluasi. `DENY`

Di sisi lain, jika tipe `User` yang memiliki nilai `Alice` dan merupakan bagian dari grup `Role::"Teachers"` mencoba melakukan `answerProblem` tindakan, permintaan otorisasi mengevaluasi`ALLOW`, karena kebijakan menentukan bahwa kepala sekolah dalam grup `Role::"Teachers"` diizinkan untuk melakukan tindakan pada semua sumber daya. `answerProblem` Kode berikut menunjukkan jenis permintaan otorisasi yang mengevaluasi. `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": []
        }
      ]
  }
}
```