mirror of
https://github.com/OCA/knowledge.git
synced 2025-07-13 07:24:48 -06:00
[IMP] document_page_access_group: Users compatibility
TT48786
This commit is contained in:
parent
a6e2e785f8
commit
f57f6b6fe2
@ -7,7 +7,7 @@ Document Page Access Group
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:b17b9a59745b22473114b818626d1a54eb0e7d1c5cbe43c07a3040d4619b0f36
|
||||
!! source digest: sha256:28e06c90139270717bf9f3fbe04145a72fed721a256eb4d526ee229beaf1cc69
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
@ -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 <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": "17.0.1.0.0",
|
||||
"version": "17.0.2.0.0",
|
||||
"category": "document_knowledge",
|
||||
"website": "https://github.com/OCA/knowledge",
|
||||
"author": "Sygel, Odoo Community Association (OCA)",
|
||||
|
@ -20,6 +20,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 +28,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."
|
||||
|
@ -23,6 +23,7 @@ msgstr "Pagina 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 "Gruppi"
|
||||
|
||||
@ -31,6 +32,19 @@ msgstr "Gruppi"
|
||||
msgid "Security"
|
||||
msgstr "Sicurezza"
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#~ msgid "Display Name"
|
||||
#~ msgstr "Nome visualizzato"
|
||||
|
||||
|
@ -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/17.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,5 @@
|
||||
- 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.
|
||||
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.
|
||||
|
@ -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>
|
||||
|
@ -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 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
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.option {
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
@ -366,7 +367,7 @@ ul.auto-toc {
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:b17b9a59745b22473114b818626d1a54eb0e7d1c5cbe43c07a3040d4619b0f36
|
||||
!! source digest: sha256:28e06c90139270717bf9f3fbe04145a72fed721a256eb4d526ee229beaf1cc69
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/17.0/document_page_access_group"><img alt="OCA/knowledge" src="https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/knowledge-17-0/knowledge-17-0-document_page_access_group"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/knowledge&target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module allows to select which users groups have access to the
|
||||
@ -387,12 +388,14 @@ 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>
|
||||
to open a document, go to the ‘Security’ tab and you have 3 options:</p>
|
||||
<ul class="simple">
|
||||
<li>Select a group: Only users with those groups will be able to see the
|
||||
page.</li>
|
||||
<li>Select any user: Only the selected users will be able to see the
|
||||
page.</li>
|
||||
<li>Do not select group or user: All users will be able to see the page.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
||||
@ -415,12 +418,18 @@ 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><tt class="docutils literal">Tecnativa <span class="pre"><https://www.tecnativa.com></span></tt>_:<ul>
|
||||
<li>Víctor Martínez</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>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.</p>
|
||||
|
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,12 @@
|
||||
string="Security"
|
||||
groups="document_page.group_document_manager"
|
||||
>
|
||||
<field name="groups_id" />
|
||||
<group name="groups" string="Groups" invisible="user_ids">
|
||||
<field name="groups_id" nolabel="1" colspan="2" />
|
||||
</group>
|
||||
<group name="users" string="Users" invisible="groups_id">
|
||||
<field name="user_ids" widget="many2many_tags" />
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
|
Loading…
Reference in New Issue
Block a user