Toggle navigation

Модель безопасности в Odoo - Odoo 10.0

Помимо ручного управления доступом с использованием настраиваемого кода, Odoo предоставляет два основных механизма, управляемых с помощью данных, для управления или ограничения доступа к данным.

Оба механизма связаны с конкретными пользователями через группы: пользователь принадлежит к любому числу групп, а механизмы безопасности связаны с группами, тем самым применяя механизмы безопасности к пользователям.

Контроль доступа

Управляемый с помощью записей в ir.model.access, определяет доступ к целой модели данных.

Каждый элемент управления относится к конкретной модели данных, к которой он предоставляет, разрешения и, возможно, группу.

Элементы управления доступом являются аддитивными, для данной модели данных пользователь имеет доступ ко всем разрешениям, предоставленным любой из групп, где он состоит: если пользователь принадлежит к одной группе, которая разрешает запись, а другая группа позволяет удалять, то он сможет и писать, и удалять.

Если группа не указана, управление доступом применяется ко всем пользователям, в противном случае оно применяется только к членам данной группы.

Доступные разрешения: создание (perm_create), поиск и чтение (perm_read), обновление существующих записей (perm_write) и удаление существующих записей (perm_unlink)

Правила для записи

Правила для записи - это условия, которым должны удовлетворять записи для совершения каких либо операций над ними (создание, чтение, обновление или удаление). Применяется от зписи к записи после применения контроля доступа.

Правило для записи имеет:

  • модель данных, к которой относится

  • набор разрешений, к которым оно применяется (например, если установлен perm_read, правило будет проверяться только при чтении записи)

  • Набор групп пользователей, к которым применяется правило, если не указано ни одной группы, то правило будет global

  • используется домен для проверки, соответствует ли данная запись правилу (и доступен) или нет (и не доступен). Домен оценивается с помощью двух переменных в контексте: user - это запись текущего пользователя, а time - это time module

Глобальные правила и правила для групп (правила, ограниченные конкретными группами, и группы, применяемые ко всем пользователям) используются совсем по-другому:

  • Глобальные правила являются вычитаемыми, они должны все быть сопоставлены для доступа к записи

  • Правила групп являются аддитивными, если любое из них совпадает (и все глобальные правила совпадают), тогда запись доступна

Это означает, что первое правило группы ограничивает доступ, но любое дальнейшее правило группы расширяет его, в то время как глобальные правила могут только ограничивать доступ (или не имеють никакого эффекта).

Доступ к полям

Добавлено в версии 7.0.

Класс ORM Field может иметь атрибут groups, предоставляющий список групп (в виде строки, разделенной запятыми external identifiers).

Если текущий пользователь не входит ни в одну из перечисленных групп, у него не будет доступа к полю:

  • поля попавшие под ограничения автоматически удаляются из запрашиваемых представлений

  • поля попавшие под ограничения удаляются из ответов fields_get()

  • попытки (явно) прочитать или записать в поля попавшие под ограничение приводят к ошибке доступа

Правила транзакции бизнес-процесса

Транзакции бизнес-процесса могут быть ограничены определенной группой. Пользователи вне группы не могут инициировать транзакцию.