Skip to content

Commit 9a0b070

Browse files
committed
chore(e2e): add tests for RBAC policyDecisionPrecedence config
Signed-off-by: Jessica He <[email protected]>
1 parent 7187644 commit 9a0b070

File tree

5 files changed

+104
-0
lines changed

5 files changed

+104
-0
lines changed

.ibm/pipelines/env_variables.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ QE_USER5_ID=$(cat /tmp/secrets/QE_USER5_ID)
8282
QE_USER5_PASS=$(cat /tmp/secrets/QE_USER5_PASS)
8383
QE_USER6_ID=$(cat /tmp/secrets/QE_USER6_ID)
8484
QE_USER6_PASS=$(cat /tmp/secrets/QE_USER6_PASS)
85+
QE_USER7_ID=$(cat /tmp/secrets/QE_USER7_ID)
86+
QE_USER7_PASS=$(cat /tmp/secrets/QE_USER7_PASS)
87+
QE_USER8_ID=$(cat /tmp/secrets/QE_USER8_ID)
88+
QE_USER8_PASS=$(cat /tmp/secrets/QE_USER8_PASS)
89+
QE_USER9_ID=$(cat /tmp/secrets/QE_USER9_ID)
90+
QE_USER9_PASS=$(cat /tmp/secrets/QE_USER9_PASS)
8591

8692
K8S_CLUSTER_TOKEN_TEMPORARY=$(cat /tmp/secrets/K8S_CLUSTER_TOKEN_TEMPORARY)
8793

.ibm/pipelines/resources/config_map/app-config-rhdh-rbac.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,5 @@ permission:
136136
admin:
137137
users:
138138
- name: user:default/rhdh-qe
139+
policyDecisionPrecedence: conditional # default behavior
139140
includeTransitiveGroupOwnership: true

.ibm/pipelines/resources/config_map/rbac-policy.csv

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,17 @@ p, role:default/catalog_reader, catalog.entity.read, read, allow
3939
g, user:default/rhdh-qe, role:default/extension
4040
p, role:default/extension, extension-plugin, read, allow
4141
p, role:default/extension, extension-plugin, create, allow
42+
43+
p, role:default/all_resource_reader, catalog-entity, read, allow
44+
p, role:default/all_resource_reader, catalog-entity, create, allow
45+
g, user:default/rhdh-qe-7, role:default/all_resource_reader
46+
47+
p, role:default/all_resource_denier, catalog-entity, read, deny
48+
p, role:default/all_resource_denier, catalog-entity, create, allow
49+
g, user:default/rhdh-qe-8, role:default/all_resource_denier
50+
51+
g, user:default/rhdh-qe-7, role:default/owned_resource_reader
52+
g, user:default/rhdh-qe-8, role:default/owned_resource_reader
53+
54+
g, user:default/rhdh-qe-9, role:default/all_resource_reader
55+
g, user:default/rhdh-qe-9, role:default/conditional_denier

.ibm/pipelines/value_files/values_showcase-rbac.yaml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,32 @@ upstream:
385385
params:
386386
claims:
387387
- \$ownerRefs
388+
---
389+
result: CONDITIONAL
390+
roleEntityRef: 'role:default/owned_resource_reader'
391+
pluginId: catalog
392+
resourceType: catalog-entity
393+
permissionMapping:
394+
- read
395+
conditions:
396+
rule: IS_ENTITY_OWNER
397+
resourceType: catalog-entity
398+
params:
399+
claims:
400+
- \$currentUser
401+
EOF
402+
---
403+
result: CONDITIONAL
404+
roleEntityRef: 'role:default/conditional_denier'
405+
pluginId: catalog
406+
resourceType: catalog-entity
407+
permissionMapping:
408+
- read
409+
conditions:
410+
rule: HAS_LABEL
411+
resourceType: catalog-entity
412+
params:
413+
label: test-label
388414
EOF
389415
390416
./install-dynamic-plugins.sh /dynamic-plugins-root

e2e-tests/playwright/e2e/plugins/rbac/rbac.spec.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,4 +786,61 @@ test.describe.serial("Test RBAC", () => {
786786
await expect(dropdownMenuLocator).toBeHidden();
787787
});
788788
});
789+
790+
test.describe
791+
.serial("Test RBAC plugin: policyDecisionPrecedence: conditional — prioritize conditional before basic (default behavior)", () => {
792+
test("should allow read as defined in basic policy and conditional", async ({
793+
page,
794+
}) => {
795+
const common = new Common(page);
796+
const uiHelper = new UIhelper(page);
797+
798+
// Should allow read for user7: has static allow read via CSV and is also permitted via conditional policy
799+
await common.loginAsKeycloakUser(
800+
process.env.QE_USER7_ID,
801+
process.env.QE_USER7_PASS,
802+
);
803+
await uiHelper.openSidebar("Catalog");
804+
await uiHelper.selectMuiBox("Kind", "Component");
805+
await uiHelper.searchInputPlaceholder("mock-component");
806+
await expect(
807+
page.getByRole("link", { name: "mock-component-qe-7" }),
808+
).toBeVisible();
809+
});
810+
811+
test("should allow read as defined in conditional policy, basic policy should be disregarded", async ({
812+
page,
813+
}) => {
814+
const common = new Common(page);
815+
const uiHelper = new UIhelper(page);
816+
817+
// Should allow read for user8: conditional policy takes precedence over static deny read via CSV
818+
await common.loginAsKeycloakUser(
819+
process.env.QE_USER8_ID,
820+
process.env.QE_USER8_PASS,
821+
);
822+
await uiHelper.openSidebar("Catalog");
823+
await uiHelper.selectMuiBox("Kind", "Component");
824+
await uiHelper.searchInputPlaceholder("mock-component");
825+
await expect(
826+
page.getByRole("link", { name: "mock-component-qe-8" }),
827+
).toBeVisible();
828+
});
829+
830+
test("should deny read as defined in conditional policy, basic policy should be disregarded", async ({
831+
page,
832+
}) => {
833+
const common = new Common(page);
834+
const uiHelper = new UIhelper(page);
835+
836+
// Should allow read for user9: conditional deny policy takes precedence over allow read via basic
837+
await common.loginAsKeycloakUser(
838+
process.env.QE_USER9_ID,
839+
process.env.QE_USER9_PASS,
840+
);
841+
await uiHelper.openSidebar("Catalog");
842+
await uiHelper.selectMuiBox("Kind", "Component");
843+
await uiHelper.verifyTableIsEmpty();
844+
});
845+
});
789846
});

0 commit comments

Comments
 (0)