【问题标题】:odoo override group permission on objectodoo 覆盖对象的组权限
【发布时间】:2016-06-08 14:40:53
【问题描述】:

我在 odoo 8 中有一个任务,我必须创建一个名为 (picker) 的用户组,它将继承到仓库用户组。作为仓库经理 -> 用户 -> 测试。所以我按如下方式创建了用户:

<record id="warehouse_picker" model="res.groups">
    <field name="name">picker </field>
    <field name="category_id" ref="base.module_category_warehouse_management"/>
    <field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
 </record>

我还添加了此代码以授予该用户访问菜单仓库的权限:

<record id="stock.group_stock_user" model="res.groups">
     <field name="implied_ids" eval="[(4, ref('warehouse_picker')),(4, ref('stock.group_locations'))]"/>
</record>  

现在,Group Warehouse / User 对对象 (stock.picking) 的访问规则为 1,1,1,1。我需要将此规则 (stock.picking) 限制/覆盖为 1,0,0,0

我尝试了以下代码,但不起作用:

<record id="warehouse_picker_rule" model="ir.rule">
    <field name="name">Warehouse Picker Rule</field>
    <field name="model_id" ref="stock.model_stock_picking"/>
    <field name="domain_force">[(1, '=', 1)]</field>
    <field name="groups" eval="[(4, ref('warehouse_picker'))]"/>
    <field name="perm_read" eval="False"/>
    <field name="perm_write" eval="False"/>
    <field name="perm_create" eval="False"/>
    <field name="perm_unlink" eval="True"/>
</record>

有人可以帮我解决/覆盖现有规则吗?我不想触及核心模块规则。

谢谢,

【问题讨论】:

    标签: openerp odoo-8 rules


    【解决方案1】:

    检查该规则来自哪个模块,然后您可以覆盖如下:

    <record id="module.rule_id" model="ir.model.access">
        <field name="perm_read" eval="True"/>
        <field name="perm_write" eval="False"/>
        <field name="perm_create" eval="False"/>
        <field name="perm_unlink" eval="False"/>
    </record>
    

    例如,模块是 stock 并且 rule_id(您可以在 GUI 中使用调试模式找到它或查看模块 ir.model.access.csv 第一列)是 move_read_all:

    <record id="stock.move_read_all" model="ir.model.access">
        <field name="perm_read" eval="True"/>
        <field name="perm_write" eval="False"/>
        <field name="perm_create" eval="False"/>
        <field name="perm_unlink" eval="False"/>
    </record>
    

    如果我理解你的愿望是正确的,那么你必须通过以下方式覆盖它:

    <record id="stock.access_stock_picking_user" model="ir.model.access">
        <field name="perm_read" eval="True"/>
        <field name="perm_write" eval="False"/>
        <field name="perm_create" eval="False"/>
        <field name="perm_unlink" eval="False"/>
    </record>
    

    您需要将依赖项放入自定义模块的清单文件中。

    【讨论】:

    • 您好 CZoellner,我没有在库存中找到规则 move_read_all。此外,在 ir.model.access.csv 中没有作为 move_read_all 的列值。你能指导我如何使用调试模式。
    • 这只是一个简单的例子。我试图找到您的明确访问规则。首先使用模块库存中的 ir.model.access.csv (stock/security/ir.model.access.csv)。搜索 model_stock_picking 找到 2 个条目,access_stock_picking_user,stock.picking user,model_stock_picking,stock.group_stock_user,1,1,1,1 是您想要的。第一列包含 xml id(或外部 id)并且是 access_stock_picking_user
    • 通过 GUI 查找它有点棘手。您需要激活调试。转到设置/技术/安全/访问控制列表并搜索模型 stock.picking。你会发现一些条目。现在标记您想要 xml id 的那个,然后切换到表单视图(右上方)。现在打开调试菜单并查找“查看日志”或带有元数据的内容。在该弹出窗口中,您将获得 xml id。
    • 您到底使用什么 odoo 版本?我在 Odoo V7 上搜索 xml id
    • 与 Odoo 8 中的 xml id 相同。
    【解决方案2】:

    做一件事,创建一个名为“ir.model.access.csv”的csv文件并在其中创建一条记录。

    此 csv 文件必须包含以下列。

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink       
    access_id,access_name,model_stock_picking,group_name_external_id,1,0,0,0
    

    并将其添加到 openerp.py 文件中,这样它会将特定模型的访问权限设置为特定组。并假设您想为所有用户设置此权限,然后只需将 "group_id" 字段留空,然后它将为所有用户设置此默认权限。

    【讨论】:

    • 感谢 Emipro Technologies Pvt。有限公司
    • 您好 Emipro,适用于自己模块中的访问规则,但如果您需要覆盖其他组访问规则,这不起作用。例如,仓库拣货员(在 stock.picking 上创建规则)取决于两个因素,1)stock.picking 访问规则 2)如果用户在销售/查看自己的潜在客户组。所以要禁用需要覆盖两者。首先很好,因为它是仓库/用户的子组。但是第二次它创建访问规则但不覆盖它。我在 csv 中使用了以下行:access_stock_picking_salesman,stock_picking salesman,stock.model_stock_picking,base.group_sale_salesman,1,1,0,0。
    • 一旦您设置了此规则,然后从任何其他模块再次为该组设置规则,它将覆盖此权限。无论您是通过外部 id 还是通过 csv 设置规则,如果它存在于任何其他将在此模块之后安装的模块中,它将被覆盖。而且我的答案和@CZoellner 的答案没有任何区别。任何模块安装/升级过程最后执行的规则将应用于访问权限。
    • 嗨 Emipro,当我覆盖 csv 中的规则时,它创建了如下新规则 stock_picking salesman Sales / See own Leads 1,1,0,0 但它也具有系统定义的先前规则如下 stock_picking salesman Sales / See own Leads 1,1,1,0 我的意思是它有两个规则,因此这不能覆盖。
    • 您是否尝试过使用相同的 id(id 是 external_id,如“stock.access_stock_picking_user”)?
    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 2020-12-02
    • 1970-01-01
    • 2019-08-24
    • 2018-12-21
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多