This module allows to manage users' rights using profiles.
Odoo's groups are a coherent set of rules that functionally consistent. Profiles allow you to combine several groups and effectively tailor users' access to each user.
Here an exemple :
- accounting group : create an invoice, modify an invoice, cancel an invoice
- business develloper group : create a lead, modify data of lead, close a deal
The CEO of an SME will probably belong to both groups. Profils allows to combine the both groups in one profil.
This is an alternative way to manage users rights by functional profiles.
Basically, a « profile » is a fictive user (res.users) tagged as a profile.
It means that like before (with the basic rules of Odoo), you can add groups to your profile.
- You can associate a profile to created users.
- You can add users by profile.
- You can set fields to update for linked users.
- You have the choice to update or not in write mode for associated users, with field 'Update users' in profiles.
Table of contents
To configure this module, you need to:
- Go to new menu Settings > Users & Companies > User Profiles and create the profiles you need.
- Go to new menu Settings > Users & Companies > Users and create a new user, choose the profile and after saving you will have user access rights set.
To test your profile, you need to set him as « active », which will be disabled afterwards at the next update.
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback.
Do not contact contributors directly about support or help with technical issues.
This addons does not collect any data and does not set any browser cookies.
- Corentin Pouhet-Brunerie
- Matthieu Choplin
Please log in to comment on this module
Giving error after uninstalling
Odoo displays the following error after uninstalling this addon, please, how do I resolve this? Odoo Server Error Traceback (most recent call last): File "/odoo24/odoo24-server/odoo/http.py", line 654, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/odoo24/odoo24-server/odoo/http.py", line 312, in _handle_exception raise pycompat.reraise(type(exception), exception, sys.exc_info()) File "/odoo24/odoo24-server/odoo/tools/pycompat.py", line 87, in reraise raise value File "/odoo24/odoo24-server/odoo/http.py", line 696, in dispatch result = self._call_function(**self.params) File "/odoo24/odoo24-server/odoo/http.py", line 344, in _call_function return checked_call(self.db, *args, **kwargs) File "/odoo24/odoo24-server/odoo/service/model.py", line 97, in wrapper return f(dbname, *args, **kwargs) File "/odoo24/odoo24-server/odoo/http.py", line 337, in checked_call result = self.endpoint(*a, **kw) File "/odoo24/odoo24-server/odoo/http.py", line 939, in __call__ return self.method(*args, **kw) File "/odoo24/odoo24-server/odoo/http.py", line 517, in response_wrap response = f(*args, **kw) File "/odoo24/odoo24-server/addons/web/controllers/main.py", line 904, in search_read return self.do_search_read(model, fields, offset, limit, domain, sort) File "/odoo24/odoo24-server/addons/web/controllers/main.py", line 926, in do_search_read offset=offset or 0, limit=limit or False, order=sort or False) File "/odoo24/odoo24-server/odoo/models.py", line 4509, in search_read records = self.search(domain or , offset=offset, limit=limit, order=order) File "/odoo24/odoo24-server/odoo/models.py", line 1555, in search res = self._search(args, offset=offset, limit=limit, order=order, count=count) File "/odoo24/odoo24-server/odoo/addons/base/models/res_users.py", line 421, in _search access_rights_uid=access_rights_uid) File "/odoo24/odoo24-server/odoo/models.py", line 4045, in _search query = self._where_calc(args) File "/odoo24/odoo24-server/odoo/models.py", line 3836, in _where_calc e = expression.expression(domain, self) File "/odoo24/odoo24-server/odoo/osv/expression.py", line 670, in __init__ self.parse() File "/odoo24/odoo24-server/odoo/osv/expression.py", line 851, in parse raise ValueError("Invalid field %r in leaf %r" % (left, str(leaf))) ValueError: Invalid field 'is_user_profile' in leaf ""