Odoo-20-Rechtemigration: Gesellschaftstrennung prüfen

Zurück
Kevin Riedl

11 Min. Lesezeit · 5. November 2026
Zuletzt geprüft

Weiter
Entsteht auf deinem Gerät, ohne Instagram-Verbindung. Den Beitragslink kopieren wir für deinen Link-Sticker.

Im fiktiven Beispiel unten wechselt derselbe Zugriff für denselben Nutzer nach einer naiven Rechteumstellung von verweigert zu erlaubt. Die gewünschte Geschäftsregel bleibt gleich. Verändert hat sich, wie die Berechtigungen zusammenwirken.

Nimm eine Odoo-20-Rechtemigration erst ab, wenn die freigegebene Rollen- und Gesellschaftsmatrix erlaubte und verbotene Operationen auf der aktualisierten Datenbank besteht. Prüfe konvertierte Grants und globale Einschränkungen. Teste aktivierte Gesellschaften getrennt von Werten der aktuellen Gesellschaft. Eine erfolgreiche Installation oder ein Administrator-Rundgang liefert diese Nachweise nicht.

Recherchestand: 5. November 2026. Wir haben offizielle Odoo-19- und Odoo-20-Dokumentation, die Zugriffsimplementierung für 20.0 und ihr Konvertierungsskript untersucht. Sechzehn fiktive Python-Regelfälle wurden ausgeführt. Odoo, Datenbankupgrade und offizieller Konverter wurden nicht ausgeführt. Die native Abnahmematrix bleibt NOT_RUN.

Was ändert Odoo 20 an der Zugriffskontrolle?

Odoo 20 führt Operationen und Datensatzdomänen in einem Zugriffsmodell zusammen. Eine Rechtemigration muss deshalb die gemeinsame Wirkung der resultierenden Grants prüfen. Dass eine umbenannte Sicherheitsdatei geladen wird, reicht nicht. Erhalte eine freigegebene Referenzregel und vergleiche die tatsächlichen Ergebnisse jeder betroffenen Rolle mit diesem Soll.

Die offizielle Sicherheitsreferenz für 20.0 definiert ir.access über Gruppe, Operation und Domäne. Gruppeneinträge gewähren Zugriff; Einträge ohne Gruppe beschränken ihn. Die Referenz für 19.0 beschreibt getrennte Modell-ACLs mit nachfolgenden Datensatzregeln.

Erfasse eigene Sicherheitsdatensätze und die Geschäftslogik, die davon abhängt. Ordne jedem Eintrag seine Regel zu, etwa „Fallverantwortliche lesen eigene Fälle ihrer Gesellschaft“ oder „Prüfer lesen alle Fälle der aktivierten Gesellschaften“. Das sind unterschiedliche Regeln, auch wenn beide Nutzer dasselbe Menü öffnen können.

Der Leitfaden zur Odoo-Migrationsabnahme behandelt Daten und Prozessfortsetzung. Hier geht es enger um Zugriffsrechte. Auch ein fachlich korrekt migrierter Auftrag ist nicht akzeptabel, wenn ihn die falsche Identität abrufen kann.

Wie wirken Gruppengrants und globale Einschränkungen zusammen?

Bei einer gewöhnlichen Zugriffsprüfung braucht ein Datensatz mindestens einen passenden Gruppengrant und muss jede zutreffende globale Einschränkung erfüllen. Im Beispiel erweitert ein breiter Grant die lesbaren Datensätze, während die globale Gesellschaftsregel diese Erweiterung begrenzt. Eine Einschränkung allein erteilt keinen Zugriff. Prüfe deshalb Kombinationen statt einzelner Zeilen.

Das Modell drückt die Entscheidung so aus:

mindestens ein passender Gruppengrant
UND
jede zutreffende globale Einschränkung

Unsere erfundene Gruppe own_reader gewährt Zugriff nur auf Datensätze von Nutzer 7. Eine gesonderte globale Regel begrenzt sie auf aktivierte Gesellschaften. Nutzer 7 darf A-OWN lesen, aber nicht A-OTHER. Mit broad_reader wird auch der zweite Datensatz lesbar, weil eine weitere passende Gewährung hinzukommt.

Gesellschaft B bleibt nun inaktiv. Trotz breiter Gruppe bleibt B-OWN gesperrt, solange die globale Gesellschaftsregel gilt. Entfernst du sie in der absichtlich fehlerhaften Modellkonfiguration, wird derselbe Datensatz lesbar. Der Test zeigt die fehlende Grenze. Er behauptet nicht, dass Odoo diese Grenze standardmäßig auslässt.

Prüfe auch einen berechtigten Zugriff. Zwei widersprüchliche globale Einschränkungen, eine nur für A und eine nur für B, sperren ihn im Beispiel. Ein Testpaket mit ausschließlich verbotenen Zugriffen könnte diese kaputte Konfiguration als Erfolg werten. Jede wichtige Verweigerung braucht einen erlaubten Kontrollfall.

Welchen Gesellschaftskontext muss der Test erfassen?

Erfasse Mitgliedschaften, aktivierte Gesellschaften und aktuelle Gesellschaft getrennt. Sie beschreiben, welche Gesellschaften der Nutzer wählen darf, welcher Umfang für diese Operation aktiv ist und welche Gesellschaft kontextabhängige Werte liefert. Ein Abnahmeergebnis ohne diesen Kontext kann nicht erklären, weshalb ein bestimmter Datensatz sichtbar oder verborgen war.

Die Domänenauswertung für Zugriff in 20.0 setzt company_ids aus env.companies.ids, also den aktivierten Gesellschaften, und company_id aus env.company.id. Ersetze den getesteten Umfang nicht durch sämtliche Mitgliedschaften des Nutzers.

Getrennte Eingaben im fiktiven Gesellschaftsmodell
DimensionBeispielAbnahmefrage
Berechtigte MitgliedschaftNutzer 7 gehört zu A und B.Darf diese Identität B überhaupt auswählen?
Aktivierte GesellschaftenFür diesen Aufruf ist nur A aktiv.Schließt eine gesellschaftsbezogene Operation Datensätze aus B aus?
Aktuelle GesellschaftA ist aktuell, während A und B aktiv sind.Den Wert welcher Gesellschaft verwendet die Operation?
DatensatzzugehörigkeitB-OWN gehört zu B.Gehört der resultierende Datensatz zur vorgesehenen Gesellschaft?

Die Environment-Implementierung prüft die gewählten Gesellschaften gewöhnlicher Nutzer, verwendet bei leerer Liste einen Rückfall und überspringt die genannten Plausibilitätsprüfungen im sudo-Modus. Eine leere Liste bedeutet daher nicht „alles verweigern“. Ausführung mit erhöhten Rechten belegt keine Isolation normaler Nutzer.

Das Modell macht den Unterschied sichtbar. Bei Mitgliedschaften A/B und nur aktivem A wird der eigene B-Datensatz verweigert. Mit aktivem A/B wird er erlaubt. Ein Nutzer mit ausschließlich A darf im Modell B nicht aktivieren. Halte diese Fälle getrennt fest, statt sie unter „Multi-Company funktioniert“ zusammenzufassen.

Warum kann eine naive ACL-Konvertierung Zugriff ausweiten?

Eine naive Umstellung kann einen alten breiten Modellgrant als breiten Datensatzgrant neben einem engeren Grant erhalten. Im Gegenbeispiel besitzt der Nutzer beide Gruppen. Die alte gestufte Regel verweigert einen fremden Datensatz; die neue Vereinigung erlaubt ihn. Das zeigt eine fehlerhafte Umschreibung, kein Ergebnis des offiziellen Odoo-Konverters.

Ein bewusst kleines Konvertierungsgegenbeispiel
StufeModellregelA-Datensatz eines anderen Besitzers
Altes gestuftes BeispielEine Modell-ACL erlaubt Lesen; eine geltende Eigenbesitzregel filtert das Ergebnis.Verweigert
Naive neue FassungEin breiter Datensatzgrant wird mit einem Eigenbesitzgrant kombiniert.Erlaubt
Freigegebene ZielregelDie Rolle soll weiterhin nur eigene Datensätze lesen.Muss verweigert bleiben

Der offizielle Quellcode der Zugriffskonvertierung berücksichtigt Gruppen bei der Ableitung und warnt vor breiten ACL-Gruppen in Verbindung mit engeren Regeln. Die Warnhinweise verlangen Prüfung. Wir haben den Quellcode gelesen, aber nicht ausgeführt.

Bewahre Konverterausgabe und Protokolle bei den Migrationsnachweisen auf. Bestimme je Warnung die betroffene effektive Gruppenkombination und Operation. Belege dann das freigegebene Ergebnis auf der aktualisierten Datenbank. Auch ein sauberes Konvertierungsprotokoll ersetzt keine Regressionstests für deine Regeln.

Leite daraus keine pauschale Anweisung ab, breite Grants zu löschen. Eine andere Rolle kann sie berechtigt benötigen. Prüfe die gesamte freigegebene Matrix, bevor du eine gemeinsame Gruppe änderst, einschließlich Nutzer, die sie über eine weitere Rolle erben.

Was zeigten die sechzehn lokalen Fälle?

Alle sechzehn lokalen Fälle lieferten die erwarteten Beobachtungen. Sie zeigen, wie Tests fehlende Einschränkungen, zusätzliche Grants und falschen Gesellschaftskontext unterscheiden. Sichtbarkeit wird außerdem von Wertauswahl und Beziehungskonsistenz getrennt. Diese Ergebnisse betreffen ein kleines Python-Modell. Sie sind keine Sicherheitsbewertung einer Odoo-Datenbank oder eines tatsächlichen Upgrades.

Ausgeführte fiktive Regelfälle vom 5. November 2026
FallErwartetBeobachtet
Eigener Datensatz im aktiven AErlaubenErlaubt
Fremder Datensatz im aktiven AVerweigernVerweigert
B ist berechtigt, aber nicht aktiviertB-Datensatz verweigernVerweigert
B ist berechtigt und aktiviertEigenen B-Datensatz erlaubenErlaubt
B ohne Mitgliedschaft aktivierenKontext zurückweisenKontextfehler
Breiten Gruppengrant ergänzenFremder A-Datensatz wird lesbarErlaubt
Breite Gruppe mit globaler GesellschaftsregelInaktives B bleibt gesperrtVerweigert
Globale Gesellschaftsregel weglassenFehlerhafte Konfiguration legt inaktives B offenErlaubt
Widersprüchliche globale Nur-A- und Nur-B-RegelnBerechtigten A-Datensatz sperrenVerweigert
Geteilter Datensatz ohne GesellschaftStrenge Regel verweigert; ausdrückliche Freigaberegel erlaubtVerweigert / erlaubt
Globale Einschränkung ohne GruppengrantVerweigernVerweigert
Reine Leserolle im ModellLesen erlauben; Schreiben und Löschen verweigernErlaubt / verweigert / verweigert
Naive Konvertierung der alten gestuften RegelAlte Verweigerung wird unbeabsichtigte ErlaubnisVerweigert / erlaubt
B-Datensatz sichtbar bei aktueller Gesellschaft A oder BGesellschaftswert unterscheidet sich: 100,00 oder 120,00100,00 / 120,00
Sichtbarer A-Datensatz mit B-Datensatz verknüpftZugriff besteht; beispielhafte Beziehungsprüfung scheitertErlaubt / inkonsistent
Leere Eingabe für aktivierte GesellschaftenRückfall auf Mitgliedschaften A/BB-Datensatz lesbar

Lade das ausführbare Berechtigungsmodell und die aufgezeichneten Ergebnisse herunter. Mit Python ab Version 3.10 startest du es so:

python3 permission-model.py

Das Modell erhält effektive Gruppen als bereits aufgelöste Eingaben. Es implementiert weder Gruppenvererbung noch Odoo-Domänen, Feldrechte, Caches oder native Create-/Write-Hooks. Die Beziehungsprüfung ist bewusst nur ein kleiner Gleichheitsvergleich. Sie belegt nicht das Verhalten jedes teilbaren oder gesellschaftsabhängigen Felds in einem echten Modul.

Was gehört in die native Rollen- und Gesellschaftsmatrix?

Die native Matrix braucht ein freigegebenes Soll je relevanter Identität, Gesellschaftskontext und Operation sowie Nachweise aus dem aktualisierten System. Kombiniere normale erlaubte Arbeit mit verweigerten Zugriffen. Prüfe bei verbotenen Schreibversuchen den resultierenden Zustand neben der Fehlermeldung. Ein Screenshot eines fehlenden Menüs belegt die zugrunde liegende Operation nicht.

Die vorgeschlagene native Abnahmematrix beginnt vollständig mit NOT_RUN. Ihre Sollwerte sind zu prüfende oder zu ersetzende Beispiele. Trage Nutzer, effektive Gruppen, Build-Version, Einstiegspunkt, Datensatzkennungen, Gesellschaftskontext und Nachweise ein, bevor sie eine Releaseentscheidung begründet.

Nachweise auf der tatsächlichen aktualisierten Datenbank
DimensionBenötigter VergleichNachweis
RolleGewöhnlicher Besitzer gegenüber freigegebenem breiterem PrüferEffektive Gruppen und erwartete Datensatzmenge je Identität
GesellschaftsumfangNur A, aktives A/B und unberechtigte B-AuswahlGenauer Kontext und Gesellschaft des Zieldatensatzes
OperationErlaubtes Lesen oder Schreiben gegenüber verbotener ÄnderungZurückgegebene Datensätze, Ergebniszustand und ausgebliebene verbotene Änderungen
EinstiegspunktNutzeraktion und jede relevante Integration oder HintergrundaufgabeTatsächliche Ausführungsidentität und aufgerufene Operation
RegelmigrationAltes freigegebenes Soll gegenüber gewünschtem neuen SollKonverterwarnung, geprüfte Änderung und beobachtetes natives Ergebnis
GeschäftskonsistenzRichtiger Gesellschaftswert und erlaubte VerknüpfungWert- und Beziehungsnachweise getrennt von Sichtbarkeit

Nutze direkte Datensatzkennungen zusätzlich zur normalen Navigation. Definiere das Soll für jeden Einstiegspunkt: Soll eine Suche keine fremden Daten liefern oder eine angeforderte Operation abweisen? Akzeptiere kein zu breites Ergebnis, nur weil die Oberfläche zusätzliche Zeilen ausblendet.

Führe destruktive Fälle nur auf kontrollierten Testdatensätzen in der Probenumgebung aus. Ergänze erlaubte Änderungen, damit eine alles blockierende Konfiguration nicht besteht. Der Leitfaden zu Geschäftszustandstests für Agenten erweitert dieses Nachweisprinzip auf vollständige Aufgaben, bei denen eine plausible Antwort den falschen Datensatz verdecken kann.

Warum Werte und Beziehungen nach erfolgreichem Zugriff prüfen?

Erfolgreicher Zugriff zeigt, dass die Identität die getestete Operation nach dieser Regel ausführen darf. Er belegt nicht automatisch den richtigen Gesellschaftswert oder eine passende Verknüpfung. Im Modell bleibt der B-Datensatz lesbar, obwohl A den Wert liefert. Für eine erlaubte Operation kann die gesonderte Beziehungsprüfung trotzdem fehlschlagen.

Der offizielle Multi-Company-Leitfaden bindet gesellschaftsabhängige Werte an die aktuelle Gesellschaft und beschreibt gesonderte Beziehungsprüfungen über _check_company_auto und check_company. Prüfe diese Mechanismen an den konkreten Modellen und Feldern deines Moduls.

Im Beispiel sind beide Gesellschaften lesbar. Mit A als aktueller Gesellschaft erscheint der erfundene Wert 100,00, mit B der Wert 120,00. Betrifft die Aufgabe B, kann ein erfolgreicher Abruf von 100,00 fachlich falsch sein. Erfasse die erwartete Gesellschaft neben dem Sollwert.

Wähle für Beziehungen eine erlaubte und eine verbotene gesellschaftsübergreifende Verknüpfung. Prüfe die Operation, die sie tatsächlich zuweist. Ein sichtbares Gesellschaftsfeld oder eine Zugriffsdomäne belegt nicht jede eigene Beziehungskontrolle. Der Audit-Leitfaden für eigene Odoo-Module behandelt die weitere Implementierungsprüfung.

Welche Nachweise sperren oder erlauben das Release?

Stoppe den betroffenen Migrationsumfang, wenn eine unerwartete Identität geschützte Daten erreicht, ein berechtigter Nutzer nötige Arbeit verliert oder der getestete Gesellschaftskontext unbelegt bleibt. Gib erst frei, wenn die vereinbarte Matrix auf dem vorgesehenen Build besteht, absichtliche Regeländerungen genehmigt und offene Konverterwarnungen konkret entschieden sind.

Erhalte Sollmatrix, effektive Gruppen und genaue Modulrevision zusammen mit den Beobachtungen. Eine bewusst breitere Prüferrolle kann richtig sein, braucht aber eine ausdrückliche Regeländerung. Eine alte Verweigerung ist nicht automatisch das richtige neue Soll; eine alte Erlaubnis ist nicht automatisch sicher.

Die QA-Checkliste vor dem Release ordnet diese Nachweise in die Launchentscheidung ein. Der Odoo-API-Architekturleitfaden behandelt weiterhin Hosting und Protokolle. Eine andere API-Route ersetzt keine native Rechteprüfung.

Für Wavects Software-Qualitätssicherung bringst du eine betroffene Rolle, zwei Gesellschaftskontexte und die Konvertierungsausgabe mit. Das erste nutzbare Ergebnis ist eine vereinbarte Erlauben-/Verweigern-Matrix mit reproduzierbaren nativen Nachweisen für diesen Umfang.

Häufige Fragen zur Odoo-20-Rechtemigration

Belegt ein verborgenes Menü, dass der Zugriff verweigert wird?
Nein. Die Abnahme betrifft Datensatz und Operation, die eine Identität verwenden darf. Prüfe normalen Nutzerweg und relevanten direkten Einstieg mit kontrollierten Daten. Erfasse Rückgabedaten und Ergebniszustand. Ein Menüscreenshot dokumentiert die Oberfläche, ersetzt aber keinen Nachweis, dass die geschützte Operation die freigegebene Regel eingehalten hat.
Erzwingt eine leere allowed_company_ids-Liste Zugriff auf keine Gesellschaft?
Nein. In der untersuchten Environment-Implementierung von 20.0 fällt eine leere Liste auf die Gesellschaften des Nutzers zurück. Definiere einen ausdrücklichen erlaubten Kontext und prüfe ihn. Braucht deine Anwendung einen Zustand ohne Zugriff, beschreibe und verifiziere dieses Regelergebnis. Verlasse dich dafür nicht auf eine leere Kontextliste.
Wie werden Datensätze ohne Gesellschaft abgenommen?
Entscheide, welche Datensätze bewusst geteilt werden und welche einen Besitzer benötigen. Das Modell prüft eine strenge Gesellschaftsregel und eine ausdrückliche Freigabe geteilter Daten mit verschiedenen Ergebnissen. Nutze Vertreter jeder genehmigten Kategorie samt Verknüpfungen. Ein fehlender Gesellschaftswert darf sensible Daten nicht stillschweigend zur gemeinsamen Nutzung freigeben.
Wie prüfst du geerbte und zusätzliche Gruppen?
Prüfe die effektiven Gruppen der Identität, einschließlich über andere Rollen erlangter Gruppen. Das Modell bekommt diese Menge als Eingabe und berechnet keine Vererbung. Teste tatsächliche Nutzerkombinationen, besonders eine enge Rolle zusammen mit einer breiteren Prüferrolle. Einzeltests beider Gruppen können ihre kombinierte Wirkung übersehen.
Beweisen die sechzehn Modellfälle eine sichere echte Datenbank?
Nein. Sie demonstrieren benannte Regel- und Kontextergebnisse in einem kleinen Python-Programm mit Standardbibliothek. Sie führen weder Odoo noch native Domänen oder eigene Methoden aus. Nutze die Gegenbeispiele für bessere Abnahmen und führe anschließend die separate NOT_RUN-Matrix auf dem genauen aktualisierten Build mit freigegebenen Geschäftsregeln aus.
Was gilt für Dienstkonten und geplante Aufgaben?
Erfasse Identität und Gesellschaftskontext jeder Automatisierung und teste ihre freigegebenen Operationen. Ein Administrator-Rundgang ersetzt diesen Ausführungsweg nicht. Verwende vorgesehene Datensätze sowie einen kontrollierten Datensatz, den die Aufgabe nicht berühren darf. Prüfe die Änderungen. Breite Zugangsdaten benötigen eine ausdrückliche fachliche Begründung und einen passenden Abnahmeumfang.
Muss jede Abweichung zu Odoo 19 das Release stoppen?
Eine ungeklärte Abweichung sollte den betroffenen Umfang stoppen. Eine beabsichtigte Regelkorrektur kann freigegeben werden, etwa das Beheben eines alten zu breiten Grants. Dokumentiere altes Soll, gewünschte neue Regel und genehmigenden Verantwortlichen. Vergleiche das aktualisierte System mit diesem freigegebenen Ziel und nicht nur mit früherem Verhalten.

Produkt bauen, nicht nur Backlog

Wenn dieser Artikel auf eine echte Produktentscheidung einzahlt, hilft Wavect dir beim Scoping, Bauen, Härten oder Führen der Softwarearbeit mit Senior-Founder-Urteil.

Sinnvolle Service-Wege:

Postfach, ohne Lärm

Folge der Arbeit, die für dich zählt

Du bekommst eine kurze E-Mail, wenn wir etwas Neues veröffentlichen. Folge dem ganzen Blog oder nur den Themen, die dich interessieren.

Was möchtest du erhalten?
Themen auswählen

Kostenlos, Double-Opt-in, ohne Tracking-Pixel.

Zurück
Kevin Riedl

11 Min. Lesezeit · 5. November 2026
Zuletzt geprüft

Weiter

Erhalte die nächste Feldnotiz zu Delivery und QA

Eine kurze E-Mail, wenn wir veröffentlichen. Ohne Tracking-Pixel und ohne Postfachfüller.

Kostenlos, Double-Opt-in, ohne Tracking-Pixel.