Adds addon "ir_rule_website"
parent
bd054fa459
commit
b53acf4350
|
|
@ -0,0 +1,55 @@
|
|||
=========================================
|
||||
Multi-website support in Security Rules
|
||||
=========================================
|
||||
|
||||
Allows to use ``website_id`` (current website) in ``domain_force`` field of Record Rules (``ir.rule``), e.g.:
|
||||
|
||||
* ``[('website_ids', 'in', [website_id])]``
|
||||
* ``[('website_id', '=', website_id)]``
|
||||
|
||||
|
||||
Example of usage:
|
||||
|
||||
* Show a blog on specific websites only (TODO: add link to the module)
|
||||
* Show an event on specific websites only (TODO: add link to the module)
|
||||
* Show a product on specific websites only (TODO: add link to the module)
|
||||
|
||||
Odoo 12.0+
|
||||
==========
|
||||
|
||||
We hope this feature will be built-in since Odoo 12.0 at least: https://github.com/odoo/odoo/pull/22743
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Contributors
|
||||
------------
|
||||
* `Ivan Yelizariev <https://www.it-projects.info/team/yelizariev>`__
|
||||
* `Ildar Nasyrov <https://www.it-projects.info/team/iledarn>`__
|
||||
|
||||
Sponsors
|
||||
--------
|
||||
* `IT-Projects LLC <https://it-projects.info>`__
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
* `IT-Projects LLC <https://it-projects.info>`__
|
||||
|
||||
To get a guaranteed support you are kindly requested to purchase the module at `odoo apps store <https://apps.odoo.com/apps/modules/11.0/ir_rule_website/>`__.
|
||||
|
||||
Thank you for understanding!
|
||||
|
||||
`IT-Projects Team <https://www.it-projects.info/team>`__
|
||||
|
||||
Further information
|
||||
===================
|
||||
|
||||
Demo: http://runbot.it-projects.info/demo/access-addons/11.0
|
||||
|
||||
HTML Description: https://apps.odoo.com/apps/modules/11.0/ir_rule_website
|
||||
|
||||
Usage instructions: `<doc/index.rst>`_
|
||||
|
||||
Changelog: `<doc/changelog.rst>`_
|
||||
|
||||
Tested on Odoo 11.0 dc61861f90d15797b19f8ebddfb0c8a66d0afa88
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
"name": """Multi-website support in Security Rules""",
|
||||
"summary": """Provide access depending on current website""",
|
||||
"category": "Access",
|
||||
# "live_test_url": "",
|
||||
"images": [],
|
||||
"version": "1.0.0",
|
||||
"application": False,
|
||||
|
||||
"author": "IT-Projects LLC, Ildar Nasyrov",
|
||||
"support": "apps@it-projects.info",
|
||||
"website": "https://it-projects.info/team/iledarn",
|
||||
"license": "LGPL-3",
|
||||
"price": 20.00,
|
||||
"currency": "EUR",
|
||||
|
||||
"depends": [
|
||||
"base",
|
||||
],
|
||||
"external_dependencies": {"python": [], "bin": []},
|
||||
"data": [
|
||||
],
|
||||
"qweb": [
|
||||
],
|
||||
"demo": [
|
||||
],
|
||||
|
||||
"post_load": None,
|
||||
"pre_init_hook": None,
|
||||
"post_init_hook": None,
|
||||
"uninstall_hook": None,
|
||||
|
||||
"auto_install": False,
|
||||
"installable": True,
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
`1.0.0`
|
||||
-------
|
||||
|
||||
- Init version
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
=========================================
|
||||
Multi-website support in Security Rules
|
||||
=========================================
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
* `Install <https://odoo-development.readthedocs.io/en/latest/odoo/usage/install-module.html>`__ this module in a usual way
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
This is a core technical module - no configurations are needed
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
* If you have a model accessible through a website (by means of controller methods) - specify this module into the "depends" section of your manifest file
|
||||
* Now you can create security rules using `website_id` in `domain_force` fields. For example,
|
||||
|
||||
::
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="blog_rule_all" model="ir.rule">
|
||||
<field name="name">Blogs available only for specifed websites</field>
|
||||
<field name="model_id" ref="model_blog_blog"/>
|
||||
<field name="domain_force">[('website_ids', 'in', [website_id])]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import ir_rule
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, models, tools
|
||||
from odoo.addons.base.ir.ir_rule import IrRule as IrRuleOriginal
|
||||
|
||||
|
||||
class IrRule(models.Model):
|
||||
_inherit = 'ir.rule'
|
||||
|
||||
@api.model
|
||||
def _eval_context(self):
|
||||
context = super(IrRule, self)._eval_context()
|
||||
context['website_id'] = self._context.get('website_id')
|
||||
return context
|
||||
|
||||
@api.model
|
||||
@tools.ormcache_context('self._uid', 'model_name', 'mode', keys=["website_id"])
|
||||
def _compute_domain(self, model_name, mode="read"):
|
||||
return IrRuleOriginal._compute_domain.__wrapped__(self, model_name, mode=mode)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
|
|
@ -0,0 +1,89 @@
|
|||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h2 class="oe_slogan" style="color:#875A7B;">Multi-website support in Security Rules</h2>
|
||||
<h3 class="oe_slogan">Make website-dependent access to pages, products, etc.</h3>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
|
||||
<div class="alert alert-info oe_mt32" style="padding:0.3em 0.6em; font-size: 150%;">
|
||||
<i class="fa fa-hand-o-right"></i><b> Technical module that allows implementing different features. For example: </b>
|
||||
<ul class="list-unstyled">
|
||||
|
||||
<li>
|
||||
<i class="fa fa-check-square-o text-primary"></i>
|
||||
Show a blog on specific websites only
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<i class="fa fa-check-square-o text-primary"></i>
|
||||
Show an event on specific websites only
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<i class="fa fa-check-square-o text-primary"></i>
|
||||
Show a product on specific websites only
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span8">
|
||||
<h2>Need our service?</h2>
|
||||
<p class="oe_mt32">Contact us by <a href="mailto:apps@it-projects.info">email</a> or fill out <a href="https://www.it-projects.info/page/website.contactus " target="_blank">request form</a></p>
|
||||
<ul>
|
||||
<li><a href="mailto:apps@it-projects.info">apps@it-projects.info <i class="fa fa-envelope-o"></i></a></li>
|
||||
<li><a href="https://www.it-projects.info/page/website.contactus " target="_blank">https://www.it-projects.info/page/website.contactus <i class="fa fa-list-alt"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="oe_span4">
|
||||
<div class="stamp" style="width:200px;">
|
||||
<div style="margin-top: 15px;
|
||||
position: relative;
|
||||
font-family:'Vollkorn', serif;
|
||||
font-size: 16px;
|
||||
line-height: 25px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
color: #75526b;
|
||||
border: 3px dashed #75526b;
|
||||
float: left;
|
||||
padding: 4px 12px;
|
||||
-webkit-transform: rotate(-1deg);
|
||||
-o-transform: rotate(-1deg);
|
||||
-moz-transform: rotate(-1deg);
|
||||
-ms-transform: rotate(-1deg);">
|
||||
Tested on Odoo<br/>11.0 community
|
||||
</div>
|
||||
<!--<div style="margin-top: 15px;
|
||||
position: relative;
|
||||
font-family:'Vollkorn', serif;
|
||||
font-size: 16px;
|
||||
line-height: 25px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
color: #75526b;
|
||||
border: 3px dashed #75526b;
|
||||
float: left;
|
||||
padding: 4px 12px;
|
||||
-webkit-transform: rotate(6deg);
|
||||
-o-transform: rotate(6deg);
|
||||
-moz-transform: rotate(6deg);
|
||||
-ms-transform: rotate(6deg);">
|
||||
Tested on Odoo<br/>11.0 enterprise
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import test_compute_domain
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from openerp.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestComputeDomain(TransactionCase):
|
||||
at_install = True
|
||||
post_install = True
|
||||
|
||||
def setUp(self):
|
||||
super(TestComputeDomain, self).setUp()
|
||||
self.demo_user = self.env.ref('base.user_demo')
|
||||
self.env['ir.rule'].create({'name': 'test ir_rule_website',
|
||||
'model_id': self.env.ref('base.model_res_partner').id,
|
||||
'domain_force': "[('parent_id', 'in', [website_id])]"})
|
||||
|
||||
def _cached_compute_domain(self, website_id):
|
||||
test_domain = ('parent_id', 'in', [website_id])
|
||||
domain = self.env['ir.rule'].sudo(user=self.demo_user.id).with_context(website_id=website_id)._compute_domain('res.partner')
|
||||
self.assertTrue(test_domain in domain)
|
||||
|
||||
def test_cache(self):
|
||||
self._cached_compute_domain(1)
|
||||
self._cached_compute_domain(2)
|
||||
Loading…
Reference in New Issue