Pre-defined role, automatically granted to new users when they are created with box.schema.user.create(user-name). Therefore a convenient way to grant ‘read’ on space ‘t’ to every user that will ever exist is with box.schema.role.grant('public','read','space','t').
pico.cas становится доступна роли public. Т е становится доступна всем пользователям без предварительных проверок. При выполнении операции проверка прав доступа происходит на лидере. В случае ошибки доступа ошибка возвращается клиенту. В случае прохождения проверки запись применяется лидером.
Ошибка возникает после ответа клиенту, на этапе применения нет возможности зарепортить ее клиенту. Рассматриваю варианты.
Варианты:
В случае ошибки применения записи дописывать ошибку в лог, и чтобы клиент ее выловил. Плохо потому что клиент не знает индекс записи с ошибкой заранее, т е не будет знать надо ли ему ждать следующей записи после получения записи о самом изменении.
Попытаться вытащить функцию проверки пермишенов из тарантула, и звать ее на лидере перед propose чтобы была возможность вернуть клиенту ошибку до применения записи. Выглядит так что эта функция подходит: access_check_ddl
Аналогично предыдущему, но реализовать проверку собственноручно не затрагивая тарантул на основе _pico_privilege.
Дополнительно стоит обратит ьвнимание что при проверке в propose необходимо так же проверить непримененные записи, т к иначе возможен рейс с записью revoke. В таком случае при применении cas записи возникнет ошибка.
В доке сейчас нет описания по CaS в отношении acl. Acl записи CaS сейчас генерируются только функциями нашего lua api. Т е описание необходимых пермишенов должно быть на этих функциях.
Соответственно в текущею доку доку: Для успешного выполнения операции пользователю необходимы права на запись в указанный спейс.
План:
По умолчанию выдать права роли public на выполнение pico.cas
Непривилегированному пользователю для выполнения cas на лидере требуется доступ в системный спейс. Проблему планируется решить повышением привилений в растокоде
Дополнительно стоит обратит ьвнимание что при проверке в propose необходимо так же проверить непримененные записи, т к иначе возможен рейс с записью revoke. В таком случае при применении cas записи возникнет ошибка.
В идеальном мире проврка привилегий должна была происходить при вставке записи в лимб. Соответственно и права в лимбе были бы настроены с учетом всех непримененных записей. Но пока лимба нет, придется накодить проверку по-скаутски.