ir.rule

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

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

Доменное поле определяет условия для записей.

Булевы поля (чтение, запись, создание, удаление) ir.rule означают * Применить это правило для операций такого типа . Они * не ** означают * ограничивают доступ для такого рода операций *.

Проверка алгоритма доступа

Чтобы проверить, есть ли у пользователя доступ, например, к * чтению * записи, система делает следующее:

  • Проверьте доступ в соответствии с: doc: `ir.model.access <ir.model.access> записи. Если это не проходит, то пользователь ** не получает ** доступ
  • Найти и проверить общие правила для ** модели ** и для операции * read *
    • если запись ** не удовлетворяет ** (не подходит для домена) хотя бы по одному из глобальных правил, то пользователь ** не получает ** доступа
  • Find and check non-global rules for the model, which perm_read equal True and groups that intersect with current user groups.
    • if there are no such rules, then user get access
    • если запись ** удовлетворяет ** (соответствует домену) для ** хотя бы одного ** неглобальных правил, то пользователь ** получает ** доступ
    • если запись ** не удовлетворяет ** для ** всех ** неглобальных правил, то пользователь ** не получает ** доступа

Смотрите также:

поля

name = fields.Char(index=True)
active = fields.Boolean(default=True, help="If you uncheck the active field, it will disable the record rule without deleting it (if you delete a native record rule, it may be re-created when you reload the module).")
model_id = fields.Many2one('ir.model', string='Object', index=True, required=True, ondelete="cascade")
groups = fields.Many2many('res.groups', 'rule_group_rel', 'rule_group_id', 'group_id')
domain_force = fields.Text(string='Domain')
domain = fields.Binary(compute='_force_domain', string='Domain')
perm_read = fields.Boolean(string='Apply for Read', default=True)
perm_write = fields.Boolean(string='Apply for Write', default=True)
perm_create = fields.Boolean(string='Apply for Create', default=True)
perm_unlink = fields.Boolean(string='Apply for Delete', default=True)