diff --git a/src/pages/entities/[id]/roles/[role].tsx b/src/pages/entities/[id]/roles/[role].tsx index 268862ce..40112918 100644 --- a/src/pages/entities/[id]/roles/[role].tsx +++ b/src/pages/entities/[id]/roles/[role].tsx @@ -203,14 +203,14 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro .finally(() => setIsLoading(false)); } - const disableCheckbox = (permission: RolePermission) => { - if (!canEditPermissions) return false - if (disableEdit) return false - + const enableCheckbox = (permission: RolePermission) => { + if (!canEditPermissions || disableEdit) return false return doesEntityAllow(user, entity, permission) } const togglePermissions = (p: RolePermission) => setPermissions(prev => prev.includes(p) ? prev.filter(x => x !== p) : [...prev, p]) + const toggleMultiplePermissions = (p: RolePermission[]) => + setPermissions(prev => [...prev.filter(x => !p.includes(x)), ...(p.every(x => prev.includes(x)) ? [] : p)]) return ( <> @@ -271,7 +271,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro permissions.includes(k))} - onChange={() => mapBy(USER_MANAGEMENT, 'key').forEach(togglePermissions)} + onChange={() => toggleMultiplePermissions(mapBy(USER_MANAGEMENT, 'key').filter(enableCheckbox))} > Select all @@ -279,7 +279,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
{USER_MANAGEMENT.map(({ label, key }) => ( - togglePermissions(key)}> + togglePermissions(key)}> {label} ))} @@ -292,7 +292,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro permissions.includes(k))} - onChange={() => mapBy(EXAM_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)} + onChange={() => toggleMultiplePermissions(mapBy(EXAM_MANAGEMENT, 'key').filter(enableCheckbox))} > Select all @@ -300,7 +300,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
{EXAM_MANAGEMENT.map(({ label, key }) => ( - togglePermissions(key)}> + togglePermissions(key)}> {label} ))} @@ -313,7 +313,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro permissions.includes(k))} - onChange={() => mapBy(CLASSROOM_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)} + onChange={() => toggleMultiplePermissions(mapBy(CLASSROOM_MANAGEMENT, 'key').filter(enableCheckbox))} > Select all @@ -321,7 +321,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
{CLASSROOM_MANAGEMENT.map(({ label, key }) => ( - togglePermissions(key)}> + togglePermissions(key)}> {label} ))} @@ -334,7 +334,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro permissions.includes(k))} - onChange={() => mapBy(ENTITY_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)} + onChange={() => toggleMultiplePermissions(mapBy(ENTITY_MANAGEMENT, 'key').filter(enableCheckbox))} > Select all @@ -342,7 +342,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
{ENTITY_MANAGEMENT.map(({ label, key }) => ( - togglePermissions(key)}> + togglePermissions(key)}> {label} ))} @@ -355,7 +355,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro permissions.includes(k))} - onChange={() => mapBy(ASSIGNMENT_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)} + onChange={() => toggleMultiplePermissions(mapBy(ASSIGNMENT_MANAGEMENT, 'key').filter(enableCheckbox))} > Select all @@ -363,7 +363,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
{ASSIGNMENT_MANAGEMENT.map(({ label, key }) => ( - togglePermissions(key)}> + togglePermissions(key)}> {label} ))} diff --git a/src/utils/permissions.ts b/src/utils/permissions.ts index 71059a57..15aa15e2 100644 --- a/src/utils/permissions.ts +++ b/src/utils/permissions.ts @@ -1,9 +1,10 @@ import { EntityWithRoles, Role } from "@/interfaces/entity"; -import {PermissionType} from "@/interfaces/permissions"; -import {User, Type, userTypes} from "@/interfaces/user"; +import { PermissionType } from "@/interfaces/permissions"; +import { User, Type, userTypes } from "@/interfaces/user"; import { RolePermission } from "@/resources/entityPermissions"; import axios from "axios"; import { findBy, mapBy } from "."; +import { isAdmin } from "./users"; export function checkAccess(user: User, types: Type[], permissions?: PermissionType[], permission?: PermissionType) { if (!user) { @@ -50,7 +51,7 @@ export function findAllowedEntitiesSomePermissions(user: User, entities: EntityW } export function doesEntityAllow(user: User, entity: EntityWithRoles, permission: RolePermission) { - if (["admin", "developer"].includes(user?.type)) return true + if (isAdmin(user)) return true const userEntity = findBy(user.entities, 'id', entity?.id) if (!userEntity) return false