Editor im Zwei-Mandanten-Sytem
-
- Beiträge: 372
- Registriert: Fr 7. Okt 2011, 04:10
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 7 Mal
- Kontaktdaten:
Editor im Zwei-Mandanten-Sytem
Liebe Gemeinde,
mir ist gerade ein weiteres Problem in einem Zwei-Mandanten-Sytem aufgefallen:
Ich hatte einen Benutzer (»Fred«) angelegt, der durch seine Benutzergruppe (»Editor«) in Mandant 1 fast alles durfte, was im Bereich Content steht.
Dann kam Mandant 2 dazu, ich habe die Rechte der Benutzergruppe äquivalent ergänzt.
Zusätzlich hat der User Fred (im Tab Benutzer) die Rechte für alle Mandanten und Sprachen (aber kein Admin).
Wenn Fred sich dann aber anmeldet, hat er keine Möglichkeit, auf den Mandanten 2 zu wechseln. Zur Verfügung steht nur Mandant 1.
Ich habe eine weitere Benutzergruppe (»zwo«) angelegt, die ausschließlich Rechte in Mandant 2 hat. Der habe ich den User Fred hinzugefügt, ohne dass er dadurch Zugang zu Mandant 2 bekommen hätte.
Dann habe ich noch einen Test-User angelegt, der nur in Gruppe zwo ist. Und der hat Zugriff zum Mandanten 2.
Kann jemand das Problem nachvollziehen? Oder hat ein System auf dem ein User (ohne Admin-Rechte) auf zwei Mandanten zugreifen kann?
Mein Contenido-Version ist vom 15.9.2024 oder neuer, Installierte PHP-Version: 8.2.26
Vielen Dank!
bodil
mir ist gerade ein weiteres Problem in einem Zwei-Mandanten-Sytem aufgefallen:
Ich hatte einen Benutzer (»Fred«) angelegt, der durch seine Benutzergruppe (»Editor«) in Mandant 1 fast alles durfte, was im Bereich Content steht.
Dann kam Mandant 2 dazu, ich habe die Rechte der Benutzergruppe äquivalent ergänzt.
Zusätzlich hat der User Fred (im Tab Benutzer) die Rechte für alle Mandanten und Sprachen (aber kein Admin).
Wenn Fred sich dann aber anmeldet, hat er keine Möglichkeit, auf den Mandanten 2 zu wechseln. Zur Verfügung steht nur Mandant 1.
Ich habe eine weitere Benutzergruppe (»zwo«) angelegt, die ausschließlich Rechte in Mandant 2 hat. Der habe ich den User Fred hinzugefügt, ohne dass er dadurch Zugang zu Mandant 2 bekommen hätte.
Dann habe ich noch einen Test-User angelegt, der nur in Gruppe zwo ist. Und der hat Zugriff zum Mandanten 2.
Kann jemand das Problem nachvollziehen? Oder hat ein System auf dem ein User (ohne Admin-Rechte) auf zwei Mandanten zugreifen kann?
Mein Contenido-Version ist vom 15.9.2024 oder neuer, Installierte PHP-Version: 8.2.26
Vielen Dank!
bodil
-
- Beiträge: 1951
- Registriert: Sa 8. Sep 2007, 16:23
- Wohnort: Brandenburg
- Hat sich bedankt: 14 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
bisserl kompliziert erklärt 

Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
-
- Beiträge: 372
- Registriert: Fr 7. Okt 2011, 04:10
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 7 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Danke für den Hinweis.
Also:
Ein modernes Contenido, zwei Mandanten, ein Backend-User
Eine Backend-User-Gruppe, die Zugriff auf beide Mananten gewähren soll, aber der User in der Gruppe hat überraschnderweise nur Zugang zu Mandant 1.
Dann, nur um das Problem einzukreisen:
Eine zweite User-Gruppe hat Zugang nur zu Mandant 2. Der User wird auch in diese Gruppe aufgenommen und hat trotzdem keinen Zugang zu Mandant 2.
Ein zweiter User ist nur in Gruppe 2 und bekommt tatsächlich Zugang zu Mandant 2.
Merkwürdigkeit 1: User 1 ist in zwei Gruppen, sollte Zugang zu Mandant 1 und zu Mandant 2 haben, kommt aber nur auf Mandant 1.
Merkwürdigkeit 2: User 2 ist nur in einer der beiden Gruppen, hat aber Zugang zu Mandant 2.
Und ehe jemand versucht, das Problem zu reproduzieren ist die Frage:
Hat jemand in einem neueren Contenido mind. zwei Mandanten und eine User-Gruppe, die Zugang zu beiden Mandanten ermöglicht? Das würde helfen einzugrenzen, ob das Problem nur auf meinem Server vorliegt (z.B. wg. PEBKAC), oder ob es auf ein Bug im Core zurückgeht.
Dankeschön!
Also:
Ein modernes Contenido, zwei Mandanten, ein Backend-User
Eine Backend-User-Gruppe, die Zugriff auf beide Mananten gewähren soll, aber der User in der Gruppe hat überraschnderweise nur Zugang zu Mandant 1.
Dann, nur um das Problem einzukreisen:
Eine zweite User-Gruppe hat Zugang nur zu Mandant 2. Der User wird auch in diese Gruppe aufgenommen und hat trotzdem keinen Zugang zu Mandant 2.
Ein zweiter User ist nur in Gruppe 2 und bekommt tatsächlich Zugang zu Mandant 2.
Merkwürdigkeit 1: User 1 ist in zwei Gruppen, sollte Zugang zu Mandant 1 und zu Mandant 2 haben, kommt aber nur auf Mandant 1.
Merkwürdigkeit 2: User 2 ist nur in einer der beiden Gruppen, hat aber Zugang zu Mandant 2.
Und ehe jemand versucht, das Problem zu reproduzieren ist die Frage:
Hat jemand in einem neueren Contenido mind. zwei Mandanten und eine User-Gruppe, die Zugang zu beiden Mandanten ermöglicht? Das würde helfen einzugrenzen, ob das Problem nur auf meinem Server vorliegt (z.B. wg. PEBKAC), oder ob es auf ein Bug im Core zurückgeht.
Dankeschön!
-
- Beiträge: 3213
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo bodil,
kurz zusammengefasst, wie ich das verstanden habe:
Ohne das jetzt gegengeprüft zu haben, würde ich sagen, dass das ein Bug sein könnte. In CONTENIDO werden die Berechtigungen aller Gruppen eines Benutzers geladen, daher sollte Benutzer1 Zugriff auf Mandant2 haben. Hier müsste man herausfinden, an welcher Stelle (Login oder Aufruf der Backend-Seite) im Code genau dieses Problem auftritt.
Das ist nur eine Vermutung, aber ich denke, wenn Benutzer1 in nur einer Gruppe ist, das Zugriff auf beide Mandanten hat, würde das vielleicht funktionieren. Also eine Gruppe3, die Zugriff auf beide Mandanten hat. Mir ist klar, dass nicht im Sinne der Zusammmenfassung der Berechtigungen mehrerer Gruppen eines Benutzers ist.
Gruß
Murat
kurz zusammengefasst, wie ich das verstanden habe:
- Gruppe1 hat Zugang zu Mandant1
- Gruppe2 hat Zugang zu Mandant2
- Benutzer1 ist in beiden Gruppen und hat nur Zugang zu Mandant1, kommt nicht auf Mandant2
- Benutzer2 ist in Gruppe2 und hat Zugang zu Mandant2
Ohne das jetzt gegengeprüft zu haben, würde ich sagen, dass das ein Bug sein könnte. In CONTENIDO werden die Berechtigungen aller Gruppen eines Benutzers geladen, daher sollte Benutzer1 Zugriff auf Mandant2 haben. Hier müsste man herausfinden, an welcher Stelle (Login oder Aufruf der Backend-Seite) im Code genau dieses Problem auftritt.
Das ist nur eine Vermutung, aber ich denke, wenn Benutzer1 in nur einer Gruppe ist, das Zugriff auf beide Mandanten hat, würde das vielleicht funktionieren. Also eine Gruppe3, die Zugriff auf beide Mandanten hat. Mir ist klar, dass nicht im Sinne der Zusammmenfassung der Berechtigungen mehrerer Gruppen eines Benutzers ist.
Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 372
- Registriert: Fr 7. Okt 2011, 04:10
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 7 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hi Murat,
vielen Dank!
Ich habe versucht, das Problem zu lokalisieren, aber das gestaltet sich schwierig. In class.permission.php werden ganz unten (function checkPermission($haystackPerm, $needlePerm)) erforderliche und vorhandene Berechtigungen verglichen und die Größe der Schnittmenge ermittelt. Im haysatck tauchen client[1] und client[2] bei mir mehrfach auf. Wenn ich auf dieses Array ein array_unique anwende, dann passt es auch zum Needle-Array und für meine beiden User verhält sich das System so, wie gewünscht. Aber von dem, was ich da tue, habe ich keine Ahnung. Woher die Needle-Elemente kommen, kann ich nicht erkennen. Irgendwie aus der Klasse Auth, aber wo da das Array-Feld 'perm' gefüllt wird, sehe ich nicht.
Aber ich betreibe das jetzt mal mit meinem Hack und forsche noch ein bisschen.
Grüße!
bodil
vielen Dank!
Ich habe versucht, das Problem zu lokalisieren, aber das gestaltet sich schwierig. In class.permission.php werden ganz unten (function checkPermission($haystackPerm, $needlePerm)) erforderliche und vorhandene Berechtigungen verglichen und die Größe der Schnittmenge ermittelt. Im haysatck tauchen client[1] und client[2] bei mir mehrfach auf. Wenn ich auf dieses Array ein array_unique anwende, dann passt es auch zum Needle-Array und für meine beiden User verhält sich das System so, wie gewünscht. Aber von dem, was ich da tue, habe ich keine Ahnung. Woher die Needle-Elemente kommen, kann ich nicht erkennen. Irgendwie aus der Klasse Auth, aber wo da das Array-Feld 'perm' gefüllt wird, sehe ich nicht.
Aber ich betreibe das jetzt mal mit meinem Hack und forsche noch ein bisschen.
Grüße!
bodil
-
- Beiträge: 3213
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Das Array-Feld 'perm' wird in class.auth.handler.backend.php in der Funktion validateCredentials() gesetzt, siehe Zeile 157
https://github.com/CONTENIDO/CONTENIDO/ ... d.php#L157
Ein paar Zeilen davor werden die Gruppenberechtigungen des Benutzers geladen. Leider kann ich das gerade nicht testen, ich werde aber versuchen, deine Situation nachzubilden, um zu sehen, ob es auch bei mir Probleme gibt.
https://github.com/CONTENIDO/CONTENIDO/ ... d.php#L157
Ein paar Zeilen davor werden die Gruppenberechtigungen des Benutzers geladen. Leider kann ich das gerade nicht testen, ich werde aber versuchen, deine Situation nachzubilden, um zu sehen, ob es auch bei mir Probleme gibt.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 4316
- Registriert: Do 30. Jun 2005, 22:56
- Wohnort: Eltmann, Unterfranken, Bayern
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 4 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Servus,
also ich habe hier gerade auch ein Problem mit der Rechteverwaltung, jedoch bereits im zwei-sprachigen 1 Mandanten-System.
Die Rechteverwaltung scheint ziemlich buggy zu sein, und macht überhaupt nicht, was sie soll. Ich überlege derzeit, sie bei mir mal auf einen früheren Git-Stand zurück zu stellen.
Kann jemand sagen, bis wann die Rechteverwaltung noch funktioniert hat?
Weiß jemand, ob es irgendwo ein Flowchart oder ähnliches gibt, aus dem man ablesen kann, was die Rechteverwaltung wann machen soll?
In der Doku habe ich nichts dazu gefunden, außer die Benutzeranleitung für Benutzer und Gruppen.
https://contenido.atlassian.net/wiki/spaces
@xmurrix - Murat, denkst Du wir könnten dazu in irgendeiner Weise Tests schreiben? Kenn mich dafür zu wenig aus mit den Test.
Gruß aus Franken
Ortwin
also ich habe hier gerade auch ein Problem mit der Rechteverwaltung, jedoch bereits im zwei-sprachigen 1 Mandanten-System.
- Eingeschränkter Nutzer mit Mandantenzugriff auf beide Sprachen
- Gruppe "Test" mit Mandantenzugriff auf beide Sprachen
- Nutzer der Gruppe zugeteilt
Die Rechteverwaltung scheint ziemlich buggy zu sein, und macht überhaupt nicht, was sie soll. Ich überlege derzeit, sie bei mir mal auf einen früheren Git-Stand zurück zu stellen.
Kann jemand sagen, bis wann die Rechteverwaltung noch funktioniert hat?
Weiß jemand, ob es irgendwo ein Flowchart oder ähnliches gibt, aus dem man ablesen kann, was die Rechteverwaltung wann machen soll?
In der Doku habe ich nichts dazu gefunden, außer die Benutzeranleitung für Benutzer und Gruppen.

@xmurrix - Murat, denkst Du wir könnten dazu in irgendeiner Weise Tests schreiben? Kenn mich dafür zu wenig aus mit den Test.
Gruß aus Franken
Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
-
- Beiträge: 3213
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo bodil, hallo Ortwin,
ich werde mir das Problem mit den Benutzerrechten demnächst anschauen, mit viel Glück lässt sich das bald lösen.
Grüße
Murat
ich werde mir das Problem mit den Benutzerrechten demnächst anschauen, mit viel Glück lässt sich das bald lösen.
Ja, allerdings ist die Rechteverwaltung Code von alten Zeiten und das Schreiben von Unit-Tests ist schwieriger. Wir können nicht überall mit Mock-Objekten arbeiten und müssen daher Testdaten (Mandanten, Sprachen, Benutzer, Rechte, Actions, usw...) in die Test-DB schreiben, um dann mit diesen die Tests zu entwickeln.
Grüße
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 4316
- Registriert: Do 30. Jun 2005, 22:56
- Wohnort: Eltmann, Unterfranken, Bayern
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 4 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo Murat,
ich habe bereits angefangen mal die Rechteverwaltung zu debuggen. Dabei ist mir aufgefallen, dass ein paar Bugs in der 4.10.1 wohl noch nicht vorhanden waren. Was denkst Du, sollten wir für die Rechteverwaltung von der 4.10.1 ausgehen, wenn dort noch alles geht, und die alten Dateien von dort übernehmen und erneut optimieren? Das Ganze eventuell erst einmal in einem eigenen Branch?!
Mein Vorschlag zum Vorgehen
Ich schau aber mal, eine 4.10.1 Demo zum Testen aufzusetzen.
Gruß aus Franken
Ortwin
ich habe bereits angefangen mal die Rechteverwaltung zu debuggen. Dabei ist mir aufgefallen, dass ein paar Bugs in der 4.10.1 wohl noch nicht vorhanden waren. Was denkst Du, sollten wir für die Rechteverwaltung von der 4.10.1 ausgehen, wenn dort noch alles geht, und die alten Dateien von dort übernehmen und erneut optimieren? Das Ganze eventuell erst einmal in einem eigenen Branch?!
Mein Vorschlag zum Vorgehen
- Testen aller Möglichkeiten mit 4.10.1
- Falls es damit funktioniert, Dateiübernahme (nur Rechtesystem-Dateien) in eigenen Branch ausgehend vom develop
- Recoding des Bereiches
- Testen und Bugbeseitigung
- Merge in develop
Ich schau aber mal, eine 4.10.1 Demo zum Testen aufzusetzen.
Gruß aus Franken
Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
-
- Beiträge: 3213
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo Ortwin,
bodil hat im Beitrag seine Lösung beschrieben, die für ihn funktioniert hat.
Die Funktion cPermission->checkPermission() wird mit einer Liste von Berechtigungen aufgerufen, in der Einträge doppelt vorkommen. Hier muss man sicherstellen, dass die Liste keine doppelten Einträge hat.
Vielleicht ist es auch bei dir das gleiche Problem. Das Ändern der Funktion checkPermission() in wie folgt löst das Problem:
Ich würde die Verwendung von array_unique() gleich in die cPermission::permissionToArray() einbauen, damit diese Funktion immer eine Liste ohne redundante Werte liefert. Dann muss man noch prüfen, wie es dazu kommt, dass checkPermission() mit einer Liste aufgerufen wird, die redundante Werte enthält. Ein Grund dafür kann das Laden aller Berechtigungen eines Benutzers sein, sicher bin ich mir aber nicht.
Sobald ich näheres weiß, gebe ich Bescheid.
Gruß
Murat
bodil hat im Beitrag seine Lösung beschrieben, die für ihn funktioniert hat.
Die Funktion cPermission->checkPermission() wird mit einer Liste von Berechtigungen aufgerufen, in der Einträge doppelt vorkommen. Hier muss man sicherstellen, dass die Liste keine doppelten Einträge hat.
Vielleicht ist es auch bei dir das gleiche Problem. Das Ändern der Funktion checkPermission() in wie folgt löst das Problem:
Code: Alles auswählen
public static function checkPermission($haystackPerm, $needlePerm): bool
{
$haystackPerms = array_unique(self::permissionToArray($haystackPerm));
$needlePerms = self::permissionToArray($needlePerm);
// Get values available in both arrays, the result count should be the same as the needlePerms count
$result = array_intersect($haystackPerms, $needlePerms);
return count($result) === count($needlePerms);
}
Sobald ich näheres weiß, gebe ich Bescheid.
Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 4316
- Registriert: Do 30. Jun 2005, 22:56
- Wohnort: Eltmann, Unterfranken, Bayern
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 4 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo Murat,
aber das ist nun auch ein wenig um die Ecke gedacht.
Wir erstellen also ein Array mit Permissions quer über alle Bereiche, Gruppen, Mandanten, etc. und gehen dann hin und entfernen doppelte Einträge erst dann, ohne Rücksicht auf irgendeine Gewichtung, wenn wir es nutzen wollen?
Also, ich denke mal, darüber sollten wir erst nochmal nachdenken / sprechen. Hier scheint mir doch der Ansatz schon nicht ganz stimmig zu sein.
Also, wo haben wir denn die Möglichkeit Rechte zu vergeben? Soweit ich weiß beim Benutzer und in einer Gruppe, wobei die Benutzerrechte alles andere toppen. Dazu kommen dann noch unterschiedliche Rechte per Mandant und, soweit mir bekannt, auch bei jeder Sprache. Auch könnten gewisse Rechte auch übergreifende Rechte sein (Sync).
Bevor wir also nun hingehen, und einfach das Ergebnis-Array durch ein array_unique laufen lassen, fände ich es wichtiger zu schauen, werden die Rechte korrekt ausgelesen und entsprechend ihrer Gewichtung in dieses permission-Array eingetragen, bzw. ersetzt. Ich denke nämlich, dass hier schon das eine oder andere falsch läuft.
Was denkst Du?
Gruß aus Franken
Ortwin
aber das ist nun auch ein wenig um die Ecke gedacht.

Wir erstellen also ein Array mit Permissions quer über alle Bereiche, Gruppen, Mandanten, etc. und gehen dann hin und entfernen doppelte Einträge erst dann, ohne Rücksicht auf irgendeine Gewichtung, wenn wir es nutzen wollen?
Also, ich denke mal, darüber sollten wir erst nochmal nachdenken / sprechen. Hier scheint mir doch der Ansatz schon nicht ganz stimmig zu sein.
Also, wo haben wir denn die Möglichkeit Rechte zu vergeben? Soweit ich weiß beim Benutzer und in einer Gruppe, wobei die Benutzerrechte alles andere toppen. Dazu kommen dann noch unterschiedliche Rechte per Mandant und, soweit mir bekannt, auch bei jeder Sprache. Auch könnten gewisse Rechte auch übergreifende Rechte sein (Sync).
Bevor wir also nun hingehen, und einfach das Ergebnis-Array durch ein array_unique laufen lassen, fände ich es wichtiger zu schauen, werden die Rechte korrekt ausgelesen und entsprechend ihrer Gewichtung in dieses permission-Array eingetragen, bzw. ersetzt. Ich denke nämlich, dass hier schon das eine oder andere falsch läuft.
Was denkst Du?
Gruß aus Franken
Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
-
- Beiträge: 3213
- Registriert: Do 21. Okt 2004, 11:08
- Wohnort: Augsburg
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo Ortwin,
in die Klasse cPermissions gab es keine großen Änderungen der bisherigen Logik. Es gab zwar einige Änderungen seit der 4.10.1, allerdings habe ich darauf geachtet, dass die alte Logik weiterhin bestehen bleibt.
Am Ende der Klasse cPermissions gibt es ein paar neue Convenience-Funktionen, die das Prüfen der Berechtigungen etwas vereinfachen sollen. Das sind meist auch nur Wrapper für die eigentlichen Funktionen. Bei der Prüfung der Berechtigungen in der cPermission::checkPermission() geht es nicht um die Reihenfolge, sondern darum, ob der Benutzer die Rechte hat. Ob nun der Eintrag "client[1]", am Anfang, mittendrin oder am Ende der Liste ist, spielt keine Rolle. Es gibt nur dann ein Problem, wenn wir da doppelte Einträge haben, dann funktioniert es mit der Schnittmengenprüfung nicht.
Die Reihenfolge der Berechtigungen des Benutzers ist in cApiUser->getEffectiveUserPerms(), da werden zuerst die Berechtigungen des Benutzers und dann die der Gruppen geladen. Diese Funktion ist aus 2012, zwischendurch gab es Änderungen, die aber nichts an der Logik geändert haben.
Wenn das Array doppelte Einträge hat und dieses Problem auch schon vorher existiert hat, aber bisher keinem aufgefallen ist, sondern erst durch die Nutzung der der neuen Convenience-Funktionen, dann macht es doch Sinn, auf die Schnelle das Problem an der Stelle zu beheben.
Dann können wir uns Gedanken machen, ob das Rechte-System, so wie sie jetzt ist, richtig ist und/oder ob das Ermitteln der Benutzerberechtigungen überarbeitet gehört oder fehlerhaft ist. Ich wollte auch noch prüfen, wie es dazu kommen kann, dass an die Funktion übergebenen Berechtigungen doppelte Einträge haben, also wie und wo die cPermission::checkPermission() aufgerufen wird.
Gruß
Murat
in die Klasse cPermissions gab es keine großen Änderungen der bisherigen Logik. Es gab zwar einige Änderungen seit der 4.10.1, allerdings habe ich darauf geachtet, dass die alte Logik weiterhin bestehen bleibt.
Am Ende der Klasse cPermissions gibt es ein paar neue Convenience-Funktionen, die das Prüfen der Berechtigungen etwas vereinfachen sollen. Das sind meist auch nur Wrapper für die eigentlichen Funktionen. Bei der Prüfung der Berechtigungen in der cPermission::checkPermission() geht es nicht um die Reihenfolge, sondern darum, ob der Benutzer die Rechte hat. Ob nun der Eintrag "client[1]", am Anfang, mittendrin oder am Ende der Liste ist, spielt keine Rolle. Es gibt nur dann ein Problem, wenn wir da doppelte Einträge haben, dann funktioniert es mit der Schnittmengenprüfung nicht.
Code: Alles auswählen
// Get values available in both arrays, the result count should be the same as the needlePerms count
$result = array_intersect($haystackPerms, $needlePerms);
return count($result) === count($needlePerms);
Wenn das Array doppelte Einträge hat und dieses Problem auch schon vorher existiert hat, aber bisher keinem aufgefallen ist, sondern erst durch die Nutzung der der neuen Convenience-Funktionen, dann macht es doch Sinn, auf die Schnelle das Problem an der Stelle zu beheben.
Dann können wir uns Gedanken machen, ob das Rechte-System, so wie sie jetzt ist, richtig ist und/oder ob das Ermitteln der Benutzerberechtigungen überarbeitet gehört oder fehlerhaft ist. Ich wollte auch noch prüfen, wie es dazu kommen kann, dass an die Funktion übergebenen Berechtigungen doppelte Einträge haben, also wie und wo die cPermission::checkPermission() aufgerufen wird.
Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
-
- Beiträge: 372
- Registriert: Fr 7. Okt 2011, 04:10
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 7 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Hallo zusammen,
ich habe mit der Lösung eigentlich ein anderes Problem.
Das System listet zum einen Berechtigungen auf, die man haben muss, um irgendwas erlaubt zu bekommen. (Im System: der Haystack, das Array mit den doppelten Einträgen.)
Dann werden die Berechtigungen aufgelistet, die der User hat, der da gerade getestet wird (Needle).
Aus beiden Listen wir eine Schnittmenge gebildet, die genau so groß sein muss, wie die Needle-Liste.
Und auch, falls ich das Prinzip komplett nicht verstanden haben sollte:
Dabei ist es eigentlich egal, ob in der Haystack-Liste Elemente doppelt sind. In der Schnittmenge tauchen sie dann ja trotzdem nur einmal auf. Wenn also in der Needle nur einmal client[1] steht, sollte es eigentlich egal sein, ob client[1] im Haystack ein- oder zweimal steht. Die Schnittmenge wird nur ein Element haben und ist damit so groß wie Needle selbst.
Mein erster Verdacht war, dass sich an array_intersect() irgendwas mit dem Wechsel auf PHP8 geändert haben könnte, hats aber nicht, soweit ich sehen konnte.
Grüße!
Bodil
ich habe mit der Lösung eigentlich ein anderes Problem.
Das System listet zum einen Berechtigungen auf, die man haben muss, um irgendwas erlaubt zu bekommen. (Im System: der Haystack, das Array mit den doppelten Einträgen.)
Dann werden die Berechtigungen aufgelistet, die der User hat, der da gerade getestet wird (Needle).
Aus beiden Listen wir eine Schnittmenge gebildet, die genau so groß sein muss, wie die Needle-Liste.
Und auch, falls ich das Prinzip komplett nicht verstanden haben sollte:
Dabei ist es eigentlich egal, ob in der Haystack-Liste Elemente doppelt sind. In der Schnittmenge tauchen sie dann ja trotzdem nur einmal auf. Wenn also in der Needle nur einmal client[1] steht, sollte es eigentlich egal sein, ob client[1] im Haystack ein- oder zweimal steht. Die Schnittmenge wird nur ein Element haben und ist damit so groß wie Needle selbst.
Mein erster Verdacht war, dass sich an array_intersect() irgendwas mit dem Wechsel auf PHP8 geändert haben könnte, hats aber nicht, soweit ich sehen konnte.
Grüße!
Bodil
-
- Beiträge: 4316
- Registriert: Do 30. Jun 2005, 22:56
- Wohnort: Eltmann, Unterfranken, Bayern
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 4 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Servus,
Wenn aber Du wirklich durchblickst, was CONTENIDO wann wo wie braucht bei der Rechteverwaltung, ich versuche gerade dafür einen Workflow der Rechteverwaltung zu erstellen. Möchte nur ungern daran rumschrauben, wenn nicht wirklich klar ist, was wo, wann und wie gebraucht wird, bzw stehen sollte oder muss. Leider habe ich auch auf der Doku nichts näheres gefunden, und ich denke, auch die Entwickler bei 4fb hatten da keine entsprechende Dokumentation.
Habe mit Murat darüber gesprochen, und er hat schon mal ein entsprechendes Ticket dafür angelegt
https://github.com/CONTENIDO/CONTENIDO/issues/510
Denn so wie es den Anschein hat, sind verschiedene Bereiche betroffen, und uns bisher noch nicht wirklich klar, wo der Auslöser ist, den wir ändern bzw anpassen müssen. Ja, ein Array unique scheint zu funktionieren, aber eigentlich sollten im Array ja gar keine redundanten Einträge vorhanden sein.
Also sollten wir zuerst mal hingehen, am besten im Demo, verschiedene Szenarien durchzuspielen, und dann zu schauen, wie die Inhalte der zumeist globalen Arrays aussehen, wo sie generiert oder ergänzt werden, und wo sich da, gegebenenfalls, Einträge bereinigen lassen.
Gruß aus Franken
Ortwin
Äh, nein. Denn woran machst Du fest, dass der genommene Eintrag auch der richtige ist. Bei allgemeinen Einträgen, wie Recht auf Sprache oder Mandant, mag das ja noch ok sein, was ist aber mit detaillierteren Rechten.
Wenn aber Du wirklich durchblickst, was CONTENIDO wann wo wie braucht bei der Rechteverwaltung, ich versuche gerade dafür einen Workflow der Rechteverwaltung zu erstellen. Möchte nur ungern daran rumschrauben, wenn nicht wirklich klar ist, was wo, wann und wie gebraucht wird, bzw stehen sollte oder muss. Leider habe ich auch auf der Doku nichts näheres gefunden, und ich denke, auch die Entwickler bei 4fb hatten da keine entsprechende Dokumentation.
Habe mit Murat darüber gesprochen, und er hat schon mal ein entsprechendes Ticket dafür angelegt

Denn so wie es den Anschein hat, sind verschiedene Bereiche betroffen, und uns bisher noch nicht wirklich klar, wo der Auslöser ist, den wir ändern bzw anpassen müssen. Ja, ein Array unique scheint zu funktionieren, aber eigentlich sollten im Array ja gar keine redundanten Einträge vorhanden sein.
Also sollten wir zuerst mal hingehen, am besten im Demo, verschiedene Szenarien durchzuspielen, und dann zu schauen, wie die Inhalte der zumeist globalen Arrays aussehen, wo sie generiert oder ergänzt werden, und wo sich da, gegebenenfalls, Einträge bereinigen lassen.
Gruß aus Franken
Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
-
- Beiträge: 372
- Registriert: Fr 7. Okt 2011, 04:10
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 7 Mal
- Kontaktdaten:
Re: Editor im Zwei-Mandanten-Sytem
Nein, von der Rechteverwaltung habe ich keine Ahnung. Was ich meinte, bezieht sich auch nur auf die Funktion, die ich da gehackt habe. Wenn man die mal für sich betrachtet: nimmt zwei Arrays und sagt true, wenn das zweite Teilmenge des ersten ist. Sonst false.
Warum gibt die eher false zurück, wenn im ersten Array Doubletten sind? Array zwei ist doch trotzdem Teilmenge?
Warum gibt die eher false zurück, wenn im ersten Array Doubletten sind? Array zwei ist doch trotzdem Teilmenge?