Я хочу создать группу, которая позволит ее пользователям добавлять новые, но только с Allowed Companies
и разрешениями, которые они имеют сами. В настоящее время группа Administration/Access Rights
предоставляет пользователям возможность создавать новых пользователей, но она никоим образом не ограничивает разрешения, которые они могут назначать.
Я пытался изменить разрешения для группы Access Rights
. Я нашел Правило записи для объекта Company
в этой группе и изменил его следующим образом:
[(1, '=', 1)]
изменено на:
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
Я в основном скопировал его из других правил, ограничивающих пользователей их собственными компаниями. Но затем, когда пользователь с этой группой пытается получить доступ к любому пользователю, он падает и выдает ошибку:
ValueError: Invalid field 'company_id' in leaf "<osv.ExtendedLeaf: ('company_id', '=', False) on res_company (ctx: )>"
Я также переместил обе административные группы (Access Rights
и Settings
) в другое приложение - Extra Rights
. Это был единственный способ для меня ограничить параметры, которые могут видеть пользователи. И таким образом, если у пользователя есть доступ к пользовательскому редактированию, он не может просто что-то там изменить (например, дать себе разрешение Setting
. Я действительно не понимаю, почему Odoo выбрал такое поведение.
Действия по воспроизведению проблемы:
- Создать несколько компаний (ради этого примера CompanyA, CompanyB, CompanyC)
- Добавить пользователя с группой Администрирование / Права доступа и назначить его некоторым компаниям (не всем, например, только компаниям A и B)
Текущее поведение:
Пользователь с данной группой может изменить поле Разрешенные компании (для всех пользователей) и добавить компании, к которым у него нет доступа - в этом примере он может расширить свои Разрешенные компании с CompanyC.
Ожидаемое поведение:
Пользователь с данной группой может изменять поле «Разрешенные компании» всех пользователей, но не может назначать «Разрешенные компании», которых у него нет.