Exemple 4 : filtrage de l'interface utilisateur avec OPA et Rego - AWS Conseils prescriptifs

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 4 : filtrage de l'interface utilisateur avec OPA et Rego

La flexibilité d'OPA et de Rego permet de filtrer les éléments de l'interface utilisateur. L'exemple suivant montre comment une règle partielle OPA peut prendre des décisions d'autorisation concernant les éléments à afficher dans une interface utilisateur avec RBAC. Cette méthode est l'une des nombreuses manières de filtrer les éléments de l'interface utilisateur avec OPA.

Filtrage de l'interface utilisateur avec OPA et Rego

Dans cet exemple, une application Web d'une seule page comporte quatre boutons. Supposons que vous souhaitiez filtrer l'interface utilisateur de Bob, Shirley et Alice afin qu'ils ne puissent voir que les boutons correspondant à leurs rôles. Lorsque l'interface utilisateur reçoit une demande de l'utilisateur, elle interroge une règle partielle OPA pour déterminer quels boutons doivent être affichés dans l'interface utilisateur. La requête transmet les informations suivantes en entrée à OPA lorsque Bob (avec le rôleviewer) envoie une demande à l'interface utilisateur :

{ "role": "viewer" }

L'OPA utilise des données externes structurées pour que le RBAC prenne une décision d'accès :

{ "roles": { "viewer": ["viewUsers", "viewData"], "dataViewOnly": ["viewData"], "admin": ["viewUsers", "viewData", "updateUsers", "updateData"] } }

La règle partielle OPA utilise à la fois les données externes et les données d'entrée pour produire une liste des actions autorisées :

user_permissions[permissions] { permissions := data.roles[input.role][_] }

Dans la règle partielle, OPA utilise le input.role paramètre spécifié dans le cadre de la requête pour déterminer quels boutons doivent être affichés. Bob a le rôleviewer, et les données externes indiquent que les spectateurs ont deux autorisations : viewUsers etviewData. Par conséquent, le résultat de cette règle pour Bob (et pour tout autre utilisateur ayant un rôle de spectateur) est le suivant :

{ "user_permissions": [ "viewData", "viewUsers" ] }

La sortie pour Shirley, qui a le dataViewOnly rôle, contiendrait un bouton d'autorisation :viewData. La sortie pour Alice, qui a le admin rôle, contiendrait toutes ces autorisations. Ces réponses sont renvoyées à l'interface utilisateur lorsque l'OPA est demandée. user_permissions L'application peut ensuite utiliser cette réponse pour masquer ou afficher le viewUsersButtonviewDataButton,updateUsersButton, et leupdateDataButton.