res_user_group_ids
res_user_group_ids is the widget behind the access rights grid on the user form. It generates a whole form view at runtime from a hierarchy the server sends, which is why it works nowhere else.
September 18, 2026Updated September 18, 20264 min read
| Technical name | res_user_group_ids |
|---|---|
| Field types | many2many (res.groups) |
| Views | form |
| Module | web, present in every Odoo database |
| Used in core | 3 uses in Odoo 19, in odoo/addons/base/views/res_users_views.xml (twice, on group_ids) and res_groups_views.xml (once, on implied_ids). Same in Odoo 20. |
| Versions | Odoo 19.0, Odoo 20.0 |
| No-code setup | No. This widget builds one specific screen and has nothing to configure. |
| Alternatives | many2many_tags, many2many_checkboxes, res_user_group_ids_privilege |
What the res_user_group_ids widget does
What this means for your team
Working examples
Two categories on the screen that are not in the database
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 19.0 | Verified | Verified against the shipped 19.0 source. |
| Odoo 20.0 | Verified | Verified against the 20.0 branch. No changes. |
Unchanged between the two branches we checked, including its three usages.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The widget renders nothing or throws on another model | It reads view_group_hierarchy from the record, and only res.users and res.groups provide it. Use it only on group_ids of res.users or implied_ids of res.groups. |
| Custom groups appear as loose checkboxes under Extra Rights | They have no privilege_id, so the widget puts them in the synthetic Extra Rights category. Attach the groups to a privilege if you want them to appear as levels in a dropdown. |
| A group applied to a user is not visible on this screen | The grid only renders what the server-sent hierarchy contains. Read group_ids directly to audit membership. Do not treat this screen as a complete list. |
| Selecting one level clears another | Groups sharing a privilege render as one selection, so the options are mutually exclusive by design. Expected. Use privilege-less groups if the permissions should be additive. |
Res_user_group_ids widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
res_user_group_ids | The access rights grid on the user and group forms | Generates a form view at runtime from a server-sent hierarchy |
| many2many_tags | Seeing raw group membership for an audit | Lists the actual group records instead of summarizing them |
| many2many_checkboxes | A flat list of groups with checkboxes | No categories, no privileges and no exclusivity |
| res_user_group_ids_privilege | One privilege row inside this grid | Internal to this widget and unusable on its own |
Frequently asked questions
What is the res_user_group_ids widget in Odoo?+
Why do some permissions appear as checkboxes instead of dropdowns?+
Can I use res_user_group_ids on my own many2many field?+
Does it have options?+
Not sure who can see what in your Odoo?
The access rights grid summarizes group membership rather than showing it, so an audit read off that screen can miss what is actually applied. We map real permissions per user, find the over-granted accounts and tighten them without breaking anyone's day.
Request an access rights audit