Public release from ruodoo-project: 19.0 - 2026-11-01 22:52:25 UTC
This commit is contained in:
27
directive_layer/security/directives_rules.xml
Normal file
27
directive_layer/security/directives_rules.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user