Corrected a problem related to the permission toggling
This commit is contained in:
@@ -203,14 +203,14 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
.finally(() => setIsLoading(false));
|
.finally(() => setIsLoading(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
const disableCheckbox = (permission: RolePermission) => {
|
const enableCheckbox = (permission: RolePermission) => {
|
||||||
if (!canEditPermissions) return false
|
if (!canEditPermissions || disableEdit) return false
|
||||||
if (disableEdit) return false
|
|
||||||
|
|
||||||
return doesEntityAllow(user, entity, permission)
|
return doesEntityAllow(user, entity, permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
const togglePermissions = (p: RolePermission) => setPermissions(prev => prev.includes(p) ? prev.filter(x => x !== p) : [...prev, p])
|
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 (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -271,7 +271,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
disabled={!canEditPermissions || disableEdit}
|
disabled={!canEditPermissions || disableEdit}
|
||||||
isChecked={mapBy(USER_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
isChecked={mapBy(USER_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
||||||
onChange={() => mapBy(USER_MANAGEMENT, 'key').forEach(togglePermissions)}
|
onChange={() => toggleMultiplePermissions(mapBy(USER_MANAGEMENT, 'key').filter(enableCheckbox))}
|
||||||
>
|
>
|
||||||
Select all
|
Select all
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
@@ -279,7 +279,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Separator />
|
<Separator />
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
{USER_MANAGEMENT.map(({ label, key }) => (
|
{USER_MANAGEMENT.map(({ label, key }) => (
|
||||||
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
||||||
{label}
|
{label}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
))}
|
))}
|
||||||
@@ -292,7 +292,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
disabled={!canEditPermissions || disableEdit}
|
disabled={!canEditPermissions || disableEdit}
|
||||||
isChecked={mapBy(EXAM_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
isChecked={mapBy(EXAM_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
||||||
onChange={() => mapBy(EXAM_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
|
onChange={() => toggleMultiplePermissions(mapBy(EXAM_MANAGEMENT, 'key').filter(enableCheckbox))}
|
||||||
>
|
>
|
||||||
Select all
|
Select all
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
@@ -300,7 +300,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Separator />
|
<Separator />
|
||||||
<div className="grid grid-cols-3 gap-4">
|
<div className="grid grid-cols-3 gap-4">
|
||||||
{EXAM_MANAGEMENT.map(({ label, key }) => (
|
{EXAM_MANAGEMENT.map(({ label, key }) => (
|
||||||
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
||||||
{label}
|
{label}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
))}
|
))}
|
||||||
@@ -313,7 +313,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
disabled={!canEditPermissions || disableEdit}
|
disabled={!canEditPermissions || disableEdit}
|
||||||
isChecked={mapBy(CLASSROOM_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
isChecked={mapBy(CLASSROOM_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
||||||
onChange={() => mapBy(CLASSROOM_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
|
onChange={() => toggleMultiplePermissions(mapBy(CLASSROOM_MANAGEMENT, 'key').filter(enableCheckbox))}
|
||||||
>
|
>
|
||||||
Select all
|
Select all
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
@@ -321,7 +321,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Separator />
|
<Separator />
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
{CLASSROOM_MANAGEMENT.map(({ label, key }) => (
|
{CLASSROOM_MANAGEMENT.map(({ label, key }) => (
|
||||||
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
||||||
{label}
|
{label}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
))}
|
))}
|
||||||
@@ -334,7 +334,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
disabled={!canEditPermissions || disableEdit}
|
disabled={!canEditPermissions || disableEdit}
|
||||||
isChecked={mapBy(ENTITY_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
isChecked={mapBy(ENTITY_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
||||||
onChange={() => mapBy(ENTITY_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
|
onChange={() => toggleMultiplePermissions(mapBy(ENTITY_MANAGEMENT, 'key').filter(enableCheckbox))}
|
||||||
>
|
>
|
||||||
Select all
|
Select all
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
@@ -342,7 +342,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Separator />
|
<Separator />
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
{ENTITY_MANAGEMENT.map(({ label, key }) => (
|
{ENTITY_MANAGEMENT.map(({ label, key }) => (
|
||||||
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
||||||
{label}
|
{label}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
))}
|
))}
|
||||||
@@ -355,7 +355,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
disabled={!canEditPermissions || disableEdit}
|
disabled={!canEditPermissions || disableEdit}
|
||||||
isChecked={mapBy(ASSIGNMENT_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
isChecked={mapBy(ASSIGNMENT_MANAGEMENT, 'key').every(k => permissions.includes(k))}
|
||||||
onChange={() => mapBy(ASSIGNMENT_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
|
onChange={() => toggleMultiplePermissions(mapBy(ASSIGNMENT_MANAGEMENT, 'key').filter(enableCheckbox))}
|
||||||
>
|
>
|
||||||
Select all
|
Select all
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
@@ -363,7 +363,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
|
|||||||
<Separator />
|
<Separator />
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
{ASSIGNMENT_MANAGEMENT.map(({ label, key }) => (
|
{ASSIGNMENT_MANAGEMENT.map(({ label, key }) => (
|
||||||
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
|
||||||
{label}
|
{label}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { EntityWithRoles, Role } from "@/interfaces/entity";
|
import { EntityWithRoles, Role } from "@/interfaces/entity";
|
||||||
import {PermissionType} from "@/interfaces/permissions";
|
import { PermissionType } from "@/interfaces/permissions";
|
||||||
import {User, Type, userTypes} from "@/interfaces/user";
|
import { User, Type, userTypes } from "@/interfaces/user";
|
||||||
import { RolePermission } from "@/resources/entityPermissions";
|
import { RolePermission } from "@/resources/entityPermissions";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { findBy, mapBy } from ".";
|
import { findBy, mapBy } from ".";
|
||||||
|
import { isAdmin } from "./users";
|
||||||
|
|
||||||
export function checkAccess(user: User, types: Type[], permissions?: PermissionType[], permission?: PermissionType) {
|
export function checkAccess(user: User, types: Type[], permissions?: PermissionType[], permission?: PermissionType) {
|
||||||
if (!user) {
|
if (!user) {
|
||||||
@@ -50,7 +51,7 @@ export function findAllowedEntitiesSomePermissions(user: User, entities: EntityW
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function doesEntityAllow(user: User, entity: EntityWithRoles, permission: RolePermission) {
|
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)
|
const userEntity = findBy(user.entities, 'id', entity?.id)
|
||||||
if (!userEntity) return false
|
if (!userEntity) return false
|
||||||
|
|||||||
Reference in New Issue
Block a user