false, 'errors' => ['data' => 'Укажите project_id и user_id']], 400); } // Приглашать участников могут только админы ProjectAccess::requireAdmin($project_id, $current_user_id); $result = ProjectAccess::addMember($project_id, $user_id, $current_user_id, $is_admin, $permissions); RestApi::response($result, $result['success'] ? 200 : 400); } // Обновление прав участника (только админ) if ($action === 'update_member') { $project_id = (int)($data['project_id'] ?? 0); $user_id = (int)($data['user_id'] ?? 0); $is_admin = isset($data['is_admin']) ? (bool)$data['is_admin'] : null; $permissions = $data['permissions'] ?? null; if (!$project_id || !$user_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и user_id']], 400); } // Редактировать права могут только админы ProjectAccess::requireAdmin($project_id, $current_user_id); // Обновляем is_admin если передан if ($is_admin !== null) { $result = ProjectAccess::setAdmin($project_id, $user_id, $is_admin, $current_user_id); if (!$result['success']) { RestApi::response($result, 400); } } // Обновляем права если переданы if ($permissions !== null) { $result = ProjectAccess::setPermissions($project_id, $user_id, $permissions, $current_user_id); if (!$result['success']) { RestApi::response($result, 400); } } RestApi::response(['success' => true]); } // Удаление участника из проекта (право remove_members или админ, или сам себя) if ($action === 'remove_member') { $project_id = (int)($data['project_id'] ?? 0); $user_id = (int)($data['user_id'] ?? 0); if (!$project_id || !$user_id) { RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и user_id']], 400); } // Пользователь может удалить сам себя, иначе нужно право remove_members if ((int)$user_id !== (int)$current_user_id) { ProjectAccess::requirePermission($project_id, $current_user_id, 'remove_members'); } $result = ProjectAccess::removeMember($project_id, $user_id, $current_user_id); RestApi::response($result, $result['success'] ? 200 : 400); } // Метод не указан if (!$action) { RestApi::response(['success' => false, 'error' => 'Укажите метод'], 400); } } ?>