Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exemple 2 : RBAC de base avec autorisations vérifiées et Cedar
Cet exemple utilise Verified Permissions et Cedar pour illustrer le RBAC de base. Comme mentionné précédemment, la structure de base de Cedar est une entité. Les développeurs définissent leurs propres entités et peuvent éventuellement créer des relations entre les entités. L'exemple suivant inclut trois types d'entités : UsersRoles, etProblems. Studentset Teachers peuvent être considérées comme des entités du type Role, et chacune User peut être associée à zéro ou à l'un desRoles.
Dans Cedar, ces relations sont exprimées en liant le Role Student au User Bob en tant que parent. Cette association regroupe logiquement tous les utilisateurs étudiants dans un seul groupe. Pour plus d'informations sur le regroupement dans Cedar, consultez la documentation de Cedar
La politique suivante évalue la décision ALLOW d'action submitProblem, pour tous les principaux liés au groupe logique Students de ce type. Role
permit ( principal in ElearningApp::Role::"Students", action == ElearningApp::Action::"submitProblem", resource );
La politique suivante détermine la décision prise ALLOW pour l'action submitProblem ou answerProblem pour tous les principes liés au groupe logique Teachers du type. Role
permit ( principal in ElearningApp::Role::"Teachers", action in [ ElearningApp::Action::"submitProblem", ElearningApp::Action::"answerProblem" ], resource );
Afin d'évaluer les demandes avec ces politiques, le moteur d'évaluation doit savoir si le principal référencé dans la demande d'autorisation est membre du groupe approprié. Par conséquent, l'application doit transmettre les informations pertinentes relatives à l'appartenance au groupe au moteur d'évaluation dans le cadre de la demande d'autorisation. Cela se fait par le biais de la entities propriété, qui vous permet de fournir au moteur d'évaluation Cedar des données d'attribut et d'appartenance à un groupe pour le principal et la ressource impliqués dans l'appel d'autorisation. Dans le code suivant, l'appartenance à un groupe est indiquée par le fait User::"Bob" qu'un parent est appelé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": [] } ] } }
Dans cet exemple, Bob est l'utilisateur connecté qui fait la answerProblem demande. Par conséquent, Bob est le principal et l'entité est du typeUser. L'action que Bob essaie d'effectuer estanswerProblem. Afin d'évaluer si Bob peut effectuer l'answerProblemaction, vous devez fournir une structure d'entité qui lie l'entité User à une valeur de Bob et lui attribue son appartenance au groupe en répertoriant une entité parent sous Role::"Students" le nom. Étant donné que les entités du groupe d'utilisateurs Role::"Students" sont uniquement autorisées à effectuer l'actionsubmitProblem, cette demande d'autorisation est évaluée àDENY.
En revanche, si le type User qui a une valeur égale à Alice et qui fait partie du groupe Role::"Teachers" essaie d'exécuter l'answerProblemaction, la demande d'autorisation est évaluée comme suitALLOW, car la politique stipule que les principaux membres du groupe Role::"Teachers" sont autorisés à effectuer l'action answerProblem sur toutes les ressources. Le code suivant montre ce type de demande d'autorisation qui est évalué à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": [] } ] } }