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
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
, danProblems
. Students
dan Teachers
dapat dianggap entitas dari jenis Role,
dan masing-masing User
dapat dikaitkan dengan nol atau salah satuRoles
.

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
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
atauanswerProblem
, 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 dipanggilRole::"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 tipeUser
. Tindakan yang Bob coba lakukan adalahanswerProblem
. 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 sebagaiRole::"Students"
. Karena entitas dalam grup pengguna hanya Role::"Students"
diizinkan untuk melakukan tindakansubmitProblem
, 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 mengevaluasiALLOW
, 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": [] } ] } }