Odoo Правила Доступа
Правила доступа - освновная часть безопасности в Odoo. Они контролируют к каким записям пользователь имеет доступ. Например, пользователь продаж может иметь доступ только к его собственным продажам и коммерческим предложениям.
Есть два типа Правил Доступа:
Внимание: Правила группового доступа почти всегда состоят из двух наборов: один для ограничения доступа, другой для предоставления полного доступа (также возможен набор из трех или более правил).
Права доступа
Права доступа дают разрешение на одно или все из следующих действий:
Есть несколько возможных типов доступа, в том числе:
На примере заказа на продажу / предложений (
Just like the above example, there are a pair of Record Rules:
1. Allow access to “private addresses” for selected users
The problem is that the second Record Rule would effectively override other Record Rules for Contacts.
The solution is either to remove the two “private address” rules or to replace them with several rules that cover all the combinations.
These “smart buttons” can be useful for troubleshooting, and you can use Filters to show information for one or more Models:
This shows us that the user has full access to their own sales order lines (from the “Sales / User: Own Documents Only” group) plus Read-Only access to Sales Order lines for projects (as the “Project Administrator”).
This is the domain for the second Record Rule:
This selects Sales Order Lines that are:
Note: there should be no conflict between these two Record Rules (sometimes the combination produces undesirable results, as explained above).
- Правила доступа может упростить разработку функциональности в Odoo (поскольку правила уже настроены)
- Однако, могут быть турдности связанные с несколькими ограничениями для одной модели(таблице БД).
- Например, после установки стороннего модуля или включение опции Access to Private Addresses могут появится непредсказуеммые результаты
Краткое рукводоство
- Пользователи имеют группы доступа к приложениям (например, Вадим Семенович может быть Менеджер по закупкам и Пользователь склада).
- Каждая из этих групп доступа может «наследовать» доступ от связанной группы, например:
- Менеджер по закупкам наследует от Пользователь по закупкам все его права
- Пользователь по закупкам наследует все права от Внутренний пользователь
- Пользователь может быть членом группы доступа "Технические настройки", каждая из которых имеет опредленные назначения, например:
- Управление несколькими единицами измерения
- Аналитический учет
- Каждая группа доступа дает доступ к:
- БД
- Модели
- Записи (через Правила доступа)
- Поля (обычно не используется)
- Представления
- Меню
- Windows Actions
- Другим элементам таким как (Кнопки, Фильтры, Wizards)
- БД
- Доступ от всех этих групп комбинирован, например, пользователь может иметь Доступ для чтения в одной группе, в другой для Записи. Ниже будет описано Разрешения).
- Если нет правил для записей, то нет никаких ограничений на записи.
- В версии 11 Odoo и более ранних версиях на учетную запись администратора не распространялись правила записи. В Odoo 12 и более поздних версиях учетная запись администратора является членом всех групп доступа и подчиняется правилам записи, но также имеет возможность стать «суперпользователем» и обходить правила доступа.
Правила доступа
Правила доступа используют Домен для выборки записей с ограничениями.Есть два типа Правил Доступа:
- Глобальные правила (без заданной группы пользователей).
- Они ограничивают доступ и не могут быть обойдены другими правилами доступа.
- Они обычно используются для ограничений доступа у нескольких компаний.
- Так же они легкие в понимании!
- Приавла по группам (для одной или нескольких групп доступа - например, Менеджер по закупкам)
- Они предоставляют разрешение (с учетом ограничений, установленных Глобальными правилами).
- Если существует несколько групповых правил, то доступ предоставляется, если ЛЮБОЕ из условий выполнено.
- Это может затруднить понимание правил, специфичных для группы, и при их использовании необходимо соблюдать осторожность.
ПРИМЕР
Группа доступа “Sales / User: Own Documents Only” имеет Правило доступа на модуль Продажи с доменом:['|',
('user_id','=',user.id),
('user_id','=',False)
]
Это позволит получить доступ только:- для пользователя собственника заказа / предложения (где, пользователь продажи = текущий пользователь) ('user_id','=',user.id)
- и к заказам без указанного собственника(
user_id
) Заказа / Предложения). ('user_id','=',False)
[(1,'=',1)]
Это дает доступ всем пользователям Заказа / Предложения.Внимание: Правила группового доступа почти всегда состоят из двух наборов: один для ограничения доступа, другой для предоставления полного доступа (также возможен набор из трех или более правил).
Права доступа
Права доступа дают разрешение на одно или все из следующих действий:
- Чтение
- Запись (изменение)
- Созадние
- Удаление
Есть несколько возможных типов доступа, в том числе:
- Только для чтения
- Чтение и запись (но не создание и удаление)
- Чтение, Запись и Создание( но не удаление)
- Полный доступ
- Если Доступ для чтения не указан в Правах доступа к модели и группе пользователей, у пользователя(ей) не будет доступа для чтения к этой модели *
- Если Доступ для чтения не указан для Правил доступа с группой пользователей, то домен не будет применяться для этого Правила и не будет никаких ограничений*.
- Однако, если есть другие Правила доступа на чтение для этой модели, они будут применяться.
На примере заказа на продажу / предложений (
sale.order
) :- Как правило, только менеджер по продажам может удалять заказы на продажу (это из доступа прав доступа к модели)
- Как объяснено выше, некоторые менеджеры по продажам могут получить доступ только к своим собственным заказам (через Правила доступа).
- Вы можете добавить Правила доступа:
- Только супервайзеры или менеджеры могут отменить подтвержденные заказы на продажу
- Все пользователи по продажам могут отменить предложения (в черновики заказов на продажу)
- Отмененный заказ на продажу все еще находится в базе данных Odoo, и менеджер сможет его удалить.
Трудности
It’s easy to have problems with Record Rules because of the way they interact with each other. These can be in either direction:- access is allowed when it should not be,
- users are not allowed do something they should be able to do
Private addresses
Odoo 12 introduced a Record Rule that was designed to limit access to “private addresses”. It’s on the Contacts model (res.partner
).Just like the above example, there are a pair of Record Rules:
1. Allow access to “private addresses” for selected users
[('type', '=', 'private')]
2. Allow access for all users to other “non-private addresses”['|',
('type', '!=', 'private'),
('type', '=', False)
]
This Record Rule grants access to all internal users through the “Internal User” access group (“Employee” in earlier versions). This group is inherited by all application access groups.The problem is that the second Record Rule would effectively override other Record Rules for Contacts.
- For example, you might have used Record Rules to limit access to vendors (suppliers), but:
- a user who had not had access to vendors would now be granted access (because
type
will be blank).- They would also be able to access private addresses for customers and other types of contact!
- a user who had not had access to vendors would now be granted access (because
The solution is either to remove the two “private address” rules or to replace them with several rules that cover all the combinations.
Alternatives
It is also possible to restrict access without using Record Rules.- Domains can be added to restrict access to fields in views (easy to do in Odoo Studio).
- Changes can be made to menus:
- Other options are available by doing development.
List of Record Rules for a user (Odoo 13)
Navigate to Settings / Users & Companies / UsersThese “smart buttons” can be useful for troubleshooting, and you can use Filters to show information for one or more Models:
This shows us that the user has full access to their own sales order lines (from the “Sales / User: Own Documents Only” group) plus Read-Only access to Sales Order lines for projects (as the “Project Administrator”).
This is the domain for the second Record Rule:
['&', '&',
('state', 'in', ['sale', 'done']),
('is_service', '=', True),
'|', ('project_id','!=', False), ('task_id','!=', False)]
This selects Sales Order Lines that are:
- confirmed or locked, and
- service items and
- with either a project or task id
Note: there should be no conflict between these two Record Rules (sometimes the combination produces undesirable results, as explained above).