mirror of
https://github.com/OCA/knowledge.git
synced 2025-07-22 20:12:04 -06:00
[IMP] document_page_access_group: Users compatibility
TT48786
This commit is contained in:
parent
2f2be4dbe4
commit
5c153b9ebd
@ -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
|
||||
===========
|
||||
@ -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
|
||||
~~~~~~~~~~~
|
||||
|
||||
|
@ -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)",
|
||||
|
@ -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"
|
||||
@ -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 ""
|
||||
|
@ -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
|
||||
@ -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"
|
||||
#. 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 "ID"
|
||||
#~ msgstr "ID"
|
||||
|
||||
#~ 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."
|
||||
|
@ -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]), '&', ('groups_id', '=', False), ('user_ids', '=', False)]</field>
|
||||
</record>
|
||||
</odoo>
|
@ -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",
|
||||
)
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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]), '&', ('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>
|
||||
|
@ -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>
|
||||
@ -388,12 +387,10 @@ document pages.</p>
|
||||
<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>
|
||||
@ -416,6 +413,10 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
||||
<ul class="simple">
|
||||
<li>Manuel Regidor <<a class="reference external" href="mailto:manuel.regidor@sygel.es">manuel.regidor@sygel.es</a>></li>
|
||||
<li>Alberto Martínez <<a class="reference external" href="mailto:alberto.martinez@sygel.es">alberto.martinez@sygel.es</a>></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">
|
||||
|
37
document_page_access_group/tests/common.py
Normal file
37
document_page_access_group/tests/common.py
Normal file
@ -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])],
|
||||
}
|
||||
)
|
@ -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)
|
||||
|
@ -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">
|
||||
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user