Skip to Content
Meniu
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Această întrebare a fost marcată
3 Răspunsuri
373 Vizualizări

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




Imagine profil
Abandonează
Cel mai bun răspuns

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

 

Imagine profil
Abandonează
Cel mai bun răspuns

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

Imagine profil
Abandonează
Autor Cel mai bun răspuns

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

 




Imagine profil
Abandonează
Related Posts Răspunsuri Vizualizări Activitate
0
apr. 22
2515
0
nov. 23
1208
3
mai 25
3213
0
dec. 23
2801
1
sept. 23
5746