【问题标题】:Manage webservice from odoo从 odoo 管理网络服务
【发布时间】:2018-10-12 20:24:47
【问题描述】:

我是 Odoo 11 的新手,我创建了一个名为 'coupon' 的模块,为此模块我创建了一个安全组和一个添加到该组的默认用户:

        <record id="default_coupon_user" model="res.users">
            <field name="login">couponuser</field>
            <field name="password">couponuser</field>
            <field name="password_crypt">couponuser</field>
            <field name="name">Default User Coupon</field>
            <field name="display_name">Default Coupon User</field>
            <field name="customer">False</field>
        </record>

        <record id="coupon_managers_group" model="res.groups" >
            <field name="name">Coupon Managers Group</field>
            <field name="comment">Coupon Managers Group that will be used in the Coupon microservice.</field>
            <field name="category_id" ref="base.module_category_coupon"/>
            <field name="users" eval="[(4, ref('coupon.default_coupon_user'))]"/>
        </record>

我的模块依赖于网站,因为我需要创建一个网站,我为该网站创建了一个索引页面:

        <!-- === Coupon Page  === -->
        <template id="index_template">
            <t t-call="website.layout">
                <div id="wrap">
                    <div class="container">
                        <h1>Coupons</h1>
                        <a href="/payum_coupon/create" class="btn btn-primary btn-lg">
                            Add
                        </a>
                        <p>paginas:
                            <t t-esc="coupons['pg']"/>
                        </p>
                        <p>total:
                            <t t-esc="coupons['total']"/>
                        </p>
                        <ul class="clientes">
                            <t t-foreach="coupons['items']" t-as="i">
                                <li>
                                    <a t-attf-href="/payum_coupon/{{i['email']}}">
                                        <t t-esc="i['firstName']"/>
                                        <t t-esc="i['lastName']"/>
                                        -
                                        <t t-esc="i['email']"/>
                                    </a>
                                </li>
                            </t>
                        </ul>
                    </div>
                </div>
            </t>
        </template>

        <record id="coupon_page" model="website.page">
            <field name="name">Index Coupon page</field>
            <field name="website_published">True</field>
            <field name="url">/coupon</field>
            <field name="view_id" ref="index_template"/>
            <field name="groups">coupon.coupon_managers_group</field>
        </record>

和带有以下代码的 website.menu:

     <record id="coupon_page_link" model="website.menu">
        <field name="name">Coupon</field>
        <field name="page_id" ref="coupon_page"/>
        <field name="parent_id" ref="website.main_menu"/>
    </record>

将由所述菜单执行的控制器中的python代码是这样的:

@http.route('/coupon', auth='user', website=True)
def index(self, **kw):
    #<<my code here>>

我需要几样东西:

  1. 如果会话中的用户不在 'coupon.coupon_managers_group' 组中,则显示 'index' 页面时,则不显示菜单

  2. 当控制器方法 '/coupon' 被执行时,会验证会话中的用户是否在组 'coupon.coupon_managers_group'

这个网站有一个特殊性,我的模块没有模型,因为它是管理一个api rest应用程序的数据,也就是说,在odoo中我必须创建list、create等视图,但是数据被写入并从远程 Web 服务中读取。

我在互联网上搜索了很多网站,但没有找到任何东西,因为它们总是提到 odoo 中的本地案例。

【问题讨论】:

    标签: python-3.x web-services odoo-11 odoo-view


    【解决方案1】:

    要根据用户组隐藏网站菜单,您可以执行以下操作:

    from odoo import api, models
    
    class Menu(models.Model):
        _inherit = "website.menu"
    
        @api.one
        def _compute_visible(self):
            if self.clean_url() == '/coupon' and not self.env.user.has_group('coupon.coupon_managers_group'):
                return False
            return super(Menu, self)._compute_visible()
    

    在路由 /coupon 的控制器中,您可以检查用户组,例如:

    request.env.user.has_group('coupon.coupon_managers_group')
    

    【讨论】:

    • 非常感谢@axel-mendoza,这是一个非常准确和具体的答案,毫无疑问,你应该得到 +1
    • 很高兴为您提供帮助
    最近更新 更多