2016-06-08 94 views
3

我在odoo 8中有一个任务,我必须创建一个名为(picker)的用户组,它将继承仓库用户组。作为仓库经理 - >用户 - >测试。所以我创建的用户,如下所示:odoo覆盖对象的组权限

<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> 

现在,该集团仓库/用户有权访问规则的object(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> 

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

感谢,

回答

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> 

例如,模块是股票和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> 

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

+0

CZoellner嗨,我没有股票查找规则move_read_all。此外,在ir.model.access.csv中没有列值作为move_read_all。你能指导我如何看待使用调试模式。 – user280960

+0

这只是一个简单的例子。我试图找到你明确的访问规则。首先在模块库存(stock/security/ir.model.access.csv)中使用ir.model.access.csv。搜索model_stock_picking发现2项和'access_stock_picking_user,stock.picking用户,model_stock_picking,stock.group_stock_user,1,1,1,1'是你想要的。第一列包含xml id(或外部id),并且是'access_stock_picking_user'。 – CZoellner

+0

通过GUI查找它有点棘手。您需要激活调试。转至设置/技术/安全/访问控制列表并搜索模型stock.picking。你会发现一些条目。现在标记一个你想要的XML ID,然后切换到窗体视图(右上)。现在打开调试菜单并查找“查看日志”或元数据。在该弹出窗口中,您将获得xml id。 – CZoellner

1

做一两件事,创建一个名为“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”字段,那么它将为所有用户设置默认权限。

+0

谢谢Emipro Technologies Pvt。 Ltd. – user280960

+0

嗨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。 – user280960

+0

一旦你设置了这个规则,并在此之后从任何其他模块再次设置该组的规则,它将覆盖此权限。无论您是通过外部ID还是通过csv设置规则,它都会被覆盖,如果它将在任何其他将安装在此模块之后的模块中。而且我和@CZoellner的答案没有任何区别。将由任何模块安装/升级过程最后执行的规则将应用于访问权限。 –