Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 1x 1x 20x 20x 20x 20x 20x 20x 20x 20x 20x 1x 1x 12x 20x 20x 12x 12x 12x 20x | import { OperationType } from '@/entities/accounting-object'
import { OPERATIONS_PERMISSIONS, PermissionsByGroup } from '@/features/rolevik'
import { NextRouter } from 'next/router'
export const validateByUserPermissions = (
operation: OperationType,
permissions: PermissionsByGroup[],
objectContracts: string[],
router: NextRouter
) => {
const isObjectsSelected = objectContracts.length > 0
const operationPermissions = OPERATIONS_PERMISSIONS[operation]
if (!operationPermissions) return true
if (operationPermissions?.customCheck) {
return operationPermissions.customCheck(router, permissions, objectContracts)
}
const checkByGroup = (group: string) => {
return permissions.some(permission => {
return (
permission.group === group &&
permission.permissions?.some(permission => {
return operationPermissions?.permissions.includes(permission)
})
)
})
}
if (isObjectsSelected) {
const isValidByContracts = objectContracts.every(contract => {
return permissions.some(() => checkByGroup(`/warehouse_contracts/${contract}`))
})
if (isValidByContracts) return true
return permissions.some(() => checkByGroup('*'))
} else {
return permissions.some(permissions => {
return permissions.permissions?.some(permission => {
return operationPermissions.permissions.includes(permission)
})
})
}
}
|