Команда ReQL: grant
Синтаксис команды
r.grant("username", r.hashMap("permission", bool[, ...])) → object
db.grant("username", r.hashMap("permission", bool[, ...])) → object
table.grant("username", r.hashMap("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", r.hashMap("read", true).with("write", true)).run(conn);
Возврат:
{
"granted": 1,
"permissions_changes": [
{
"new_val": { "read": true, "write": true },
"old_val": { null }
}
]
Пример: Отмена разрешения на запись для учетной записи chatapp в таблице admin.
r.db("users").table("admin").grant("chatapp", r.hashMap("write", false)).run(conn);
Это переопределит разрешения write: true , предоставленные в первом примере, но только для этой таблицы. Другие таблицы в базе данных users будут унаследовать разрешения из базы данных.
Пример: Удаление разрешения на уровне таблицы для учетной записи chatapp.
r.db("users").table("admin").grant("chatapp", r.hashMap("write", null)).run(conn);
Указав None, разрешение на уровне таблицы write удаляется, и оно снова будет унаследовано из следующей более высокой области (базы данных или глобальной).
Пример: Предоставление учетной записи chatapp возможности использования HTTP-соединений.
r.grant("chatapp", r.hashMap("connect", true)).run(conn);
Это разрешение может быть предоставлено только на глобальном уровне.
Пример: Предоставление учетной записи monitor только разрешений на чтение для всех баз данных.
r.grant("monitor", r.hashMap("read", true)).run(conn);
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/java/grant/