如何根据组和状态进行字段读取?

时间:2013-09-20 09:14:53

标签: openerp openerp-8

我想根据群组和状态制作字段备用。

就像我有两个grops 1.经理组2.用户组

如果我将用户组提供给任何用户,然后状态完成,则该用户只读取该字段。

希望我能够清楚地理解

感谢

5 个答案:

答案 0 :(得分:29)

创建boolean类型的功能字段。如果登录用户在用户组下并且状态已完成,则返回true。然后在视图中指定attrs="{'readonly':[('boolean_field_name','=',True)]}"

OR

首先创建表单视图。然后继承视图也指定组。例如,在销售订单表单视图中,我想在状态不在草稿或发送时为组用户提供只读客户参考字段。

<record id="view_order_form_cust_ref_readonly" model="ir.ui.view">
    <field name="name">sale.order.form.readonly.cust</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="groups_id" eval="[(6, 0, [ref('base.group_user') ])]"/>
    <field name="arch" type="xml">
        <field name='client_order_ref'" position="attributes">
            <attribute name="attrs">{'readonly':[('state','not in',['draft','sent'])]}</attribute>
        </field>
    </field>
</record>

答案 1 :(得分:4)

您可以在OpenERP中的字段级别应用访问规则,例如在py

'name': fields.char('Name', size=128, required=True, select=True,
 read=['base.group_user'] ),

对于xml中的状态:

<field name="name " attrs="{'readonly': [('state','=','done')]}"/>

答案 2 :(得分:2)

还有另一种甜蜜的方式来实现这一目标。创建一个功能字段,并在该检查中检查分配给该用户的组,并且不存储该字段。在视图中使用attrs中的该字段。

如果用户不属于产品修改组,请在产品中说明您不希望任何用户修改内部参考

创建一个组。

<data noupdate="1" >
    <record model="res.groups" id="group_product_modify">
        <field name="name">Product Modify</field>
        <field name="users" eval="[(4, ref('base.user_root'))]"/> 
    </record>
</data>     

Python文件

class product_template(models.Model):
    _inherit="product.template"

    @api.one
    def set_access_for_product(self):
        self.able_to_modify_product = self.env['res.users'].has_group('product_extended_ecom_ept.group_product_modify')

    able_to_modify_product = fields.Boolean(compute=set_access_for_product, string='Is user able to modify product?')

XMl 文件应该看起来像,

<record model="ir.ui.view" id="product_template_update_internal_code_ept">
            <field name="name">Product Template extension</field>
            <field name="inherit_id" ref="product.product_template_only_form_view"/>
            <field name="model">product.template</field>
            <field name="priority" eval="50" />
            <field name="arch" type="xml">
                <field name="default_code" position="before">
                    <field name="able_to_modify_product" invisible="1" />
                </field>
                <field name="default_code" position="attributes">
                    <attribute name="attrs">{'readonly' : [('able_to_modify_product','=',False)]}</attribute>
                </field>
            </field>
        </record>   

答案 3 :(得分:0)

如果您使用的是Odoo Web客户端(GUI)而不是代码,那么有一些非正统的方法可以实现。 只需复制包含与原始字段相同值的字段(在Related Field下的Advanced Properties中提供原始字段名称)并将其标记为只读。

enter image description here 然后,您可以隐藏无法编辑该字段的用户的原始字段,并隐藏可以使用groups属性进行编辑的用户的复制字段。

enter image description here

答案 4 :(得分:-10)

openerp不支持这种功能。

为什么你不去参加tryton,这是openerp的分支。

如果你想这样做,你可以使用一个tric,制作同一个对象的两个表单视图,向管理员用户显示一个,向用户组用户显示另一个,并且只显示字段

由于