diff --git a/src/pages/entities/[id]/roles/[role].tsx b/src/pages/entities/[id]/roles/[role].tsx index d591ecd0..268862ce 100644 --- a/src/pages/entities/[id]/roles/[role].tsx +++ b/src/pages/entities/[id]/roles/[role].tsx @@ -11,6 +11,7 @@ import { requestUser } from "@/utils/api"; import { getEntityWithRoles } from "@/utils/entities.be"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { doesEntityAllow } from "@/utils/permissions"; +import { isAdmin } from "@/utils/users"; import { countEntityUsers } from "@/utils/users.be"; import axios from "axios"; import { withIronSessionSsr } from "iron-session/next"; @@ -111,6 +112,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res, params } if (!entityRole) return redirect(`/entities/${id}/roles`) if (!doesEntityAllow(user, entity, "view_entity_roles")) return redirect(`/entities/${id}`) + const disableEdit = !isAdmin(user) && findBy(user.entities, 'id', entity.id)?.role === entityRole.id const userCount = await countEntityUsers(id, { "entities.role": role }); @@ -120,6 +122,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res, params } entity, role: entityRole, userCount, + disableEdit }), }; }, sessionOptions); @@ -129,9 +132,10 @@ interface Props { entity: EntityWithRoles; role: Role; userCount: number; + disableEdit?: boolean } -export default function Role({ user, entity, role, userCount }: Props) { +export default function Role({ user, entity, role, userCount, disableEdit }: Props) { const [permissions, setPermissions] = useState(role.permissions) const [isLoading, setIsLoading] = useState(false); @@ -141,8 +145,9 @@ export default function Role({ user, entity, role, userCount }: Props) { const canRenameRole = useEntityPermission(user, entity, "rename_entity_role") const canDeleteRole = useEntityPermission(user, entity, "delete_entity_role") + const renameRole = () => { - if (!canRenameRole) return; + if (!canRenameRole || disableEdit) return; const label = prompt("Rename this role:", role.label); if (!label) return; @@ -162,7 +167,7 @@ export default function Role({ user, entity, role, userCount }: Props) { }; const deleteRole = () => { - if (!canDeleteRole || role.isDefault) return; + if (!canDeleteRole || role.isDefault || disableEdit) return; if (!confirm("Are you sure you want to delete this role?")) return; setIsLoading(true); @@ -181,7 +186,7 @@ export default function Role({ user, entity, role, userCount }: Props) { }; const editPermissions = () => { - if (!canEditPermissions) return + if (!canEditPermissions || disableEdit) return setIsLoading(true); @@ -198,6 +203,13 @@ export default function Role({ user, entity, role, userCount }: Props) { .finally(() => setIsLoading(false)); } + const disableCheckbox = (permission: RolePermission) => { + if (!canEditPermissions) return false + if (disableEdit) return false + + return doesEntityAllow(user, entity, permission) + } + const togglePermissions = (p: RolePermission) => setPermissions(prev => prev.includes(p) ? prev.filter(x => x !== p) : [...prev, p]) return ( @@ -257,6 +269,7 @@ export default function Role({ user, entity, role, userCount }: Props) {