コンテンツへスキップ
メニュー
この質問にフラグが付けられました
9 返信
62599 ビュー

In Attendance section there is 'name' field used to display/edit date. I am having two user groups 'base.group_user' and 'base.group_hr_user'. I want to use inheritance and make this field readonly for 'base.group_user' group and other group 'base.group_hr_user' should work as it is.

Searched over this community and did some changes like that

<record id="odoo_hr_attendance_view_form" model="ir.ui.view">
            <field name="name">hr.attendance.form.inherit</field>
            <field name="model">hr.attendance</field>
            <field name="inherit_id" ref="hr_attendance.view_attendance_form" />
            <field name="groups_id" eval="[(6,0, [ref('base.group_user')])]" />
            <field name="arch" type="xml">                
                <field name="name" position="attributes">
                   <attribute name="attrs">{'readonly':1}</attribute>                   
                </field>                
            </field>
</record>   

But now it's showing readonly for both the groups.

Can anyone please guide me how to achieve my results?

アバター
破棄
最善の回答

It is because user, which is in base.group_hr_user is also in base.group_user - you should consider adding another attribute, that readonly is 0 when user belongs to base.group_hr_user.

アバター
破棄
著作者

@Mariusz Thanks for your answer. Tried following code as well but still not working : hr.attendance.form.inherithr.attendance{'readonly':1}hr.attendance.form.inherithr.attendance{'readonly':0}

著作者

Tried as per your suggestion by adding one more code block with group base.group_hr_user and readonly 1 but not working :(

著作者

Sorry readonly 0

著作者 最善の回答

Thanks @Mariusz. I was able to fix the issue as  per your suggestion with following code:

<record id="oodo_hr_attendance_view_form" model="ir.ui.view">
            <field name="name">hr.attendance.form.inherit</field>
            <field name="model">hr.attendance</field>
            <field name="inherit_id" ref="hr_attendance.view_attendance_form" />
            <field name="groups_id" eval="[(6, 0, [ref('base.group_hr_manager') ])]" />                
            <field name="arch" type="xml">                                   
                <field name="name" position="attributes">
                   <attribute name="readonly">0</attribute>                   
                </field>                             
            </field>
</record>
<r
ecord id="ids_hr_attendance_view_form_mgr" model="ir.ui.view">
            <field name="name">hr.attendance.form.inheritmgr</field>

            <field name="model">hr.attendance</field>
            <field name="inherit_id" ref="hr_attendance.view_attendance_form" />
            <field name="groups_id" eval="[(6, 0, [ref('base.group_user') ])]" />                
            <field name="arch" type="xml">                                   
                <field name="name" position="attributes">
                   <attribute name="readonly">1</attribute>                   
                </field>                              
            </field>
</record>    

アバター
破棄

Alternatively it is possible to use the @api.constraints definition, to handle the "access logic" by the server. This is my preferred way, as we use also the XML RPC Api, where this logic have to be covered:

@api.constrains("stage_id")
def check_stage_id_permission(self):
# for the default value on create
if self.env.context.get("disable_stage_check", False):
return True

if (
self.env.ref("my_extension.my_access_group_id").id
not in self.env.user.groups_id.ids
):
raise UserWarning(
_(
"You are not authorized to change stage"
)
)

# on create just call the super with the context to disable the stage change, to allow it as "default" value

@api.model
def create(self, values):
return super(
myMODEL, self.with_context(disable_stage_check=True)
).create(values)

@Andreas - nice solution but having that context to override might be a security issue, if somebody knows the context key can bypass it from any RPC call (browser or API), maybe use sudo() or some other way

最善の回答

Hi Shiv modi,

i have a view as like below, but the field is still readable. can you please help me on this.

<record id="view_staff_reservation_form" model="ir.ui.view">

<field name="name">reservation.form.view</field>

<field name="model">reservations.reservation</field>

<field name="groups_id" eval="[(6,0, [ref('base.group_library_user')])]" />

<field name="arch" type="xml">

<tree string="Reservation">

<field name="id"></field>

<field name="reserve_item_id"></field>

<field name="from_date"></field>

<field name="to_date"></field>

<field name="is_reserve"></field>

<field name="is_reserve_accepted" position="attributes">

<attribute name="attrs">{'readonly':1}</attribute>

</field>

</tree>

</field>

</record>

アバター
破棄
最善の回答

Hello Nagarjuna,

Your code is :

<field name="is_reserve_accepted" position="attributes">

<attribute name="attrs">{'readonly':1}</attribute>

</field>

Replace it with:

<field name="is_reserve_accepted" position="attributes">

<attribute name="readonly">1</attribute>

</field>

Hope, it helps you.

アバター
破棄
関連投稿 返信 ビュー 活動
1
10月 24
1391
8
11月 19
7539
3
8月 24
15679
0
5月 23
1598
1
3月 23
2146