Skip to Content
Menu
This question has been flagged
3 Replies
380 Zobrazenia

On the website, I want to show users sales orders and products.


The problem I encountered is that Odoo does not want to display both (sales orders and products).

Therefore, I added recording rules and access rights for sale.order, product.tamplate, and product.product.

This works for sales orders; orders are displayed on the website, but not for products. 

Sale order rule

    <record id="rule_portal_sale_order_final_recipient" model="ir.rule">

        <field name="name">Portal: Sale Orders by Final Recipient</field>

        <field name="model_id" ref="sale.model_sale_order"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[('final_recipient_id', '=', user.partner_id.id)]</field>

    </record>

Products rules

    <record id="rule_portal_product_template_final_recipient" model="ir.rule">

        <field name="name">Portal: Product template</field>

        <field name="model_id" ref="product.model_product_template"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[]</field>

    </record>

    <record id="rule_portal_product_product_final_recipient" model="ir.rule">

        <field name="name">Portal: Product product</field>

        <field name="model_id" ref="product.model_product_product"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[]</field>

    </record>

 I also tried adding (1 , “=”, 1) to the domain, but that doesn't work either. I can find my entry rules in the portal settings, and there are only my own rules there, which means that there are no rules that can be over than my rules.

Access rights

access__product_product__group_user,access__product_product__group_user,product.model_product_product,base.group_user,1,1,1,1

access__product_product__group_portal,access__product_product__group_portal,product.model_product_product,base.group_portal,1,0,0,0

access__product_template__group_user,access__product_template__group_user,model_product_template,base.group_user,1,1,1,1

access__product_template__group_portal,access__product_template__group_portal,model_product_template,base.group_portal,1,0,0,0

access__sale_order__group_portal,access__sale_order__group_portal,model_sale_order,base.group_user,1,1,1,1

access__sale_order__group_user,access__sale_order__group_user,model_sale_order,base.group_portal,1,0,0,0

 

UPDATE:
I fortgot to add that i have multicompany. And just now i changed company_id in users settings, and sale_orders with products works fine. All products have field company_id = False.

That is for one company all works, for another not. Its very strange




Avatar
Zrušiť
Best Answer

Hi Anton,


The issue seems to be with the access rights, not just the record rules. In your ir.model.access.csv, portal users currently have:


..., base.group_portal,1,0,0,0


That means they can “create” but they cannot read products (read=0). Without read access, record rules won’t help.


Try updating the lines like this:

access_product_product_portal,access_product_product_portal,product.model_product_product,base.group_portal,1,1,0,0

access_product_template_portal,access_product_template_portal,product.model_product_template,base.group_portal,1,1,0,0


Then update modules / restart Odoo.


Also, since you mentioned multi-company earlier, double-check that products either have company_id = False (shared) or match the user’s company. Otherwise, Odoo will filter them out.

That should make the products visible on the portal.


Best regards,

Marvin – Cloud Support Engineer

 

Avatar
Zrušiť
Best Answer

Hi,


1- Correct access rights for portal users


Update ir.model.access.csv so portal users have read on product models:


access_product_product_portal,access_product_product_portal,product.model_product_product,base.group_portal,1,0,0,0

access_product_template_portal,access_product_template_portal,product.model_product_template,base.group_portal,1,0,0,0


Notice: use the correct model_product_template and model_product_product XML IDs.



2- Record rules for portal


If you want all products visible:


<record id="rule_portal_product_template" model="ir.rule">

    <field name="name">Portal: Product Templates</field>

    <field name="model_id" ref="product.model_product_template"/>

    <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

    <field name="domain_force">[(1, '=', 1)]</field>

</record>


<record id="rule_portal_product_product" model="ir.rule">

    <field name="name">Portal: Product Variants</field>

    <field name="model_id" ref="product.model_product_product"/>

    <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

    <field name="domain_force">[(1, '=', 1)]</field>

</record>



If you only want products that are published on the website:


<field name="domain_force">[('website_published', '=', True)]</field>



* Sales orders work because you made a custom domain rule.

* Products don’t show because portal users lack read access and/or are filtered by website rules.

* Give portal users read rights in ir.model.access + create simple record rules (e.g., [('website_published', '=', True)]).

* Verify no hidden global rules are blocking the portal.



Hope it helps

Avatar
Zrušiť
Autor Best Answer

Hello, o followed this 4 steps and it still not working.
Record rules with domain_force = ('id', '!=', False)]

    <record id="rule_portal_product_template_final_recipient" model="ir.rule">

        <field name="name">Portal: Product template</field>

        <field name="model_id" ref="product.model_product_template"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[('id', '!=', False)]</field>

    </record>

    <record id="rule_portal_product_product_final_recipient" model="ir.rule">

        <field name="name">Portal: Product product</field>

        <field name="model_id" ref="product.model_product_product"/>

        <field name="global" eval="False"/>

        <field name="groups" eval="[(4, ref('base.group_portal'))]"/>

        <field name="domain_force">[('id', '!=', False)]</field>

    </record>

Double checked access rights 

access__product_product__group_user,access__product_product__group_user,product.model_product_product,base.group_user,1,1,1,1

access__product_product__group_portal,access__product_product__group_portal,product.model_product_product,base.group_portal,1,0,0,0

access__product_template__group_user,access__product_template__group_user,product.model_product_template,base.group_user,1,1,1,1

access__product_template__group_portal,access__product_template__group_portal,product.model_product_template,base.group_portal,1,0,0,0

access__sale_order__group_portal,access__sale_order__group_portal,model_sale_order,base.group_user,1,1,1,1

access__sale_order__group_user,access__sale_order__group_user,model_sale_order,base.group_portal,1,0,0,0

I checked all files that have 

<field name="groups" eval="[(4, ref('base.group_portal'))]"/>

but mostly it was from default addons, or records that do not  belong to product models

And also i restarted db and updated modules

 




Avatar
Zrušiť
Related Posts Replies Zobrazenia Aktivita
0
apr 22
2522
0
nov 23
1218
3
máj 25
3224
0
dec 23
2806
1
sep 23
5774