odoo 17 restrict user to see his products

65 Views Asked by At
from odoo import api, fields, models

class ResUser(models.Model): _inherit = 'res.users'

dealer_category_ids = fields.Many2many(
    string="Dealer Category Tags",
    comodel_name='rgb.dealer.category',
    relation='user_tag_rgb_dealer_category_rel',
)

class ProductTemplate(models.Model): _inherit = 'product.template'

dealer_category_ids = fields.Many2many(
    string="Dealer Category Tags",
    comodel_name='rgb.dealer.category',
    relation='product_tag_rgb_dealer_category_rel',
)

class ResPartner(models.Model): _inherit = 'res.partner'

dealer_category_ids = fields.Many2many(
    string="Dealer Category Tags",
    comodel_name='rgb.dealer.category',
    relation='partner_tag_rgb_dealer_category_rel',
)

in this code i want to restrict user to see his partners and products by the mutual dealer_category_ids tags . so make user to see products that has any dealer_category_id taken by user or the user has any dealer_category_id that taken in product , the same with partner like product

1

There are 1 best solutions below

0
Ragab Mahmoud On
<record id="record_rule_product_access" model="ir.rule">
        <field name="name">Product Access Rule Allow</field>
        <field name="model_id" ref="product.model_product_template"/>
        <field name="groups" eval="[(4, ref('group_allow_all_products'))]"/>
        <field name="domain_force">[('id', '>', 0)]</field>
    </record>

    <record id="record_rule_product_access_restrict" model="ir.rule">
        <field name="name">Product Access Rule Restrict</field>
        <field name="model_id" ref="product.model_product_template"/>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
        <field name="domain_force">[('dealer_category_ids', 'in', user.dealer_category_ids.ids)]</field>
    </record>


    <record id="record_rule_partner_access" model="ir.rule">
        <field name="name">Partner Access Rule Allow</field>
        <field name="model_id" ref="base.model_res_partner"/>
        <field name="groups" eval="[(4, ref('group_allow_all_products'))]"/>
        <field name="domain_force">[('id', '>', 0)]</field>
    </record>

    <record id="record_rule_partner_access_restrict" model="ir.rule">
        <field name="name">Partner Access Rule Restrict</field>
        <field name="model_id" ref="base.model_res_partner"/>
        <field name="groups" eval="[(4, ref('base.group_user'))]"/>
        <field name="domain_force">[('dealer_category_ids', 'in', user.dealer_category_ids.ids)]</field>
    </record>

Done with these record rules