Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejemplo 3: Control de acceso multiusuario con RBAC
Para profundizar en el ejemplo anterior de RBAC, puede ampliar sus requisitos para incluir la multitenencia de SaaS, que es un requisito común para los proveedores de SaaS. En las soluciones multiarrendatario, el acceso a los recursos siempre se proporciona en nombre de un arrendatario determinado. Es decir, los usuarios del arrendatario A no pueden ver los datos del arrendatario B, incluso si esos datos están colocados lógica o físicamente en un sistema. El siguiente ejemplo ilustra cómo puede implementar el aislamiento de inquilinos mediante varios almacenes de políticas de permisos verificados y cómo puede emplear las funciones de usuario para definir los permisos dentro del inquilino.
Utilizar el patrón de diseño del almacén de políticas por inquilino es una práctica recomendada para mantener el aislamiento de los inquilinos y, al mismo tiempo, implementar el control de acceso con permisos verificados. En este escenario, las solicitudes de los usuarios del inquilino A y del inquilino B se verifican comparándolas con almacenes de políticas independientes DATAMICROSERVICE_POLICYSTORE_A
yDATAMICROSERVICE_POLICYSTORE_B
, respectivamente. Para obtener más información sobre las consideraciones de diseño de permisos verificados para aplicaciones SaaS de varios inquilinos, consulte la sección Consideraciones de diseño de permisos verificados para múltiples inquilinos.

La siguiente política se encuentra en el almacén de políticas. DATAMICROSERVICE_POLICYSTORE_A
Verifica que el principal formará parte del grupo allAccessRole
de tipoRole
. En este caso, el director podrá realizar updateData
las acciones viewData
y acciones en todos los recursos que estén asociados al inquilino A.
permit ( principal in MultitenantApp::Role::"allAccessRole", action in [ MultitenantApp::Action::"viewData", MultitenantApp::Action::"updateData" ], resource );
Las siguientes políticas se encuentran en el almacén DATAMICROSERVICE_POLICYSTORE_B
de políticas. La primera política comprueba que el principal forma parte del updateDataRole
grupo de tiposRole
. Suponiendo que ese sea el caso, da permiso a los directores para realizar la updateData
acción con los recursos que están asociados al inquilino B.
permit ( principal in MultitenantApp::Role::"updateDataRole", action == MultitenantApp::Action::"updateData", resource );
Esta segunda política exige que los directores que formen parte del viewDataRole
grupo de este tipo Role
puedan realizar la viewData
acción con los recursos asociados al arrendatario B.
permit ( principal in MultitenantApp::Role::"viewDataRole", action == MultitenantApp::Action::"viewData", resource );
La solicitud de autorización realizada por el arrendatario A debe enviarse al almacén DATAMICROSERVICE_POLICYSTORE_A
de políticas y verificarse mediante las políticas que pertenecen a ese almacén. En este caso, se verifica mediante la primera política analizada anteriormente como parte de este ejemplo. En esta solicitud de autorización, el principal de tipo User
con un valor de Alice
solicita realizar la viewData
acción. El principal pertenece al grupo allAccessRole
de tiposRole
. Alice está intentando realizar la viewData
acción en el SampleData
recurso. Como Alice tiene la allAccessRole
función, esta evaluación da como resultado una ALLOW
decisión.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A", "principal": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "viewData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "allAccessRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }
Si, por el contrario, consulta una solicitud realizada por el inquilino BUser Bob
, verá algo parecido a la siguiente solicitud de autorización. La solicitud se envía al almacén de DATAMICROSERVICE_POLICYSTORE_B
políticas porque proviene del arrendatario B. En esta solicitud, el director Bob
desea realizar la acción updateData
en el recursoSampleData
. Sin embargo, Bob
no forma parte de un grupo que tenga acceso a la acción updateData
de ese recurso. Por lo tanto, la solicitud da lugar a una DENY
decisión.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_B", "principal": { "entityType": "MultitenantApp::User", "entityId": "Bob" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "updateData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Bob" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "viewDataRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }
En este tercer ejemplo, User Alice
intenta realizar la viewData
acción en el recursoSampleData
. Esta solicitud se dirige al almacén de DATAMICROSERVICE_POLICYSTORE_A
políticas porque la principal Alice
pertenece al arrendatario A. Alice
forma parte de este tipo allAccessRole
de grupoRole
, lo que le permite realizar la viewData
acción con los recursos. Como tal, la solicitud da lugar a una ALLOW
decisión.
{ "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A", "principal": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "action": { "actionType": "MultitenantApp::Action", "actionId": "viewData" }, "resource": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "entities": { "entityList": [ { "identifier": { "entityType": "MultitenantApp::User", "entityId": "Alice" }, "attributes": {}, "parents": [ { "entityType": "MultitenantApp::Role", "entityId": "allAccessRole" } ] }, { "identifier": { "entityType": "MultitenantApp::Data", "entityId": "SampleData" }, "attributes": {}, "parents": [] } ] } }