Skip to content

Commit 9aa69f5

Browse files
committed
[T-7772][ADD] model_access_restriction
1 parent 2b651c5 commit 9aa69f5

19 files changed

+1139
-0
lines changed

model_access_restriction/README.rst

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
========================
2+
Model Access Restriction
3+
========================
4+
5+
..
6+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7+
!! This file is generated by oca-gen-addon-readme !!
8+
!! changes will be overwritten. !!
9+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10+
!! source digest: sha256:6337b5f5fe7be747949769f4c064d9a6ca5495d905fa33e50b868be80bde4557
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-sygel--technology%2Fsy--server--backend-lightgray.png?logo=github
20+
:target: https://github.com/sygel-technology/sy-server-backend/tree/15.0/model_access_restriction
21+
:alt: sygel-technology/sy-server-backend
22+
23+
|badge1| |badge2| |badge3|
24+
25+
This module adds a new model to configure Odoo permissions, the "Model
26+
Access Restrictions"
27+
28+
This model allows to restrict the access to a model for all users except
29+
the ones that belong to at least one group of a list of allowed groups.
30+
31+
While Odoo's default access rules provide permissions, and having one
32+
already gives you access, these new rules remove them, and failing to
33+
comply with one restricts your access.
34+
35+
**Table of contents**
36+
37+
.. contents::
38+
:local:
39+
40+
Configuration
41+
=============
42+
43+
To configure this module, you need to:
44+
45+
- Go to Settings / Technical / Security / Model Access Restrictions
46+
- Create a new access restriction
47+
- Select the model to restrict the access
48+
- Select the operations the rule applies to. If the operation is not
49+
selected the restriction won't apply to that operation which means
50+
users will access the model as always.
51+
- Select the groups that will have access to the model. The rest of
52+
groups will have the access disabled.
53+
54+
Known issues / Roadmap
55+
======================
56+
57+
- Read and write permissions are not implemented yet.
58+
59+
Bug Tracker
60+
===========
61+
62+
Bugs are tracked on `GitHub Issues <https://github.com/sygel-technology/sy-server-backend/issues>`_.
63+
In case of trouble, please check there if your issue has already been reported.
64+
If you spotted it first, help us to smash it by providing a detailed and welcomed
65+
`feedback <https://github.com/sygel-technology/sy-server-backend/issues/new?body=module:%20model_access_restriction%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
66+
67+
Do not contact contributors directly about support or help with technical issues.
68+
69+
Credits
70+
=======
71+
72+
Authors
73+
-------
74+
75+
* Sygel
76+
77+
Contributors
78+
------------
79+
80+
- `Sygel <https://www.sygel.es>`__:
81+
82+
- Alberto Martínez
83+
- Manuel Regidor
84+
- Valentin Vinagre
85+
- Harald Panten
86+
87+
Maintainers
88+
-----------
89+
90+
This module is part of the `sygel-technology/sy-server-backend <https://github.com/sygel-technology/sy-server-backend/tree/15.0/model_access_restriction>`_ project on GitHub.
91+
92+
You are welcome to contribute.

model_access_restriction/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
2+
3+
from . import models
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Copyright 2025 Alberto Martínez <[email protected]>
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
{
4+
"name": "Model Access Restriction",
5+
"summary": "New type of access rule to restrict permissions based on groups",
6+
"version": "15.0.1.0.0",
7+
"category": "Tools",
8+
"website": "https://github.com/sygel-technology/sy-server-backend",
9+
"author": "Sygel, Odoo Community Association (OCA)",
10+
"license": "AGPL-3",
11+
"application": False,
12+
"installable": True,
13+
"depends": [
14+
"base",
15+
],
16+
"data": [
17+
"security/ir.model.access.csv",
18+
"views/ir_model_access_restriction_views.xml",
19+
],
20+
}

model_access_restriction/i18n/es.po

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
# Translation of Odoo Server.
2+
# This file contains the translation of the following modules:
3+
# * model_access_restriction
4+
#
5+
msgid ""
6+
msgstr ""
7+
"Project-Id-Version: Odoo Server 15.0+e\n"
8+
"Report-Msgid-Bugs-To: \n"
9+
"POT-Creation-Date: 2025-04-17 14:52+0000\n"
10+
"PO-Revision-Date: 2025-04-17 16:55+0200\n"
11+
"Last-Translator: \n"
12+
"Language-Team: \n"
13+
"Language: es\n"
14+
"MIME-Version: 1.0\n"
15+
"Content-Type: text/plain; charset=UTF-8\n"
16+
"Content-Transfer-Encoding: 8bit\n"
17+
"Plural-Forms: \n"
18+
"X-Generator: Poedit 3.0.1\n"
19+
20+
#. module: model_access_restriction
21+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
22+
msgid ""
23+
"<i class=\"fa fa-info fa-3x text-info float-left\" role=\"img\" aria-"
24+
"label=\"Info\" title=\"Info\"/>"
25+
msgstr ""
26+
27+
#. module: model_access_restriction
28+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
29+
msgid ""
30+
"A internal user won't have access in this example because it does not met the "
31+
"ACCESS_RESTRICTION_2. TRUE OR FALSE AND (TRUE AND FALSE) = TRUE AND (FALSE) "
32+
"= FALSE"
33+
msgstr ""
34+
"Un usuario interno no tendrá acceso en este ejemplo porque no cumple con la "
35+
"RESTRICCIÓN_DE_ACCESO_2. VERDADERO O FALSO Y (VERDADERO Y FALSO) = "
36+
"VERDADERO Y (FALSO) = FALSO"
37+
38+
#. module: model_access_restriction
39+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
40+
msgid ""
41+
"A restriction is not met if the user does not belong to any of the allowed "
42+
"groups."
43+
msgstr ""
44+
"No se cumple una restricción si el usuario no pertenece a ninguno de los "
45+
"grupos permitidos."
46+
47+
#. module: model_access_restriction
48+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
49+
msgid "ACCESS_1. Group: Internal Users"
50+
msgstr "ACCESO_1. Grupo: Usuarios internos"
51+
52+
#. module: model_access_restriction
53+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
54+
msgid "ACCESS_2. Group: Administrator"
55+
msgstr "ACCESO_2. Grupo: Administrador"
56+
57+
#. module: model_access_restriction
58+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
59+
msgid "ACCESS_RESTRICTION_1. Allowed Groups: Internal Users"
60+
msgstr "RESTRICCIÓN_DE_ACCESO 1. Grupos permitidos: Usuarios internos"
61+
62+
#. module: model_access_restriction
63+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
64+
msgid "ACCESS_RESTRICTION_2. Allowed Groups: Administrator"
65+
msgstr "RESTRICCIÓN_DE_ACCESO 2. Grupos permitidos: Administrador"
66+
67+
#. module: model_access_restriction
68+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
69+
msgid "Access Rights"
70+
msgstr "Permisos de acceso"
71+
72+
#. module: model_access_restriction
73+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
74+
msgid ""
75+
"Access restriction records are applied before normal access, and combines "
76+
"together with a logical AND operator. If a restriction is not met, the "
77+
"access is forbidden."
78+
msgstr ""
79+
"Los registros de restricción de acceso se aplican antes del acceso normal y "
80+
"se combinan con un operador lógico AND. Si no se cumple una restricción, se "
81+
"prohíbe el acceso."
82+
83+
#. module: model_access_restriction
84+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__active
85+
msgid "Active"
86+
msgstr "Activo"
87+
88+
#. module: model_access_restriction
89+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__groups
90+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
91+
msgid "Allowed Groups"
92+
msgstr "Grupos permitidos"
93+
94+
#. module: model_access_restriction
95+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__perm_create
96+
msgid "Apply for Create"
97+
msgstr "Aplicar para creación"
98+
99+
#. module: model_access_restriction
100+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__perm_unlink
101+
msgid "Apply for Delete"
102+
msgstr "Aplicar para eliminación"
103+
104+
#. module: model_access_restriction
105+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_search
106+
msgid "Archived"
107+
msgstr "Archivado"
108+
109+
#. module: model_access_restriction
110+
#: model:ir.model,name:model_access_restriction.model_base
111+
msgid "Base"
112+
msgstr "Base"
113+
114+
#. module: model_access_restriction
115+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_search
116+
msgid "Create Access Right"
117+
msgstr "Permiso de acceso de creacion"
118+
119+
#. module: model_access_restriction
120+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__create_uid
121+
msgid "Created by"
122+
msgstr ""
123+
124+
#. module: model_access_restriction
125+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__create_date
126+
msgid "Created on"
127+
msgstr ""
128+
129+
#. module: model_access_restriction
130+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_search
131+
msgid "Delete Access Right"
132+
msgstr "Permiso de acceso de eliminación"
133+
134+
#. module: model_access_restriction
135+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
136+
msgid "Detailed algorithm:"
137+
msgstr "Algoritmo detallado:"
138+
139+
#. module: model_access_restriction
140+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__display_name
141+
msgid "Display Name"
142+
msgstr "Nombre mostrado"
143+
144+
#. module: model_access_restriction
145+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
146+
msgid ""
147+
"Example: ACCESS_1 OR ACCESS_2 AND (ACCESS_RESTRICTION_1 AND "
148+
"ACCESS_RESTRICTION_2)"
149+
msgstr ""
150+
"Ejemplo: ACCESO_1 OR ACCESO_2 Y (RESTRICCIÓN_DE_ACCESO_1 Y "
151+
"RESTRICCIÓN_DE_ACCESO_2)"
152+
153+
#. module: model_access_restriction
154+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
155+
msgid "General"
156+
msgstr ""
157+
158+
#. module: model_access_restriction
159+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_search
160+
msgid "Group By"
161+
msgstr "Agrupar por"
162+
163+
#. module: model_access_restriction
164+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__id
165+
msgid "ID"
166+
msgstr ""
167+
168+
#. module: model_access_restriction
169+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
170+
msgid "Interaction between access records"
171+
msgstr "Interacciones entre registros de acceso"
172+
173+
#. module: model_access_restriction
174+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction____last_update
175+
msgid "Last Modified on"
176+
msgstr ""
177+
178+
#. module: model_access_restriction
179+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__write_uid
180+
msgid "Last Updated by"
181+
msgstr ""
182+
183+
#. module: model_access_restriction
184+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__write_date
185+
msgid "Last Updated on"
186+
msgstr ""
187+
188+
#. module: model_access_restriction
189+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__model_id
190+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_search
191+
msgid "Model"
192+
msgstr "Modelo"
193+
194+
#. module: model_access_restriction
195+
#: model:ir.actions.act_window,name:model_access_restriction.action_model_access_restrictions
196+
#: model:ir.ui.menu,name:model_access_restriction.menu_action_model_access_restrictions
197+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
198+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_search
199+
msgid "Model Access Restrictions"
200+
msgstr "Restricciones de acceso a modelos"
201+
202+
#. module: model_access_restriction
203+
#: model:ir.model,name:model_access_restriction.model_ir_model_access_restriction
204+
msgid "Model Access Restrictions. Not having one will disable access."
205+
msgstr ""
206+
"Restricciones de acceso a modelos. No cumplir una deshabilitará el acceso."
207+
208+
#. module: model_access_restriction
209+
#: model:ir.model.fields,field_description:model_access_restriction.field_ir_model_access_restriction__name
210+
msgid "Name"
211+
msgstr "Nombre"
212+
213+
#. module: model_access_restriction
214+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
215+
msgid ""
216+
"Normal access records are combined together with a logical OR operator, if "
217+
"a user has the group of an acess record access, access will be granted"
218+
msgstr ""
219+
"Los registros de acceso normales se combinan con un operador OR lógico, si "
220+
"un usuario tiene el grupo de acceso de un registro de acceso, se le "
221+
"concederá el acceso"
222+
223+
#. module: model_access_restriction
224+
#: model_terms:ir.ui.view,arch_db:model_access_restriction.view_model_access_restrictions_form
225+
msgid ""
226+
"Normal access records give permissions. Access restriction records removes "
227+
"permissions, if a user does not have one group of a resctriction the access "
228+
"will be forbidden."
229+
msgstr ""
230+
"Los registros de acceso normales otorgan permisos. Los registros de "
231+
"restricción de acceso los eliminan. Si un usuario no tiene un grupo de "
232+
"restricción, se le prohibirá el acceso."
233+
234+
#. module: model_access_restriction
235+
#: code:addons/model_access_restriction/models/ir_model_access_restriction.py:0
236+
#, python-format
237+
msgid "Restrictions must have at least one allowed group"
238+
msgstr "Las restricciones deben tener al menos un grupo permitido"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
2+
3+
from . import ir_model_access_restriction
4+
from . import models

0 commit comments

Comments
 (0)