Exemplo 4: filtragem de interface do usuário com OPA e Rego - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exemplo 4: filtragem de interface do usuário com OPA e Rego

A flexibilidade do OPA e do Rego suporta a capacidade de filtrar elementos da interface do usuário. O exemplo a seguir demonstra como uma regra parcial de OPA pode tomar decisões de autorização sobre quais elementos devem ser exibidos em uma interface de usuário com RBAC. Esse método é uma das muitas maneiras diferentes de filtrar elementos da interface do usuário com o OPA.

Filtragem de interface do usuário com OPA e Rego

Neste exemplo, um aplicativo web de página única tem quatro botões. Digamos que você queira filtrar a interface de usuário de Bob, Shirley e Alice para que eles possam ver somente os botões que correspondem às suas funções. Quando a interface recebe uma solicitação do usuário, ela consulta uma regra parcial do OPA para determinar quais botões devem ser exibidos na interface do usuário. A consulta passa o seguinte como entrada para a OPA quando Bob (com a funçãoviewer) faz uma solicitação para a interface do usuário:

{ "role": "viewer" }

A OPA usa dados externos estruturados para o RBAC para tomar uma decisão de acesso:

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

A regra parcial do OPA usa os dados externos e a entrada para produzir uma lista de ações permitidas:

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

Na regra parcial, o OPA usa o input.role especificado como parte da consulta para determinar quais botões devem ser exibidos. Bob tem a funçãoviewer, e os dados externos especificam que os espectadores têm duas permissões: viewUsers e. viewData Portanto, a saída dessa regra para Bob (e para qualquer outro usuário que tenha uma função de visualizador) é a seguinte:

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

A saída para Shirley, quem tem a dataViewOnly função, conteria um botão de permissões:. viewData A saída para Alice, que tem a admin função, conteria todas essas permissões. Essas respostas são retornadas à interface do usuário quando a OPA é consultada. user_permissions O aplicativo pode então usar essa resposta para ocultar ou exibir o viewUsersButton viewDataButtonupdateUsersButton,, updateDataButton e.