Skip to content

Commit 7055b10

Browse files
committed
fix usePermission hook
1 parent 50da7d7 commit 7055b10

2 files changed

Lines changed: 23 additions & 5 deletions

File tree

apps/web/app/(use-page-wrapper)/settings/(settings-layout)/organizations/roles/_components/__tests__/usePermissions.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,17 @@ describe("usePermissions", () => {
4444

4545
expect(getResourcePermissionLevel("eventType", permissions)).toBe("all");
4646
});
47+
48+
it("should return 'all' for resource with manage permission", () => {
49+
const permissions = ["eventType.manage"];
50+
51+
expect(getResourcePermissionLevel("eventType", permissions)).toBe("all");
52+
});
53+
54+
it("should return 'all' for resource with manage permission even if other permissions are missing", () => {
55+
const permissions = ["eventType.manage", "eventType.read"]; // Has manage and read, but missing create, update, delete
56+
57+
expect(getResourcePermissionLevel("eventType", permissions)).toBe("all");
58+
});
4759
});
4860
});

apps/web/app/(use-page-wrapper)/settings/(settings-layout)/organizations/roles/_components/usePermissions.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,20 @@ export function usePermissions(): UsePermissionsReturn {
5151
return "all";
5252
}
5353

54-
// Filter out internal keys like _resource when checking permissions
55-
const allResourcePerms = Object.keys(resourceConfig)
56-
.filter((action) => !action.startsWith("_"))
54+
// Check if user has manage permission for this resource
55+
const hasManagePermission = permissions.includes(`${resource}.manage`);
56+
if (hasManagePermission) {
57+
return "all";
58+
}
59+
60+
// Filter out internal keys like _resource and manage when checking for individual permissions
61+
const crudPermissions = Object.keys(resourceConfig)
62+
.filter((action) => !action.startsWith("_") && action !== "manage")
5763
.map((action) => `${resource}.${action}`);
58-
const hasAllPerms = allResourcePerms.every((p) => permissions.includes(p));
64+
const hasAllCrudPerms = crudPermissions.every((p) => permissions.includes(p));
5965
const hasReadPerm = permissions.includes(`${resource}.${CrudAction.Read}`);
6066

61-
if (hasAllPerms) return "all";
67+
if (hasAllCrudPerms) return "all";
6268
if (hasReadPerm) return "read";
6369
return "none";
6470
};

0 commit comments

Comments
 (0)