Skip to content

Commit db14779

Browse files
committed
[ADD] 16.0: base_user_group_mgmt_role
1 parent 0a982bf commit db14779

File tree

17 files changed

+901
-0
lines changed

17 files changed

+901
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
===============================
2+
Base User Group Management Role
3+
===============================
4+
5+
..
6+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7+
!! This file is generated by oca-gen-addon-readme !!
8+
!! changes will be overwritten. !!
9+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10+
!! source digest: sha256:dd01c86cb0ffc51b38a225e5c89c9c0d93f67a914bf06979884faf9a1c232a4d
11+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12+
13+
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
14+
:target: https://odoo-community.org/page/development-status
15+
:alt: Beta
16+
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
17+
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
18+
:alt: License: AGPL-3
19+
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--backend-lightgray.png?logo=github
20+
:target: https://github.com/OCA/server-backend/tree/16.0/base_user_group_mgmt_role
21+
:alt: OCA/server-backend
22+
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
23+
:target: https://translation.odoo-community.org/projects/server-backend-16-0/server-backend-16-0-base_user_group_mgmt_role
24+
:alt: Translate me on Weblate
25+
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
26+
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-backend&target_branch=16.0
27+
:alt: Try me on Runboat
28+
29+
|badge1| |badge2| |badge3| |badge4| |badge5|
30+
31+
This module extends the functionality of base_user_group_mgmt to support
32+
roles updates and assignation.
33+
34+
**Table of contents**
35+
36+
.. contents::
37+
:local:
38+
39+
Usage
40+
=====
41+
42+
This module add roles related actions on security update requests.
43+
44+
Actions added:
45+
46+
- Add a role to a user
47+
- Remove a role from a user
48+
- Update role of user
49+
- Add a group to a role
50+
- Remove a group from a role
51+
52+
Bug Tracker
53+
===========
54+
55+
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-backend/issues>`_.
56+
In case of trouble, please check there if your issue has already been reported.
57+
If you spotted it first, help us to smash it by providing a detailed and welcomed
58+
`feedback <https://github.com/OCA/server-backend/issues/new?body=module:%20base_user_group_mgmt_role%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
59+
60+
Do not contact contributors directly about support or help with technical issues.
61+
62+
Credits
63+
=======
64+
65+
Authors
66+
-------
67+
68+
* ACSONE SA/NV
69+
70+
Contributors
71+
------------
72+
73+
- Benjamin Willig [email protected] (https://acsone.eu)
74+
75+
Maintainers
76+
-----------
77+
78+
This module is maintained by the OCA.
79+
80+
.. image:: https://odoo-community.org/logo.png
81+
:alt: Odoo Community Association
82+
:target: https://odoo-community.org
83+
84+
OCA, or the Odoo Community Association, is a nonprofit organization whose
85+
mission is to support the collaborative development of Odoo features and
86+
promote its widespread use.
87+
88+
This module is part of the `OCA/server-backend <https://github.com/OCA/server-backend/tree/16.0/base_user_group_mgmt_role>`_ project on GitHub.
89+
90+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Copyright 2025 ACSONE SA/NV
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
{
5+
"name": "Base User Group Management Role",
6+
"summary": """
7+
Add role features in security management module""",
8+
"version": "16.0.1.0.0",
9+
"license": "AGPL-3",
10+
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
11+
"website": "https://github.com/OCA/server-backend",
12+
"depends": [
13+
"base_user_role",
14+
"base_user_group_mgmt",
15+
],
16+
"data": [
17+
"views/base_security_update_request_line.xml",
18+
],
19+
"demo": [],
20+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from . import base_security_update_request_line
2+
from . import res_users
3+
from . import res_users_role
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
# Copyright 2025 ACSONE SA/NV
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import Command, _, api, fields, models
5+
6+
7+
class BaseSecurityUpdateLine(models.Model):
8+
9+
_inherit = "base.security.update.request.line"
10+
11+
action = fields.Selection(
12+
default="user_add_role",
13+
)
14+
role_ids = fields.Many2many(
15+
comodel_name="res.users.role",
16+
string="Roles",
17+
)
18+
is_role_ids_visible = fields.Boolean(
19+
compute="_compute_is_role_ids_visible",
20+
)
21+
role_date_from = fields.Date()
22+
role_date_to = fields.Date()
23+
is_role_edit_data_visible = fields.Boolean(
24+
compute="_compute_is_role_edit_data_visible",
25+
)
26+
27+
@api.depends("role_ids")
28+
def _compute_name(self):
29+
return super()._compute_name()
30+
31+
@api.depends(
32+
"action",
33+
)
34+
def _compute_is_role_ids_visible(self):
35+
for rec in self:
36+
rec.is_role_ids_visible = "role" in rec.action
37+
38+
@api.depends(
39+
"action",
40+
)
41+
def _compute_is_role_edit_data_visible(self):
42+
for rec in self:
43+
rec.is_role_edit_data_visible = rec.action in (
44+
"user_role_edit",
45+
"user_add_role",
46+
)
47+
48+
@api.model
49+
def _selection_action(self):
50+
return [
51+
("user_add_role", _("Add a role to a user")),
52+
("user_remove_role", _("Remove a role from a user")),
53+
("user_role_edit", _("Update role of user")),
54+
("role_add_group", _("Add a group to a role")),
55+
("role_remove_group", _("Remove a group from a role")),
56+
*super()._selection_action(),
57+
]
58+
59+
def _get_name(self):
60+
self.ensure_one()
61+
action = self.action
62+
groups = ", ".join(self.group_1_ids.mapped("display_name")) or _("Groups 1")
63+
roles = ", ".join(self.role_ids.mapped("display_name")) or _("Roles")
64+
users = ", ".join(self.user_ids.mapped("display_name")) or _("Users")
65+
if action == "user_add_role":
66+
return _(
67+
"Add role(s) '%(roles)s' to user(s) '%(users)s'",
68+
roles=roles,
69+
users=users,
70+
)
71+
elif action == "user_remove_role":
72+
return _(
73+
"Remove role(s) '%(roles)s' from user(s) '%(users)s'",
74+
roles=roles,
75+
users=users,
76+
)
77+
elif action == "role_add_group":
78+
return _(
79+
"Add group(s) '%(groups)s' to role(s) '%(roles)s'",
80+
groups=groups,
81+
roles=roles,
82+
)
83+
elif action == "role_remove_group":
84+
return _(
85+
"Remove group(s) '%(groups)s' from role(s) '%(roles)s'",
86+
groups=groups,
87+
role=roles,
88+
)
89+
elif action == "user_role_edit":
90+
return _(
91+
"Update role(s) '%(roles)s' of user(s) '%(users)s'",
92+
role=roles,
93+
user=users,
94+
)
95+
return super()._get_name()
96+
97+
def _get_role_line_values(self, role, user):
98+
self.ensure_one()
99+
return {
100+
"user_id": user.id,
101+
"role_id": role.id,
102+
"date_from": self.role_date_from,
103+
"date_to": self.role_date_to,
104+
}
105+
106+
def _get_existing_role_line_domain(self, role, user):
107+
self.ensure_one()
108+
return [
109+
("role_id", "=", role.id),
110+
("user_id", "=", user.id),
111+
]
112+
113+
def _get_existing_role_line(self, role, user):
114+
self.ensure_one()
115+
return (
116+
self.env["res.users.role.line"]
117+
.with_context(active_test=False)
118+
.search(self._get_existing_role_line_domain(role, user), limit=1)
119+
)
120+
121+
def _do_update_user_add_role(self):
122+
self.ensure_one()
123+
for user in self.user_ids:
124+
for role in self.role_ids:
125+
line = self._get_existing_role_line(role, user)
126+
values = self._get_role_line_values(role, user)
127+
if line:
128+
line.write(values)
129+
continue
130+
user.write(
131+
{
132+
"role_line_ids": [
133+
Command.create(values),
134+
]
135+
}
136+
)
137+
138+
def _do_update_user_remove_role(self):
139+
self.ensure_one()
140+
for user in self.user_ids:
141+
for role in self.role_ids:
142+
line = self._get_existing_role_line(role, user)
143+
line.unlink()
144+
145+
def _do_update_user_role_edit(self):
146+
self.ensure_one()
147+
return self._do_update_user_add_role()
148+
149+
def _do_update_role_add_group(self):
150+
self.ensure_one()
151+
self.role_ids.write(
152+
{"implied_ids": [Command.link(group.id) for group in self.group_1_ids]}
153+
)
154+
155+
def _do_update_role_remove_group(self):
156+
self.ensure_one()
157+
self.role_ids.write(
158+
{"implied_ids": [Command.unlink(group.id) for group in self.group_1_ids]}
159+
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Copyright 2025 ACSONE SA/NV
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import fields, models
5+
6+
7+
class ResUsers(models.Model):
8+
9+
_inherit = "res.users"
10+
11+
role_line_ids = fields.One2many(
12+
readonly=True,
13+
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Copyright 2025 ACSONE SA/NV
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import fields, models
5+
6+
7+
class ResUsersRole(models.Model):
8+
9+
_inherit = "res.users.role"
10+
11+
line_ids = fields.One2many(
12+
readonly=True,
13+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Benjamin Willig <[email protected]> (https://acsone.eu)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This module extends the functionality of base_user_group_mgmt to support roles updates and assignation.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
This module add roles related actions on security update requests.
2+
3+
Actions added:
4+
* Add a role to a user
5+
* Remove a role from a user
6+
* Update role of user
7+
* Add a group to a role
8+
* Remove a group from a role

0 commit comments

Comments
 (0)