Files
odoo_source/addons/hr_attendance/security/hr_attendance_security.xml
T
nie 57b52e80e7 [FIX] hr_attendance: user can see other users attendances
Steps:
- As admin, go to Settings > Users & Companies > Users
- Edit Mark Demo (demo)
- In Human Resources > Attendances, select Manual Attendance or blank
- As demo, go to My Profile
- Click the smart button showing the hours worked for the last month
- Remove all filters

Bug:
The demo user, who hasn't the rights to see the other employees
attendances, can see them.

Explanation:
Every user must have the right to read attendances in order to see their
own attendances. Not giving the users the read rights in the security
record rule prevents the record rule from being applied when reading
attendances. This makes the read access rights the only rule and allows
everyone to see the attendances of the others.

This commit also fixes the default selected employee when going to the
attendances tree view on these paths:
- User
- Employee
- User > Employee

In fact, sometime, `active_id` is the ÌD of the user and not of the
employee. This leads to incorrect results since another employee's
attendances are shown.

Finally, this commit prevents users from creating attendances from other
apps since only attendance officers and above can have access to the
creation form within the Attendances app.

opw:2440117

closes odoo/odoo#65334

X-original-commit: b3247c81200200590d669b76a58d06e6adf66d69
Signed-off-by: backspac <backspac@users.noreply.github.com>
2021-02-01 13:01:06 +00:00

77 lines
3.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.module.category" id="base.module_category_human_resources_attendances">
<field name="description">Helps you manage the attendances.</field>
<field name="sequence">14</field>
</record>
<record id="group_hr_attendance_kiosk" model="res.groups">
<field name="name">Kiosk Attendance</field>
<field name="category_id" ref="base.module_category_human_resources_employees"/>
<field name="comment">The user will be able to open the kiosk mode and validate the employee PIN.</field>
<field name="implied_ids" eval="[(6, 0, [ref('base.group_user')])]"/>
</record>
<record id="hr.group_hr_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('hr_attendance.group_hr_attendance_kiosk'))]"/>
</record>
<record id="group_hr_attendance" model="res.groups">
<field name="name">Manual Attendance</field>
<field name="category_id" ref="base.module_category_human_resources_attendances"/>
<field name="comment">The user will gain access to the human resources attendance menu, enabling him to manage his own attendance.</field>
</record>
<record id="group_hr_attendance_user" model="res.groups">
<field name="name">Officer</field>
<field name="category_id" ref="base.module_category_human_resources_attendances"/>
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user')), (4, ref('hr_attendance.group_hr_attendance'))]"/>
</record>
<record id="group_hr_attendance_manager" model="res.groups">
<field name="name">Administrator</field>
<field name="category_id" ref="base.module_category_human_resources_attendances"/>
<field name="implied_ids" eval="[(4, ref('hr_attendance.group_hr_attendance_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
<record id="base.default_user" model="res.users">
<field name="groups_id" eval="[(4,ref('hr_attendance.group_hr_attendance_manager'))]"/>
</record>
<record id="group_hr_attendance_use_pin" model="res.groups">
<field name="name">Enable PIN use</field>
<field name="category_id" ref="base.module_category_hidden"/>
<field name="comment">The user will have to enter his PIN to check in and out manually at the company screen.</field>
</record>
<data noupdate="1">
<record id="hr_attendance_rule_employee_company" model="ir.rule">
<field name="name">Employee multi company rule</field>
<field name="model_id" ref="model_hr_attendance"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('employee_id.company_id','=',False),('employee_id.company_id', 'in', company_ids)]</field>
</record>
<record id="hr_attendance_rule_attendance_manager" model="ir.rule">
<field name="name">attendance officer: full access</field>
<field name="model_id" ref="model_hr_attendance"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4,ref('hr_attendance.group_hr_attendance_user'))]"/>
</record>
<record id="hr_attendance_rule_attendance_employee" model="ir.rule">
<field name="name">user: read and modify own attendance only</field>
<field name="model_id" ref="model_hr_attendance"/>
<field name="domain_force">[('employee_id.user_id','=',user.id)]</field>
<field name="perm_read" eval="1"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="1"/>
<field name="perm_unlink" eval="0"/>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
</record>
</data>
</odoo>