Skip to content

Commit 29aa89f

Browse files
committed
Guard core rbac consuming workflows
1 parent e564135 commit 29aa89f

5 files changed

Lines changed: 37 additions & 43 deletions

File tree

integration-tests/modules/__tests__/rbac/rbac-workflows.spec.ts

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@ import {
44
} from "@medusajs/core-flows"
55
import { medusaIntegrationTestRunner } from "@medusajs/test-utils"
66
import { IRbacModuleService, MedusaContainer } from "@medusajs/types"
7-
import {
8-
ContainerRegistrationKeys,
9-
definePolicies,
10-
Modules,
11-
Policy,
12-
} from "@medusajs/utils"
7+
import { definePolicies, Modules, Policy } from "@medusajs/utils"
138

149
jest.setTimeout(60000)
1510

@@ -834,9 +829,6 @@ medusaIntegrationTestRunner({
834829

835830
it("should prevent user from assigning policies they don't have access to", async () => {
836831
const userModule = appContainer.resolve(Modules.USER)
837-
const remoteLink = appContainer.resolve(
838-
ContainerRegistrationKeys.LINK
839-
)
840832

841833
// Create policies
842834
const policiesWorkflow = createRbacPoliciesWorkflow(appContainer)
@@ -887,14 +879,13 @@ medusaIntegrationTestRunner({
887879
},
888880
])
889881

890-
await remoteLink.create({
891-
[Modules.USER]: {
892-
user_id: user.id,
893-
},
894-
[Modules.RBAC]: {
895-
rbac_role_id: limitedRoles[0].id,
882+
await rbacService.createRbacRoleAssignments([
883+
{
884+
role_id: limitedRoles[0].id,
885+
reference: "user",
886+
reference_id: user.id,
896887
},
897-
})
888+
])
898889

899890
// Try to create a role with write permission
900891
let error: any
@@ -922,9 +913,6 @@ medusaIntegrationTestRunner({
922913

923914
it("should allow user to create roles with policies they have access to", async () => {
924915
const userModule = appContainer.resolve(Modules.USER)
925-
const remoteLink = appContainer.resolve(
926-
ContainerRegistrationKeys.LINK
927-
)
928916

929917
// Create policies
930918
const policiesWorkflow = createRbacPoliciesWorkflow(appContainer)
@@ -969,14 +957,13 @@ medusaIntegrationTestRunner({
969957
},
970958
])
971959

972-
await remoteLink.create({
973-
[Modules.USER]: {
974-
user_id: user.id,
975-
},
976-
[Modules.RBAC]: {
977-
rbac_role_id: adminRoles[0].id,
960+
await rbacService.createRbacRoleAssignments([
961+
{
962+
role_id: adminRoles[0].id,
963+
reference: "user",
964+
reference_id: user.id,
978965
},
979-
})
966+
])
980967

981968
// User should be able to create a role with read permission (which they have)
982969
const { result: newRoles } = await rolesWorkflow.run({
@@ -1004,9 +991,6 @@ medusaIntegrationTestRunner({
1004991

1005992
it("should allow user with inherited permissions to create roles", async () => {
1006993
const userModule = appContainer.resolve(Modules.USER)
1007-
const remoteLink = appContainer.resolve(
1008-
ContainerRegistrationKeys.LINK
1009-
)
1010994

1011995
// Create policies
1012996
const policiesWorkflow = createRbacPoliciesWorkflow(appContainer)
@@ -1064,14 +1048,13 @@ medusaIntegrationTestRunner({
10641048
},
10651049
])
10661050

1067-
await remoteLink.create({
1068-
[Modules.USER]: {
1069-
user_id: user.id,
1070-
},
1071-
[Modules.RBAC]: {
1072-
rbac_role_id: managerRoles[0].id,
1051+
await rbacService.createRbacRoleAssignments([
1052+
{
1053+
role_id: managerRoles[0].id,
1054+
reference: "user",
1055+
reference_id: user.id,
10731056
},
1074-
})
1057+
])
10751058

10761059
// User should be able to create a role with read permission (inherited)
10771060
const { result: newRoles } = await rolesWorkflow.run({

packages/core/core-flows/src/invite/steps/get-invite-roles.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { MedusaModule } from "@medusajs/framework/modules-sdk"
12
import { IRbacModuleService } from "@medusajs/framework/types"
23
import { Modules } from "@medusajs/framework/utils"
34
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
@@ -28,6 +29,10 @@ export const getInviteRolesStepId = "get-invite-roles-step"
2829
export const getInviteRolesStep = createStep(
2930
getInviteRolesStepId,
3031
async (input: GetInviteRolesStepInput, { container }) => {
32+
if (!MedusaModule.isInstalled(Modules.RBAC)) {
33+
return new StepResponse([])
34+
}
35+
3136
const service = container.resolve<IRbacModuleService>(Modules.RBAC)
3237

3338
const assignments = await service.listRbacRoleAssignments({

packages/core/core-flows/src/rbac/steps/create-role-assignments.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { IRbacModuleService } from "@medusajs/framework/types"
22
import { Modules } from "@medusajs/framework/utils"
33
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
44
import { invalidateRoleAssignmentCache } from "../utils/invalidate-role-assignment-cache"
5+
import { MedusaModule } from "@medusajs/framework/modules-sdk"
56

67
/**
78
* A single role assignment to create.
@@ -38,12 +39,12 @@ export const createRoleAssignmentsStepId = "create-role-assignments"
3839
export const createRoleAssignmentsStep = createStep(
3940
createRoleAssignmentsStepId,
4041
async (data: CreateRoleAssignmentsStepInput, { container }) => {
41-
const service = container.resolve<IRbacModuleService>(Modules.RBAC)
42-
43-
if (!data?.length) {
42+
if (!data?.length || !MedusaModule.isInstalled(Modules.RBAC)) {
4443
return new StepResponse([], [])
4544
}
4645

46+
const service = container.resolve<IRbacModuleService>(Modules.RBAC)
47+
4748
const created = await service.createRbacRoleAssignments(
4849
data.map((assignment) => ({
4950
role_id: assignment.role_id,

packages/core/core-flows/src/rbac/steps/delete-role-assignments.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { IRbacModuleService } from "@medusajs/framework/types"
22
import { Modules } from "@medusajs/framework/utils"
33
import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
44
import { invalidateRoleAssignmentCache } from "../utils/invalidate-role-assignment-cache"
5+
import { MedusaModule } from "@medusajs/framework/modules-sdk"
56

67
/**
78
* The filters identifying the role assignments to delete.
@@ -32,12 +33,15 @@ export const deleteRoleAssignmentsStepId = "delete-role-assignments"
3233
export const deleteRoleAssignmentsStep = createStep(
3334
deleteRoleAssignmentsStepId,
3435
async (data: DeleteRoleAssignmentsStepInput, { container }) => {
35-
const service = container.resolve<IRbacModuleService>(Modules.RBAC)
36-
37-
if (!data?.reference_id?.length) {
36+
if (
37+
!data?.reference_id?.length ||
38+
!MedusaModule.isInstalled(Modules.RBAC)
39+
) {
3840
return new StepResponse([], [])
3941
}
4042

43+
const service = container.resolve<IRbacModuleService>(Modules.RBAC)
44+
4145
const filters: {
4246
reference: string
4347
reference_id: string[]

packages/core/core-flows/src/rbac/steps/validate-roles-exist.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { MedusaModule } from "@medusajs/framework/modules-sdk"
12
import { MedusaError, Modules } from "@medusajs/framework/utils"
23
import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"
34

@@ -19,7 +20,7 @@ export const validateRolesExistStepId = "validate-roles-exist-step"
1920
export const validateRolesExistStep = createStep(
2021
validateRolesExistStepId,
2122
async (roleIds: string[], { container }) => {
22-
if (!roleIds.length) {
23+
if (!roleIds.length || !MedusaModule.isInstalled(Modules.RBAC)) {
2324
return new StepResponse(undefined)
2425
}
2526

0 commit comments

Comments
 (0)