userTypePermissionService->allGuestPermissions()); } else { $userPermissions = new UserTypePermissionCollection($this->userTypePermissionService->allPermissionsByUserType($user->type)); } if (!$this->hasPermission($userPermissions, $scope, $permissionType)) { return response()->json(['message' => 'Forbidden'], 403); } return $next($request); } private function hasPermission(UserTypePermissionCollection $userPermissions, string $scope, string $permissionType): bool { $bitwisePermissionTable = [ 'view' => 1, 'add' => 2, 'edit' => 4, 'delete' => 8, 'print' => 16, 'export' => 32, 'import' => 64, 'limit' => 128, 'menu' => 256, ]; $requiredPermission = $bitwisePermissionTable[$permissionType] ?? 0; foreach ($userPermissions as $permission) { if ($permission['scope'] === $scope && ($permission['bits'] & $requiredPermission)) { return true; } } return false; } }