Skip to content

Commit

Permalink
[IMP] document_page_access_group: Users compatibility
Browse files Browse the repository at this point in the history
TT48786
  • Loading branch information
victoralmau committed Aug 5, 2024
1 parent 2f2be4d commit 5c153b9
Show file tree
Hide file tree
Showing 14 changed files with 159 additions and 60 deletions.
16 changes: 8 additions & 8 deletions document_page_access_group/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,10 @@ 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.
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.

Bug Tracker
===========
Expand All @@ -73,6 +69,10 @@ Contributors
* Manuel Regidor <manuel.regidor@sygel.es>
* Alberto Martínez <alberto.martinez@sygel.es>

* `Tecnativa <https://www.tecnativa.com>`_:

* Víctor Martínez

Maintainers
~~~~~~~~~~~

Expand Down
2 changes: 1 addition & 1 deletion document_page_access_group/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{
"name": "Document Page Access Group",
"summary": "Choose groups to access document pages",
"version": "16.0.1.0.0",
"version": "16.0.1.1.0",
"category": "document_knowledge",
"website": "https://github.com/OCA/knowledge",
"author": "Sygel, Odoo Community Association (OCA)",
Expand Down
16 changes: 16 additions & 0 deletions document_page_access_group/i18n/document_page_access_group.pot
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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"
Expand All @@ -20,10 +22,24 @@ 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 ""

#. module: document_page_access_group
#: 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 ""
26 changes: 16 additions & 10 deletions document_page_access_group/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -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 <luis.ron@sygel.es>\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
Expand All @@ -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"

Expand All @@ -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."
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version='1.0' encoding='utf-8' ?>
<odoo>
<record id="document_page_rule" model="ir.rule">
<field
name="domain_force"
>['|', ('groups_id', 'in', [g.id for g in user.groups_id]), '|', ('user_ids', 'in', [user.id]), '&amp;', ('groups_id', '=', False), ('user_ids', '=', False)]</field>
</record>
</odoo>
12 changes: 12 additions & 0 deletions document_page_access_group/migrations/16.0.1.1.0/post-migration.py
Original file line number Diff line number Diff line change
@@ -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/16.0.1.1.0/noupdate_changes.xml",
)
11 changes: 10 additions & 1 deletion document_page_access_group/models/document_page.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
# Copyright 2022 Manuel Regidor <manuel.regidor@sygel.es>
# 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
4 changes: 4 additions & 0 deletions document_page_access_group/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
* Manuel Regidor <manuel.regidor@sygel.es>
* Alberto Martínez <alberto.martinez@sygel.es>

* `Tecnativa <https://www.tecnativa.com>`_:

* Víctor Martínez
12 changes: 4 additions & 8 deletions document_page_access_group/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -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.
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.
2 changes: 1 addition & 1 deletion document_page_access_group/security/security.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
/>
<field
name="domain_force"
>['|', ('groups_id', '=', False), ('groups_id', 'in', [g.id for g in user.groups_id])]</field>
>['|', ('groups_id', 'in', [g.id for g in user.groups_id]), '|', ('user_ids', 'in', [user.id]), '&amp;', ('groups_id', '=', False), ('user_ids', '=', False)]</field>
</record>
<record id="document_page_rule_full_access" model="ir.rule">
<field name="name">Document Page Full Access</field>
Expand Down
15 changes: 8 additions & 7 deletions document_page_access_group/static/description/index.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
Expand Down Expand Up @@ -388,12 +387,10 @@ <h1 class="title">Document Page Access Group</h1>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>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.</p>
<p>Only users that belong to the ‘document_knowledge / Manager’ group can
manage access groups to documents.</p>
<p>If no groups are selected in a document, all users that can access
document pages can access this document.</p>
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.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
Expand All @@ -416,6 +413,10 @@ <h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Manuel Regidor &lt;<a class="reference external" href="mailto:manuel.regidor&#64;sygel.es">manuel.regidor&#64;sygel.es</a>&gt;</li>
<li>Alberto Martínez &lt;<a class="reference external" href="mailto:alberto.martinez&#64;sygel.es">alberto.martinez&#64;sygel.es</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Víctor Martínez</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
Expand Down
37 changes: 37 additions & 0 deletions document_page_access_group/tests/common.py
Original file line number Diff line number Diff line change
@@ -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])],
}
)
42 changes: 19 additions & 23 deletions document_page_access_group/tests/test_document_page_access_group.py
Original file line number Diff line number Diff line change
@@ -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)
16 changes: 15 additions & 1 deletion document_page_access_group/views/document_page.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2022 Manuel Regidor <manuel.regidor@sygel.es>
Copyright 2024 Tecnativa - Víctor Martínez
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="document_page_access_group_view_wiki_form" model="ir.ui.view">
Expand All @@ -13,7 +14,20 @@
string="Security"
groups="document_page.group_document_manager"
>
<field name="groups_id" />
<group
name="groups"
string="Groups"
attrs="{'invisible': [('user_ids','!=',[])]}"
>
<field name="groups_id" nolabel="1" colspan="2" />
</group>
<group
name="users"
string="Users"
attrs="{'invisible': [('groups_id','!=',[])]}"
>
<field name="user_ids" widget="many2many_tags" colspan="2" />
</group>
</page>
</xpath>
</field>
Expand Down

0 comments on commit 5c153b9

Please sign in to comment.