Помимо ручного управления доступом с использованием кода, Odoo предоставляет два основных механизма, управляемых с помощью данных, для управления или ограничения доступа к данным.
Оба механизма связаны с конкретными пользователями через группы: пользователь принадлежит к любому числу групп, а механизмы безопасности связаны с группами, тем самым применяя механизмы безопасности к пользователям.
Контроль доступа
Управляется с помощью записей в модели ir.model.access
и определяет доступ к целой модели.
Каждый элемент управления относится к конкретной модели , к которой он предоставляет, разрешения и, группу.
Элементы управления доступом являются аддитивными, для данной модели пользователь имеет доступ ко всем разрешениям, предоставленным любой из групп, где он состоит: если пользователь принадлежит к одной группе, которая разрешает запись, а другая группа позволяет удалять, то он сможет и писать, и удалять.
Если группа не указана, управление доступом применяется ко всем пользователям, в противном случае оно применяется только к членам данной группы.
Доступные разрешения: создание (perm_create
), поиск и чтение (perm_read
), обновление существующих записей (perm_write
) и удаление существующих записей (perm_unlink
)
Правила для записи
Правила для записи - это условия, которым должны удовлетворять записи для совершения каких либо операций над ними (создание, чтение, обновление или удаление). Применяется от зписи к записи после применения контроля доступа.
Правило для записи имеет:
- модель, к которой относится
- набор разрешений, к которым оно применяется (например, если установлен
perm_read
, правило будет проверяться только при чтении записи) - Набор групп пользователей, к которым применяется правило, если не указано ни одной группы, то правило будет global
- используется домен для проверки, соответствует ли данная запись правилу (и доступен) или нет (и не доступен). Домен оценивается с помощью двух переменных в контексте:
user
- это запись текущего пользователя, аtime
- это time module
Глобальные правила и правила для групп (правила, ограниченные конкретными группами, и группы, применяемые ко всем пользователям) используются совсем по-разному:
- Глобальные правила являются вычитаемыми, они должны быть все сопоставлены для доступа к записи
- Правила групп являются аддитивными, если любое из них совпадает (и все глобальные правила совпадают), тогда запись доступна
Это означает, что первое правило группы ограничивает доступ, но любое дальнейшее правило группы расширяет его, в то время как глобальные правила могут только ограничивать доступ (или не иметь никакого эффекта).
Предупреждение
Правила для записи не применяются к пользователю Administrator
Доступ к полям
Добавлено в версии 7.0.
Класс ORM Field
может иметь атрибут groups
, предоставляющий список групп (в виде строки, разделенной запятыми external identifiers).
Если текущий пользователь не входит ни в одну из перечисленных групп, у него не будет доступа к полю:
- поля попавшие под ограничения автоматически удаляются из запрашиваемых представлений
- поля попавшие под ограничения удаляются из ответов
fields_get()
- попытки (явно) прочитать или записать в поля попавшие под ограничение приводят к ошибке доступа