Files
public/directive_layer/security/directives_rules.xml

28 lines
2.3 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<odoo>
<!--
Единое GLOBAL-правило видимости директив с диспетчерским bypass.
Почему одно global-правило, а не два (диспетчер / остальные):
в Odoo global-правила комбинируются по AND, а group-правила — по OR
и только РАСШИРЯЮТ доступ в пределах global. Поэтому global `own` НЕЛЬЗЯ
расширить group-правилом `all` для диспетчера (получилось бы own AND all = own).
Единственная форма, одновременно сохраняющая все три требования —
(1) диспетчер видит все,
(2) исполнитель/заявитель/автор видят только свои/ролевые,
(3) пользователь без ролей директив видит ноль строк (fail-closed),
— это одно global-правило с тернарным bypass для диспетчера.
Это осознанный, поведение-сохраняющий выбор (см. design.md §4.2),
а НЕ незавершённый рефактор «надо бы два правила».
Диспетчер (член role_directive_dispatcher_res_groups) -> домен [(1,'=',1)] (все).
Остальные -> 4 OR-условия через 3 оператора '|' (польская нотация):
своя как исполнитель / свои созданные / своя роль исполнителя / своя роль заявителя.
-->
<record id="rule_directive_base_access" model="ir.rule">
<field name="name">Directive: visibility (dispatcher sees all, others own/role)</field>
<field name="model_id" ref="model_directive_directive"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)] if user.has_group('directive_layer.role_directive_dispatcher_res_groups') else ['|', '|', '|', ('executor_user_id', '=', user.id), ('create_uid', '=', user.id), ('executor_role_id', 'in', user.role_ids.ids), ('requester_role_id', 'in', user.role_ids.ids)]</field>
</record>
</odoo>