Команда ReQL: grant
Синтаксис команды
r.grant("username", {:permission => bool[, ...]}) → object
db.grant("username", {:permission => bool[, ...]}) → object
table.grant("username", {:permission => bool[, ...]}) → object
Описание
Назначение или отмена разрешений доступа для учетной записи пользователя, глобально или по базе данных или по таблице.
Существует четыре различных разрешения, которые могут быть предоставлены учетной записи:
-
readпозволяет читать данные в таблицах. -
writeпозволяет изменять данные, включая вставку, замену/обновление и удаление. -
connectпозволяет пользователю открывать HTTP-соединения через команду http. Это разрешение может быть предоставлено только на глобальном уровне. -
configпозволяет пользователям создавать/удалять вторичные индексы в таблице и изменять конфигурацию кластера; создавать и удалять таблицы, если разрешение предоставлено на уровне базы данных; и создавать и удалять базы данных, если разрешение предоставлено глобально.
Разрешения могут быть предоставлены на глобальном уровне или для определенной таблицы или базы данных. Область действия определяется вызовом grant самостоятельно (например, r.grant(), в таблице (r.table().grant()) или в базе данных (r.db().grant()).
Команда grant возвращает объект следующего формата:
{
:granted => 1,
:permissions_changes => [
{
:new_val => { new permissions },
:old_val => { original permissions }
}
]
Поле granted всегда будет 1, а список permissions_changes будет содержать один объект, описывающий новые значения разрешений и старые значения, с которых они были изменены (которые могут быть nil).
Разрешения, не определенные на локальном уровне, наследуются от следующей по объему области. Например, операция записи в таблицу сначала проверит, установлены ли разрешения write явным образом в true или false для этой комбинации таблицы и учетной записи; если нет, будут использоваться разрешения write для базы данных, если они явно установлены; а если ни для таблицы, ни для базы данных разрешения для этой учетной записи не установлены, будут использоваться глобальные разрешения write для этой учетной записи.
Примечание: Для всех учетных записей, кроме специальной, определенной системой admin учетной записи, разрешения, которые не заданы явно ни в какой области, фактически будут false. Когда вы создаете новую учетную запись пользователя, вставив запись в систему таблиц, эта учетная запись не будет иметь никаких разрешений, пока они явно не будут предоставлены.
Для получения полного описания разрешений, ознакомьтесь с разрешениями и учетными записями пользователей.
Пример: Предоставить учетной записи пользователя chatapp разрешения на чтение и запись в базе данных users.
> r.db('users').grant('chatapp', {:read => True, :write => true}).run(conn)
{
:granted => 1,
:permissions_changes => [
{
:new_val => { :read => true, :write => true },
:old_val => { nil }
}
]
Пример: Запретить разрешения на запись для учетной записи chatapp для таблицы admin.
r.db('users').table('admin').grant('chatapp', {'write': false}).run(conn)
Это переопределит разрешения write: true предоставленные в первом примере, но только для этой таблицы. Другие таблицы в базе данных users будут наследовать разрешения от базы данных.
Пример: Удалить разрешение на уровне таблицы для учетной записи chatapp.
r.db('users').table('admin').grant('chatapp', {'write': nil}).run(conn)
Указанием nil, разрешение табличного уровня write удаляется, и оно снова будет наследовать разрешения от следующей по объему области (базы данных или глобальной).
Пример: Предоставить chatapp возможность использования HTTP-соединений.
r.grant('chatapp', {'connect': true}).run(conn)
Это разрешение может быть предоставлено только на глобальном уровне.
Пример: Предоставить учетной записи monitor только для чтения доступ ко всем базам данных.
r.grant('monitor', {'read': true}).run(conn)
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/grant/