Введение
Проектный ассистент помогает коллегам читать планы. Он предлагает вызов инструмента — структурированный запрос вроде documents.read. Tool Server выполняет действие. Правдоподобное предложение не даёт права на выполнение.
Вы обслуживаете учебный сервис с синтетическими данными. Начните с нормального чтения, затем двумя небольшими правками уберите лишние права записи и удаления. Предложения детерминированно воспроизводятся, а не поступают от работающей модели. Аутентификация, решения сервера и операции с документами реальны. Эта работа не проверяет устойчивость к инъекциям в запросы.
Используйте Policy Editor для конфигурации, Test Client для подтверждённых запросов и Assistant Tool Lab для страницы воспроизведения. Терминалы работают под разными пользователями одной системы. Policy Editor намеренно имеет права обслуживания; Test Client не может менять политику или применять sudo. Достаточно базового знакомства с терминалом.
Сохраните чтение и уберите запись
На этом шаге наблюдайте обычное чтение документа, затем уберите у ассистента право записи.
Чтобы начать этот шаг, выберите вкладку Assistant Tool Lab в интерфейсе лабораторной работы.
Учебные аккаунты — alice и bob. Principal — личность пользователя, установленная аутентификацией. У обоих есть роль assistant, объединяющая права инструментов. Документы синтетические: alice-notes принадлежит Alice, bob-notes — Bob, а team-plan Bob открыл Alice. Только demo-pad предназначен для одноразовых демонстраций.
Перейдите на вкладку Assistant Tool Lab. Выберите alice, введите пароль training-alice и нажмите Sign in. Оставьте инструмент documents.read и документ alice-notes, затем нажмите Replay proposal. Трассировка отделяет недоверенное предложение от результата сервера. Ожидайте HTTP 200, субъекта alice, решение allowed и Synthetic Alice planning notes. Это настоящее чтение документа.

Перейдите на вкладку Test Client. Подготовленная команда assistant отправляет HTTP-запросы с аутентифицированным аккаунтом. replay отправляет предложение через маршрут повтора; call обращается прямо к обработчику инструмента. Следующие два слова задают инструмент и документ. Выполните:
Перед выполнением следующей команды перейдите на вкладку Test Client.
assistant replay documents.read team-plan
Ожидаются HTTP 200 и Synthetic shared project plan. Теперь наблюдайте избыточные права только на одноразовом документе:
assistant replay documents.write demo-pad
Ожидаются HTTP 200 и "effect": "written". Сервер действительно изменил демонстрационный документ. Роль только для чтения не должна этого делать.
Перейдите на вкладку Policy Editor. cat выводит файл; этот абсолютный путь указывает действующий список разрешённых инструментов:
Перед выполнением следующей команды перейдите на вкладку Policy Editor.
cat /home/labex/project/tools.json
JSON использует имена и значения в кавычках, двоеточие между ними и квадратные скобки для списка. В assistant сейчас есть чтение, запись и удаление. Удаление пункта меню оставит прямые запросы открытыми; проверка обработчика загружает этот список при каждом запросе.
Замените файл следующей промежуточной политикой. cat > path записывает текст вместо печати. Заключённый в кавычки EOF начинает буквальный here-document; завершающий EOF должен стоять отдельно на строке. Небольшой файл заменяется полностью, поэтому повторение исправляет опечатку.
cat > /home/labex/project/tools.json <<'EOF'
{
"assistant": ["documents.read", "documents.delete"]
}
EOF
Вернитесь на вкладку Test Client и повторите предложение записи:
Перед выполнением следующей команды перейдите на вкладку Test Client.
assistant replay documents.write demo-pad
Ожидайте HTTP 403 и tool_denied. Ответ 403 означает, что сервис получил и отклонил запрос; ошибка соединения означает, что запрос не дошёл до решения. CLI выводит намеренные отказы, не завершая оболочку. При policy_error перейдите на вкладку Policy Editor, повторите полную правку JSON, затем вернитесь на Test Client и повторите запросы. Перезапуск не нужен.
assistant call documents.read alice-notes
Чтение должно по-прежнему возвращать HTTP 200. Проверка испытывает запрет записи и обычное чтение для обеих подтверждённых личностей; копировать вывод не требуется.
Закройте прямой путь удаления
На этом шаге завершите роль только для чтения и проверьте прямой обработчик и воспроизведение.
Чтобы начать этот шаг, выберите вкладку Policy Editor в интерфейсе лабораторной работы.
Удаление — отдельная операция. Блокировка записи не блокирует удаление автоматически. Перейдите на вкладку Policy Editor. Оставьте в списке единственную необходимую роли операцию. Используйте ту же технику замены полного файла:
Перед выполнением следующей команды перейдите на вкладку Policy Editor.
cat > /home/labex/project/tools.json <<'EOF'
{
"assistant": ["documents.read"]
}
EOF
Перейдите на вкладку Test Client. Отправьте прямой запрос удаления временного блокнота:
Перед выполнением следующей команды перейдите на вкладку Test Client.
assistant call documents.delete demo-pad
Ожидаются HTTP 403 и tool_denied. Поскольку call обходит страницу воспроизведения, это подтверждает: видимый интерфейс не является границей принудительной проверки. Испытайте и прямую запись:
assistant call documents.write demo-pad
Ожидайте тот же отказ. Убедитесь, что Alice по-прежнему читает законно открытый ей документ:
assistant call documents.read team-plan
Ожидайте HTTP 200 и Synthetic shared project plan. Перейдите на вкладку Assistant Tool Lab. Сохранив вход Alice, выберите documents.delete, введите demo-pad и нажмите Replay proposal. Здесь сервер тоже должен отказать с tool_denied.

Просьба «пожалуйста, только читай» не заменяет проверку. Сервер должен решать независимо от предложения. Отключение всех инструментов также сломает полезную работу ассистента. Если чтение запрещено, проверьте точное написание documents.read в JSON. Проверка вызывает тот же защитный код обработчиков записи и удаления на одноразовых документах в памяти и проверяет реальные разрешённые чтения; документы учащегося никогда не удаляются.
Инструмент чтения пока может запросить чужой закрытый объект. Следующая работа добавляет отдельную границу документов.
Резюме
Вы сохранили обычное чтение и убрали права записи и удаления. Воспроизводимые предложения и прямые вызовы теперь проходят одну реальную серверную проверку. Права инструмента — лишь одна граница: разрешённое чтение всё равно требует решения для конкретного документа.



