Odoo 9有没有办法在表单视图中的某个字段上处理不同组的授权?

时间:2017-08-03 02:26:35

标签: openerp authorization odoo-9

我正在尝试创建表单视图。

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

然而,有许多属性,例如与授权相关的组和不可见,因此某些人可以看到该字段。

groups="base.group_hr_user"

但是,有某种方法可以让某些群体可以编辑该字段,而另一组则不能吗?

3 个答案:

答案 0 :(得分:3)

首先,您不能使用像这样的域

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

没有'=='运算符,请改用=

现在,为了回答你的问题,如果你想为另一个组创建一个特殊视图,其中一些元素只读一个组,另一个组可以编辑,你必须这样做。

对于默认视图:

<record id="some_model_view" model="ir.ui.view">
    <field name="name">some.model.form</field>
    <field name="model">some.model</field>
    <field name="arch" type="xml">
        <form>
             <field name="some_field" readonly="1"/>
        </form>
    <field/>
</record>

对于某个群体:

<record id="some_model_view_for_other_group" model="ir.ui.view">
    <field name="name">some.model.form</field>
    <field name="model">some.model</field>
    <field name="inherit_id" ref="my_module.some_model_view"
    <field name="groups_id" eval="[(6, 0, [ref('some.first_group')])]" />
    <field name="arch" type="xml">
        <field name="some_field" position="attributes">
            <attribute name="readonly">0</attribute>
        </field>
    <field/>
</record>

答案 1 :(得分:3)

添加新字段以检查用户是管理员还是用户。

新的Api方法

check_user = fields.Boolean(string='user',compute='_compute_user_check')

@api.multi
def _compute_user_check(self):
    if self.user_has_groups('purchase.group_purchase_manager'):
        self.check_user =True

在视图中

<field name="is_positive" attrs="{'readonly':[('check_user','=','True')]}"/>

答案 2 :(得分:1)

我将展示一个示例,说明此功能在销售组中的运作方式。

我在销售订单行中设置单价字段只读我们选择用户组user:own documents only该字段为 可编辑 其他两组user:All documetsmanager

首先,我创建一个布尔字段,用于检查用户属于哪个组

is_own_user = fields.Boolean(string="Own user", compute='compute_own_user')

当用户属于组用户时,则指定布尔字段为True:仅限自己的文档分配给False

@api.depends('product_id')
def compute_own_user(self):
    res_user_id = self.env['res.users'].search([('id', '=', self._uid)])
    for rec in self:
        if res_user_id.has_group('sales_team.group_sale_salesman') and not res_user_id.has_group('sales_team.group_sale_salesman_all_leads'):
            rec.is_own_user = True
        else:
            rec.is_own_user = False

在xml中使is_own_user不可见并替换单价字段

<xpath expr="//notebook/page/field[@name='order_line']/tree/field[@name='price_unit']" position="replace">
    <field name="price_unit" attrs="{'readonly': [('isown_user', '=', True)]}" />
</xpath>