From 389e6d51f279429e11c090c434596ae07468e9a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 23 Jul 2024 17:32:06 +0200 Subject: [PATCH] [IMP] document_page_access_group: Users compatibility TT48786 --- document_page_access_group/README.rst | 17 ++++---- document_page_access_group/__manifest__.py | 2 +- .../i18n/document_page_access_group.pot | 16 +++++++ document_page_access_group/i18n/es.po | 26 +++++++----- .../17.0.1.1.0/noupdate_changes.xml | 8 ++++ .../migrations/17.0.1.1.0/post-migration.py | 12 ++++++ .../models/document_page.py | 11 ++++- .../readme/CONTRIBUTORS.md | 3 ++ document_page_access_group/readme/USAGE.md | 14 +++---- .../security/security.xml | 2 +- .../static/description/index.html | 29 ++++++++----- document_page_access_group/tests/common.py | 37 ++++++++++++++++ .../tests/test_document_page_access_group.py | 42 +++++++++---------- .../views/document_page.xml | 8 +++- 14 files changed, 164 insertions(+), 63 deletions(-) create mode 100644 document_page_access_group/migrations/17.0.1.1.0/noupdate_changes.xml create mode 100644 document_page_access_group/migrations/17.0.1.1.0/post-migration.py create mode 100644 document_page_access_group/tests/common.py diff --git a/document_page_access_group/README.rst b/document_page_access_group/README.rst index 6bd5dc6c36a..edf4b4c1f72 100644 --- a/document_page_access_group/README.rst +++ b/document_page_access_group/README.rst @@ -40,14 +40,13 @@ Usage ===== To select the users that have access to a given document page you need -to open a document, go to the 'Security' tab and select which groups -will have access. +to open a document, go to the 'Security' tab and you have 3 options: -Only users that belong to the 'document_knowledge / Manager' group can -manage access groups to documents. - -If no groups are selected in a document, all users that can access -document pages can access this document. +- Select a group: Only users with those groups will be able to see the + page. +- Select any user: Only the selected users will be able to see the + page. +- Do not select group or user: All users will be able to see the page. Bug Tracker =========== @@ -73,6 +72,10 @@ Contributors - Manuel Regidor - Alberto Martínez +- ``Tecnativa ``\ \_: + + - Víctor Martínez + Maintainers ----------- diff --git a/document_page_access_group/__manifest__.py b/document_page_access_group/__manifest__.py index bd72b89c006..47df44fb339 100644 --- a/document_page_access_group/__manifest__.py +++ b/document_page_access_group/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Document Page Access Group", "summary": "Choose groups to access document pages", - "version": "17.0.1.0.0", + "version": "17.0.1.1.0", "category": "document_knowledge", "website": "https://github.com/OCA/knowledge", "author": "Sygel, Odoo Community Association (OCA)", diff --git a/document_page_access_group/i18n/document_page_access_group.pot b/document_page_access_group/i18n/document_page_access_group.pot index 862e380a5e4..b88131c8cdc 100644 --- a/document_page_access_group/i18n/document_page_access_group.pot +++ b/document_page_access_group/i18n/document_page_access_group.pot @@ -6,6 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-24 07:09+0000\n" +"PO-Revision-Date: 2024-07-24 07:09+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -20,6 +22,7 @@ msgstr "" #. module: document_page_access_group #: model:ir.model.fields,field_description:document_page_access_group.field_document_page__groups_id +#: model_terms:ir.ui.view,arch_db:document_page_access_group.document_page_access_group_view_wiki_form msgid "Groups" msgstr "" @@ -27,3 +30,16 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:document_page_access_group.document_page_access_group_view_wiki_form msgid "Security" msgstr "" + +#. module: document_page_access_group +#: model:ir.model.fields,field_description:document_page_access_group.field_document_page__user_ids +#: model_terms:ir.ui.view,arch_db:document_page_access_group.document_page_access_group_view_wiki_form +msgid "Users" +msgstr "" + +#. module: document_page_access_group +#. odoo-python +#: code:addons/document_page_access_group/models/document_page.py:0 +#, python-format +msgid "You cannot set groups and users at the same time." +msgstr "" diff --git a/document_page_access_group/i18n/es.po b/document_page_access_group/i18n/es.po index 6bcd96e52b0..0ba00b9c084 100644 --- a/document_page_access_group/i18n/es.po +++ b/document_page_access_group/i18n/es.po @@ -6,15 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-06-05 13:08+0000\n" +"POT-Creation-Date: 2024-07-24 07:09+0000\n" +"PO-Revision-Date: 2024-07-24 09:10+0200\n" "Last-Translator: luis-ron \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Poedit 3.0.1\n" #. module: document_page_access_group #: model:ir.model,name:document_page_access_group.model_document_page @@ -23,6 +24,7 @@ msgstr "Página de documento" #. module: document_page_access_group #: model:ir.model.fields,field_description:document_page_access_group.field_document_page__groups_id +#: model_terms:ir.ui.view,arch_db:document_page_access_group.document_page_access_group_view_wiki_form msgid "Groups" msgstr "Grupos" @@ -31,11 +33,15 @@ msgstr "Grupos" msgid "Security" msgstr "Seguridad" -#~ msgid "Display Name" -#~ msgstr "Nombre mostrado" - -#~ msgid "ID" -#~ msgstr "ID" +#. module: document_page_access_group +#: model:ir.model.fields,field_description:document_page_access_group.field_document_page__user_ids +#: model_terms:ir.ui.view,arch_db:document_page_access_group.document_page_access_group_view_wiki_form +msgid "Users" +msgstr "Usuarios" -#~ msgid "Last Modified on" -#~ msgstr "Última modificación el" +#. module: document_page_access_group +#. odoo-python +#: code:addons/document_page_access_group/models/document_page.py:0 +#, python-format +msgid "You cannot set groups and users at the same time." +msgstr "No puedes definir grupos y usuarios al mismo tiempo." diff --git a/document_page_access_group/migrations/17.0.1.1.0/noupdate_changes.xml b/document_page_access_group/migrations/17.0.1.1.0/noupdate_changes.xml new file mode 100644 index 00000000000..185dcbb3f3b --- /dev/null +++ b/document_page_access_group/migrations/17.0.1.1.0/noupdate_changes.xml @@ -0,0 +1,8 @@ + + + + ['|', ('groups_id', 'in', [g.id for g in user.groups_id]), '|', ('user_ids', 'in', [user.id]), '&', ('groups_id', '=', False), ('user_ids', '=', False)] + + diff --git a/document_page_access_group/migrations/17.0.1.1.0/post-migration.py b/document_page_access_group/migrations/17.0.1.1.0/post-migration.py new file mode 100644 index 00000000000..40fd8c0a84a --- /dev/null +++ b/document_page_access_group/migrations/17.0.1.1.0/post-migration.py @@ -0,0 +1,12 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data( + env.cr, + "document_page_access_group", + "migrations/17.0.1.1.0/noupdate_changes.xml", + ) diff --git a/document_page_access_group/models/document_page.py b/document_page_access_group/models/document_page.py index e8ff91e9bc9..84279501271 100644 --- a/document_page_access_group/models/document_page.py +++ b/document_page_access_group/models/document_page.py @@ -1,10 +1,19 @@ # Copyright 2022 Manuel Regidor +# Copyright 2024 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import _, api, fields, models +from odoo.exceptions import UserError class DocumentPage(models.Model): _inherit = "document.page" groups_id = fields.Many2many(comodel_name="res.groups", string="Groups") + user_ids = fields.Many2many(comodel_name="res.users", string="Users") + + @api.constrains("groups_id", "user_ids") + def check_document_page_groups_users(self): + for _item in self.filtered(lambda x: x.groups_id and x.user_ids): + raise UserError(_("You cannot set groups and users at the same time.")) + return True diff --git a/document_page_access_group/readme/CONTRIBUTORS.md b/document_page_access_group/readme/CONTRIBUTORS.md index 8dc3b6acc2e..7ad918f3a62 100644 --- a/document_page_access_group/readme/CONTRIBUTORS.md +++ b/document_page_access_group/readme/CONTRIBUTORS.md @@ -1,2 +1,5 @@ - Manuel Regidor \<\> - Alberto Martínez \<\> +* `Tecnativa `_: + + * Víctor Martínez diff --git a/document_page_access_group/readme/USAGE.md b/document_page_access_group/readme/USAGE.md index 82e3cf742a9..bbe9bdb9094 100644 --- a/document_page_access_group/readme/USAGE.md +++ b/document_page_access_group/readme/USAGE.md @@ -1,9 +1,5 @@ -To select the users that have access to a given document page you need -to open a document, go to the 'Security' tab and select which groups -will have access. - -Only users that belong to the 'document_knowledge / Manager' group can -manage access groups to documents. - -If no groups are selected in a document, all users that can access -document pages can access this document. +To select the users that have access to a given document page +you need to open a document, go to the 'Security' tab and you have 3 options: +- Select a group: Only users with those groups will be able to see the page. +- Select any user: Only the selected users will be able to see the page. +- Do not select group or user: All users will be able to see the page. diff --git a/document_page_access_group/security/security.xml b/document_page_access_group/security/security.xml index b35fa135686..c7e20cbff67 100644 --- a/document_page_access_group/security/security.xml +++ b/document_page_access_group/security/security.xml @@ -12,7 +12,7 @@ /> ['|', ('groups_id', '=', False), ('groups_id', 'in', [g.id for g in user.groups_id])] + >['|', ('groups_id', 'in', [g.id for g in user.groups_id]), '|', ('user_ids', 'in', [user.id]), '&', ('groups_id', '=', False), ('user_ids', '=', False)] Document Page Full Access diff --git a/document_page_access_group/static/description/index.html b/document_page_access_group/static/description/index.html index d4ebc82e6e2..84573babe0f 100644 --- a/document_page_access_group/static/description/index.html +++ b/document_page_access_group/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -387,12 +388,14 @@

Document Page Access Group

Usage

To select the users that have access to a given document page you need -to open a document, go to the ‘Security’ tab and select which groups -will have access.

-

Only users that belong to the ‘document_knowledge / Manager’ group can -manage access groups to documents.

-

If no groups are selected in a document, all users that can access -document pages can access this document.

+to open a document, go to the ‘Security’ tab and you have 3 options:

+
    +
  • Select a group: Only users with those groups will be able to see the +page.
  • +
  • Select any user: Only the selected users will be able to see the +page.
  • +
  • Do not select group or user: All users will be able to see the page.
  • +

Bug Tracker

@@ -415,12 +418,18 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

diff --git a/document_page_access_group/tests/common.py b/document_page_access_group/tests/common.py new file mode 100644 index 00000000000..1f92d881f26 --- /dev/null +++ b/document_page_access_group/tests/common.py @@ -0,0 +1,37 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.tests import new_test_user + +from odoo.addons.base.tests.common import BaseCommon + + +class TestDocumentPageAccessGroupBase(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.group = cls.env["res.groups"].create({"name": "Test group"}) + cls.user = new_test_user( + cls.env, login="test-user", groups="document_knowledge.group_document_user" + ) + cls.manager_user = new_test_user( + cls.env, + login="test-manager-user", + groups="document_knowledge.group_document_user", + ) + cls.manager_user.write({"groups_id": [(4, cls.group.id)]}) + cls.public_page = cls.env["document.page"].create( + {"name": "Public Page", "type": "content"} + ) + cls.knowledge_page = cls.env["document.page"].create( + { + "name": "Knowledge Page", + "type": "content", + "groups_id": [(6, 0, [cls.group.id])], + } + ) + cls.user_page = cls.env["document.page"].create( + { + "name": "User Page (basic user)", + "type": "content", + "user_ids": [(6, 0, [cls.user.id])], + } + ) diff --git a/document_page_access_group/tests/test_document_page_access_group.py b/document_page_access_group/tests/test_document_page_access_group.py index d0e0ccbd1b9..3a1ec8c4b6d 100644 --- a/document_page_access_group/tests/test_document_page_access_group.py +++ b/document_page_access_group/tests/test_document_page_access_group.py @@ -1,29 +1,25 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo.exceptions import UserError -from odoo.tests import common +from odoo.tests.common import users +from .common import TestDocumentPageAccessGroupBase -class TestDocumentPageAccessGroup(common.TransactionCase): - def setUp(self): - super().setUp() - self.document_user_group = self.browse_ref( - "document_knowledge.group_document_user" - ).id - self.test_group = self.browse_ref("base.group_erp_manager").id - self.user_id = self.env["res.users"].create( - { - "name": "user", - "login": "user_login", - "email": "user_email", - "groups_id": [(4, self.document_user_group)], - } - ) - self.page = self.env["document.page"].create( - {"name": "Page 1", "type": "content"} - ) - def test_page_access(self): - self.assertIsNone(self.page.with_user(self.user_id).check_access_rule("read")) - self.page.write({"groups_id": [(4, self.test_group)]}) +class TestDocumentPageAccessGroup(TestDocumentPageAccessGroupBase): + def test_page_access_constrains(self): with self.assertRaises(UserError): - self.page.with_user(self.user_id).check_access_rule("read") + self.knowledge_page.write({"user_ids": [(6, 0, [self.user.id])]}) + + @users("test-user") + def test_page_access_01(self): + pages = self.env["document.page"].search([]) + self.assertIn(self.public_page, pages) + self.assertNotIn(self.knowledge_page, pages) + self.assertIn(self.user_page, pages) + + @users("test-manager-user") + def test_page_access_02(self): + pages = self.env["document.page"].search([]) + self.assertIn(self.public_page, pages) + self.assertIn(self.knowledge_page, pages) + self.assertNotIn(self.user_page, pages) diff --git a/document_page_access_group/views/document_page.xml b/document_page_access_group/views/document_page.xml index b09cba7d4e1..5d118544ce4 100644 --- a/document_page_access_group/views/document_page.xml +++ b/document_page_access_group/views/document_page.xml @@ -1,5 +1,6 @@ @@ -13,7 +14,12 @@ string="Security" groups="document_page.group_document_manager" > - + + + + + +