Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][IMP] document_page_access_group*: Users compatibility #492

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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):
victoralmau marked this conversation as resolved.
Show resolved Hide resolved
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
2 changes: 1 addition & 1 deletion document_page_access_group_user_role/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Usage
#. Go to `Knowledge / Pages` and create or edit one.
#. Set in the "Roles" tab the one we have just created.
#. Go back to the role, edit it and add any group(s).
#. The role groups will have been added in the "Security" tab.
#. The role users will have been added in the "Security" tab.

Bug Tracker
===========
Expand Down
2 changes: 1 addition & 1 deletion document_page_access_group_user_role/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"name": "Document Page Access Group User Role",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/knowledge",
"version": "16.0.1.0.0",
"version": "16.0.1.1.0",
"depends": ["document_page_access_group", "base_user_role"],
"license": "AGPL-3",
"category": "Knowledge",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 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):
"""Pages that had roles should now have the correct users."""
pages = env["document.page"].sudo().search([("role_ids", "!=", False)])
for page in pages:
users = page.mapped("role_ids.users")
page.role_ids = False
victoralmau marked this conversation as resolved.
Show resolved Hide resolved
page.user_ids = users
10 changes: 5 additions & 5 deletions document_page_access_group_user_role/models/document_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
class DocumentPage(models.Model):
_inherit = "document.page"

groups_id = fields.Many2many(compute="_compute_groups_id", store=True)
user_ids = fields.Many2many(compute="_compute_user_ids", store=True, readonly=False)
role_ids = fields.Many2many(
comodel_name="res.users.role",
relation="document_page_user_roles_rel",
Expand All @@ -16,8 +16,8 @@ class DocumentPage(models.Model):
string="Roles",
)

@api.depends("role_ids", "role_ids.implied_ids")
def _compute_groups_id(self):
"""Create a compute to auto-set all the groups of the related roles."""
@api.depends("role_ids", "role_ids.users")
def _compute_user_ids(self):
"""Create a compute to auto-set all the users of the related roles."""
for item in self:
item.groups_id = item.mapped("role_ids.implied_ids")
item.user_ids += item.mapped("role_ids.users")
Loading
Loading