Home 관리자만 수정이 가능하도록 View 변경하기
Post
Cancel

관리자만 수정이 가능하도록 View 변경하기

문제 상황

관리자만 볼 수 있게, 관리자만 수정할 수 있게, 관리자만 선택할 수 있게 … 등 관리자가 아니라도 특정 사용자만 가능하도록 하고 싶은 경우가 있다.

그 중 사용자에 따라 보여지고, 숨겨지고를 가장 많이 사용하는데 groups 속성을 사용하면 해당 그룹의 사용자만 필드를 볼 수 있도록 설정할 수 있다.


ex) base.group_erp_manager 그룹에 사용자만 vat 필드를 볼 수 있다.

1
<field name="vat" groups="base.group_erp_manager"/>


문제는 관리자만 필드 수정이 가능하고 그 외 사용자는 수정이 불가능해야 하는데, groups 속성으로는 특정 그룹에 사용자만 필드 수정이 가능하도록 설정할 수 없다.

해결 방안

방법1. field 추가

사용자가 관리자 그룹임을 체크하는 필드를 생성해, view에서 해당 필드를 활용해 사용자가 관리자 그룹임을 판단한다.

model(python)

1
2
3
4
5
6
7
is_admin = fields.Boolean('Is Admin', compute='_compute_is_admin')

def _compute_is_admin(self):
    if SUPERUSER_ID == self._uid:
        self.is_admin = True
   else:
        self.is_admin = False

view(xml)

1
2
<field name="is_admin" invisible="1"/>
<field name="vat" attrs="{'readonly': [('is_admin', '!=', True)]}"/>

방법2. view 수정

기본적으로 모든 사용자가 필드를 수정하지 못하도록 readonly를 True로 설정한다.

1
2
3
4
5
6
7
8
9
10
 <record id="view_template_form_A" model="ir.ui.view">
    <field name="name">product.template.inherit.readonly</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.view_template_form"/>
    <field name="arch" type="xml">
        <xpath expr="//field[@name='vat']" position="attributes">
            <attribute name="readonly">True</attribute>
        </xpath>
    </field>
</record>


groups_id 속성을 사용해 해당 그룹의 사용자만 해당 view를 사용하도록 할 수 있다.

base.group_erp_manager 그룹의 사용자만 view가 적용되기 때문에, readonlyFalse로 설정한다.

1
2
3
4
5
6
7
8
9
10
11
 <record id="view_template_form_B" model="ir.ui.view">
    <field name="name">product.template.inherit.editable</field>
    <field name="model">product.template</field>
    <field name="groups_id" ref="[(6, 0, [ref('base.group_erp_manager')])]"/>
    <field name="inherit_id" ref="custom_product.view_template_form_A"/>
    <field name="arch" type="xml">
        <xpath expr="//field[@name='vat']" position="attributes">
            <attribute name="readonly">False</attribute>
        </xpath>
    </field>
</record>

마치며, 🙇🏻

참고한 사이트

Odoo forum How to set a field editable only for a group in odoo9

Odoo forum How to make field readonly except administrative user in odoo

This post is licensed under CC BY 4.0 by the author.