Команда 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 будет содержать один объект, описывающий новые значения разрешений и старые значения, от которых они были изменены (которые могут быть null).
Разрешения, которые не определены на локальном уровне, будут унаследованы от следующей по масштабу области. Например, операция записи в таблицу сначала проверит, установлены ли разрешения write явно на значения true или false для этой таблицы и сочетания учетной записи; если нет, будут использоваться разрешения write для базы данных, если они явно установлены; и если разрешения для таблицы или базы данных не заданы для этой учетной записи, будут использоваться глобальные разрешения write для этой учетной записи.
Примечание: Для всех учетных записей, кроме специальной, определённой системой admin учетной записи, разрешения, которые не установлены явно ни в какой области, по умолчанию будут false. При создании новой учетной записи пользователя путем вставки записи в систему таблиц, этой учетной записи не будет предоставлено никаких разрешений, пока они не будут явно предоставлены.
Для получения полного описания разрешений, прочтите Разрешения и учетные записи пользователей.
Пример: Предоставить учетной записи пользователя chatapp разрешения на чтение и запись в базе данных users.
r.db('users').grant('chatapp', {read: true, write: true}).run(conn, callback);
// Result passed to callback
{
"granted": 1,
"permissions_changes": [
{
"new_val": { "read": true, "write": true },
"old_val": { null }
}
]
Пример: Запретить разрешение на запись учетной записи chatapp для таблицы admin.
r.db('users').table('admin').grant('chatapp', {write: false}).run(conn, callback);
Это переопределит разрешения write: true , предоставленные в первом примере, но только для этой таблицы. Другие таблицы в базе данных users будут наследовать разрешения от базы данных.
Пример: Удалить разрешения на уровне таблицы для учетной записи chatapp.
r.db('users').table('admin').grant('chatapp', {write: null}).run(conn, callback);
Указав null, разрешение на уровне таблицы write будет удалено, и оно снова будет унаследовано от следующей по приоритету области (база данных или глобальная).
Пример: Предоставить chatapp возможность использовать HTTP-соединения.
r.grant('chatapp', {connect: true}).run(conn, callback);
Это разрешение может быть предоставлено только на глобальном уровне.
Пример: Предоставить учетной записи monitor только разрешение на чтение ко всем базам данных.
r.grant('monitor', {read: true}).run(conn, callback);
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/grant/