Closed albig closed 1 year ago
@albig @hbrunn
Es stehen grundsätzlich zwei Vorschläge zur Verfügung:
1.) Eine weitere Berechtigungsgruppe um Rechte etwas granularer aufzubauen und somit den Zugang auf bestimmte Berichte zu ermöglichen.
@hbrunn Bitte gerne näher erläutern an dieser Stelle.
2.) Anwendung des OCA Moduls base_custom_filters Spezielle Filter auf Attendance Records in Auswertungen, z.B. aufgebaut nach Abteilungen für einzelne Benutzer oder Benutzergruppen.
Hier einmal etwas näher erläutert und aufgezeigt am Beispiel Rechnungen aber auch für Attendances: Beispiel für Rechnungen
https://drive.google.com/file/d/1Ud_St8ZD4cMMt6eLSApgECJOzW8ciWre/view
Beispiel für Attendances
https://drive.google.com/file/d/1HLT2glqtXIiaob_jq4BLU_Rvpc1nlY8p/view
wir brauchen ohnehin beides. In standard Odoo siehst Du entweder alle hr.employees oder gar keine außer Deinem eigenen. Analog Urlaube, Überstunden, Anwesenheiten, da siehst Du auch entweder alle oder keine die nicht von Deinem employee kommen. Mit base_custom_filter kriegen wir die Einschränkungen in der UI prima hin, dann müssten aber alle Benutzer die überhaupt etwas von HR sehen sollen HR User sein, und die könnten dann mit einem direkten Link oder einem RPC-Request Daten lesen die sie nichts angehen.
Es braucht also eine Gruppe die sich von den Zugriffsrechten her wie die HR-Gruppe verhält, aber beschränkt auf das eigene Department (oder (in-)direkte Untergebene).
Relevante Modelle die dann beschränkt werden sollten wären
(gerne erweitern)
Es wundert mich ehrlich gesagt etwas dass ich dafür nichts in oca/hr finde. Falls wir uns über oben einig sind sollten hier dann die Module hr_department_user
, hr_department_user_attendance
und hr_department_user_holidays
beigesteuert werden die jeweils die gewünschten ir.rules beinhalten (und nicht viel mehr).
Wichtigste Frage hier ist dann ob es um das eigene Department geht, oder um die Untergebenen (Feld Manager auf dem employee-record), und da ob rekursiv oder nicht.
Ich habe in #19 mal mit employees und attendances angefangen, fur Urlaube wird das etwas trickier.
Die Änderung hier ist dass HR Users ('Personalsachbearbeiter') bei den relevanten Records auf ihre Untergebenen beschränkt werden, und die jeweilige admin-Gruppe diese Beschränkung wieder aufhebt.
Muss das vielleicht noch auseinander gezogen werden, dass es eine Gruppe ('Personalsachbearbeiter global') gibt die alle Records (oder nur alle der Abteilung, dann nennen wir sie 'Abteilungsleitung') sieht, aber keine Admin-Berechtigungen (ie Abteilungen, Urlaubstypen bearbeiten, das Config-Menu sehen) hat?
Die aktuelle Lösung funktioniert bei mir lokal mit employees.
Mit attendances bekomm ich es nicht hin. Wenn der "Abteilungsleiter" die Rechte "Anwesenheiten" -> "Personalsachbearbeiter" bekommt, kann er die attendances aller Mitarbeiter sehen.
Momentan ist die Abstufung bei Attendances ja folgende:
Manual Attendance -> Officer -> Adminstrator
Ja, ich denke wir brauchen da eine Stufe dazwischen. Also z.B.
Manual Attendance -> Department Officer -> (global) Officer -> Adminstrator
hast Du das Module mit -i
geupdated? Fur attendances muss ich existierende Regeln uberschreiben, das passiert nur im init-Modus, oder wenn ich halt ein Migrationsscript schreibe
Das scheint es gewesen zu sein. Mit -i verdigado_attendance
hab ich auch bei Attendances das gewünschte Ergebnis.
-i INIT
hab ich tatsächlich noch nie benutzt. In anderen Fällen hab ich das Modul deinstalliert und wieder installiert. Durch die Abhängigkeiten geht das bei verdigado_attendance
ja nicht.
-i INIT, --init=INIT
install one or more modules (comma-separated list, use "all" for all modules), requires -d
-u UPDATE, --update=UPDATE
update one or more modules (comma-separated list, use "all" for all modules). Requires -d.
die Standard-Vorgehensweise ist in solchen Fällen ein Migrationsscript zu schreiben dass die records die überschrieben werden müssen dann halt von Hand überschreibt.
Aber da wir planen das für die Produktions-Version ohnehin in verschiedene eigene Module zu stecken (planen wir das noch?), habe ich davon abgesehen, weil nur testweise die Versionsnummer erhöhen und das wieder zurückrollen auch recht viel Aufwand ist.
Zum Testen ist das schon in Ordnung. Ich habe einfach nicht damit gerechnet, dass ein normales Update / Upgrade des Moduls nicht ausreicht.
Wenn es Sinn macht, das Modul aufzusplitten, dann können wir das machen. Aktuell ist verdigado_attendances
das Sammel-Modul für alle verdigado-spezifischen Anpassungen. Und das würde auf allen Systemen identisch laufen.
Für das Einsehen der Attendance-Records funktioniert der aktuelle PR ja. Was aktuell fehlt, ist der Attendance-Report, weil das durch der durch die Rechte-Beschränkung in odoo_customize
herausgenommen wird.
Wenn die Überstunden-Berechnung jetzt funktioniert. Dann brauchen wir doch hr_attendance_report_theoretical_time
nicht mehr, oder? Dann sollte der "Manager" den Standard Attendance-Report nutzen können, aber NUR seine Mitarbeitenden sehen können.
ja, hr_attendance_report_theoretical_time
brauchen wir nicht mehr denke ich.
Meinst Du "Manager" in Odoo-Lingo oder verdigado-Lingo? Die Gruppe hr_attendance.group_hr_attendance_user
(ich finde xmlids immer am Eindeutigsten, dann gibt es keine Sprachverwirrung) sieht das Report-Menu ja ohnehin, was da bloss fehlt ist noch die Einschränkung auf [('employee_id','child_of',user.employee_ids.ids)]
, richtig?
Genau, diese Domain-Einschränkung fehlt. Das würde offenbar funktionieren. Kannst Du das nochmal prüfen, vereinheitlichen und einbauen?
<!-- Report -->
<record id="rule_hr_attendance_user" model="ir.rule">
<field name="name">Restrict HR attendance report to own attendance</field>
<field name="model_id" ref="hr_attendance.model_hr_attendance_report"/>
<field name="domain_force">[('employee_id','child_of',user.employee_ids.ids)]</field>
</record>
Wenn ich das richtig sehe, müssen wir für Urlaube / Time Off gar nichts machen. Ein Manager sieht nur sich und seine zugeordnete Mitarbeiter. Ich kann es nur nicht erklären, über welche Regeln das gemacht wird.
Deine Regel ist global, dh auch manager sehen immer nur ihre Untergebenen. Habe das auseinander gezogen so dass es konsistent mit den anderen Regeln ist: 3b634bb4328
Für Urlaube brauchen wir tatsächlich nichts zu tun, falls Ihr beim Konzept des Abwesenheits-Genehmigers bleiben wollt. Dann müssen halt zwei Felder verwaltet werden, scheint mir auch nicht schlimm, oder ggf das Feld verstecken und mit parent_id synchron halten?
Habe mal in hr-repo gefragt ob Interesse daran besteht das in die OCA zu stecken: https://github.com/OCA/hr/issues/1279
Das funktioniert noch nicht ganz.
Jetzt kann der einfache Employee / Attendance User wieder die Attendances aller Employees im Report sehen :-(
Für den Manager & Attendance Officer und Administrator passt es.
ah, ich hatte noch verdigado-spezifischen Rechte übersehen: https://github.com/verdigado/odoo-customize/blob/15.0/verdigado_attendance/security/ir.model.access.csv#L2 - habe dann hr_attendance.group_hr_attendance
noch bei der Einschränkung zugefügt.
Super. Das funktioniert jetzt für User, HR Officer und Administratoren:
Eine letzte Inkonsistenz:
hr.employee.public
records, die alle Daten zugänglich machen die Odoo nicht privacy-relevant findet. Idee hier ist eine allgemeine Liste zu haben von KollegInnen - das trotzdem einschränken, oder sollen wir im Zuge dessen eher einschränken was auf den public records zu sehen ist?Dass das nur die öffentlichen Daten der Employees sind, ist mir schon klar. Das hatte ich bisher auch so erklären können.
Der "HR Officer" sieht aber dieses öffentliche Employee-Verzeichnis nicht mehr:
Wir müssen da entscheiden, ob wir die (intern) öffentliche Liste beibehalten oder nicht. Wenn ja, dann müsste auch der HR-Officer sie sehen können.
note to self: Wenn das directory für alle angezeigt werden soll, muss das rückgängig gemacht werden: https://github.com/OCA/OCB/blob/15.0/addons/hr/models/ir_ui_menu.py#L13
@albig habe jetzt die Beschränkung von hr.employee.public auf das eigene Department gepushed. Achtung: Durch das Caching von Zugriffsrechten wird sich eine Änderung des Departments eines employees hier nicht sofort auswirken, am einfachsten Odoo neu starten.
@hbrunn Sorry, steh auf der Leitung. Welche "Verzeichnis-Menü" meinst Du?
das uber das nicht hr.group_hr_user
-User die Liste aller hr.employee.public
sehen, fur hr.group_hr_user
-User wird das versteckt, weil die in standard-Odoo ja ohnehin alle hr.employees sehen
Soweit ich das jetzt überblicke, denke ich:
Das ist für Anwesenheiten möglich. Allerdings nur über das Modul "Anwesenheiten" -> "Anwesenheiten".
Es funktioniert nicht:
Vorzugsweise soll der Odoo-eigene Bericht "Anwesenheitsanalyse" entsprechend ertüchtigt werden.
Achtung: Der Bericht ist aktuell nicht zugänglich für Nicht-Personalverantwortliche. Sobald er zugänglich ist, können die Buchungen aller Mitarbeitende eingesehen werden. Hier muss also die bestehende Freigabe im Modul
verdigado_attendance
korrigiert werden.