All files / app/src/features/validator/lib validate-by-user-permissions.ts

55.55% Statements 20/36
85.71% Branches 6/7
50% Functions 1/2
55.55% Lines 20/36

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 451x       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)
      })
    })
  }
}