diff --git a/apps/web/config/defineAbilities.ts b/apps/web/config/defineAbilities.ts index 83f55b708..2569c1de8 100644 --- a/apps/web/config/defineAbilities.ts +++ b/apps/web/config/defineAbilities.ts @@ -1,9 +1,16 @@ import { AbilityBuilder, createMongoAbility } from '@casl/ability'; import { UserRolesEnum } from '@impler/shared'; -import { AppAbility, ROLE_BASED_ACCESS } from './constants.config'; +import { ActionsEnum, AppAbility, ROLE_BASED_ACCESS, SubjectsEnum } from './constants.config'; -export const defineAbilitiesFor = (role?: string): AppAbility => { +export const defineAbilitiesFor = (role?: string, isOwner?: boolean): AppAbility => { const { can, build } = new AbilityBuilder(createMongoAbility); + + if (isOwner) { + can(ActionsEnum.MANAGE, SubjectsEnum.ALL); + + return build(); + } + const roleBasedAccess = ROLE_BASED_ACCESS[role as UserRolesEnum] || []; roleBasedAccess.forEach(({ action, subject }) => { diff --git a/apps/web/hooks/useProject.tsx b/apps/web/hooks/useProject.tsx index bb97c50e6..7c72b1e8b 100644 --- a/apps/web/hooks/useProject.tsx +++ b/apps/web/hooks/useProject.tsx @@ -136,7 +136,7 @@ export function useProject() { ...profileData, projectName: project?.name || '', }); - setAbility(defineAbilitiesFor(profileData.role)); + setAbility(defineAbilitiesFor(profileData.role, project?.isOwner)); } }, [profileData, projects, setAbility, setProfileInfo]);