Problem mit Benutzer-Rechteverwaltung

Gesperrt
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Problem mit Benutzer-Rechteverwaltung

Beitrag von Leo » Fr 26. Jul 2013, 15:24

Hallo Contenido-Gemeinde,

zu diesem Thema habe ich im Internet und im Forum leider nichts gefunden, deshalb meine Anfrage. Für einen Auftraggeber soll ich relativ viele Redakteure einrichten und einige Redakteure sollen nur auf bestimmte Kategorien Zugriff erhalten. Eigentlich kein Problem dachte ich, weil ich sowas schon einmal realisiert habe. Leider gibt es bei diesem Auftraggeber ein Problem. Die Präsenz hat einen ziemlich großen Navigationsbaum. Das heißt, die Kategorien sind relativ umfangreich. Ich wollte also über den Benutzer die Rechte für eine gewisse Anzahl von Kategorien festlegen. Leider wurden meine Einstellungen nur bis zu einer gewissen Anzahl von Kategorien übernommen. :shock: Der Rest der Einstellungen wird nicht berücksichtigt. :motz: Hat jemand so ein ähnliches Problem schon einmal gehabt? Und gibt es dafür eine Lösung? Ich muss dazu sagen, dass die Scriptlaufzeit auf diesem Webserver relativ hoch eingestellt ist(720s). Daran kann es also nicht liegen. Momentan verwendet ich Contenido 4.8.18. Auf die Version 4.9 möchte ich eigentlich nicht updaten, weil das relativ viel Arbeit machen würde.

VG Leonhard

xmurrix
Beiträge: 3155
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Problem mit Benutzer-Rechteverwaltung

Beitrag von xmurrix » Fr 26. Jul 2013, 21:33

Hallo Leonhard,

pro Kategorie und Recht wird jeweils ein INSERT Statement an die DB abgesetzt. Hast du z. B. 100 Kategorien und alle 13 Rechte angewählt, sind es 1300 INSERT Statements nur für die Rechte, die innerhalb kurzer Zeit an die DB gehen. Dann muss vor jedem INSERT die nächst höhere ID aus der Sequenz-Tabelle ermittelt werden, dass sind nochmals 2600 Statements (1 x SELECT zum Auslesen der höchsten ID, diesen inkrementieren und per INSERT in die Tabelle Schreiben).

Du kommst dann auf 3900 Statements, die an die DB gehen.

Es kann sein, dass der DB-Server dann nach einer gewissen Anzahl die INSERTS aus Sicherheitsgründen dicht macht und die Verbindung beendet. Ich würde auch Prüfen, wieviele Statements die Datenbank innerhalb kürzester Zeit verkraftet.

Du könntest die INSERTS der Rechte optimieren, das ist ziemlich am Anfang der Datei contenido/includes/rights.inc.php. Dort könntest du z. B. Bulk-Inserts machen, z. B. immer 50 INSERTS sammeln, und dann absetzen. Das wären dann 26 Inserts für Rechte, aber um das Ermitteln der IDs für die Inserst kommst du nicht rum, die sind immer noch 2600. Es wäre zwar möglich, die ID auszulesen, die Sequenz-Tabelle zu sperren, die ID für jeden Insert manuell zu inkrementieren und am Ende in die Sequenz-Tabelle zu schreiben. Aber dann kann in der Zeit keiner in der Datenbank einen Datensatz einfügen, da dafür immer die Sequenz-Tabelle gebraucht wird, die aber gesperrt ist.

In CONTENIDO 4.9 gibt es keine Sequenz-Tabelle mehr, es sind überall gang normale Ids mit der auto_increment Eigenschaft.

Du kannst die Rechte auch Schritt für Schritt einrichten, z. B. immer nur ein recht für alle Kategorien. So dauert es zwar länger, aber die Chance, dass es nicht klappt, ist geringer.

Gruß
xmurrix
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.

Faar
Beiträge: 1920
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Problem mit Benutzer-Rechteverwaltung

Beitrag von Faar » Mo 29. Jul 2013, 11:24

Du kannst die Rechte auch Schritt für Schritt einrichten, z. B. immer nur ein recht für alle Kategorien. So dauert es zwar länger, aber die Chance, dass es nicht klappt, ist geringer.
Moin Xmurrix,

genau dieses Verhalten kann man aber auch mit dem Programm nachahmen, indem man bei dieser Funktion nach einer bestimmten Anzahl Statements an die DB eine Pause einbaut, also große Überarbeitungen in kleiner Pakete unterteilt und der DB damit die Möglichkeit gibt, andere Arbeiten zu erledigen.
Nach außen hin tut sich dann zwar lange nichts (hier wäre ein Ajax-Fortschrittsbalken beruhigend für den User), aber im Hintergrund wird die DB geschont.

Vom Laufzeitverhalten kommen mySQL DBs auch viel besser mit sehr kurzen und einfachen SQL Anweisungen zurecht als mit komplexen langen SQL die "alle Fliegen mit einer Klappe schlagen".
Da bremst sich die DB selbst aus, weil der zugesichterte DB-RAM oft nicht reicht, um die Zwischentabellen darin abzulegen und dann gehts auf die Platte und wird sehr laaaangsaaahm...
Im Zweifel würde ich dann lieber eine temporäre Zwischentabelle erzeugen mit einer kurzen Abfrage, die dann wiederum durch die nächste kurze SQL Abfrage ausgewertet wird.
So packte ich auch mal ein Paket, das über 40.000 Datensätze aus einer Tabelle überarbeiten sollte, die wiederum je 500 Datensätze enthielten, also 20 Millionen Daten in einer SQL-Anweisung betroffen waren.

Gerade mit PHP könnte man ja bei solchen kaskadierenden Effekten gegensteuern und die Funktion intelligenter bauen.
Macht auch noch Sinn in 4.8, denn die wird für immer größere Projekte benützt, bzw. diese Projekte wachsen mit der Zeit.

VG,
Frank
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

chris8408
Beiträge: 87
Registriert: So 2. Apr 2006, 19:07
Wohnort: Korschenbroich
Kontaktdaten:

Re: Problem mit Benutzer-Rechteverwaltung

Beitrag von chris8408 » Di 30. Jul 2013, 08:08

Ich habe bei einigen Hostern auch schon ein ähnliches Problem gehabt, dass das Abschicken zu einer weißen Seite führte.
Nach ein wenig forschen habe ich herausgefunden, dass es daran lag, dass nur eine bestimmte Anzahl an Post-Variablen. Es kann durchaus sein, dass hier bei dir auch eine Beschränkung existiert und deshalb nicht alle Variablen verarbeitet werden.

Teilweise kann man die Größen auch in der htaccess setzen.

suhosin.request.max_vars = 8000
suhosin.post.max_vars = 8000

Vielleicht hilft es auch mal in diese Richtung zu forschen.

Beste Grüße,

Christian
--------------------------------------------
Christian John aus Korschenbroich bei Düsseldorf (https://www.john-softwareentwicklung.de)
Selbständiger Web-Entwickler
“There are 10 types of people in the world… those that understand binary and those that don’t.”

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Problem mit Benutzer-Rechteverwaltung

Beitrag von Leo » Di 30. Jul 2013, 11:25

Hallo Contenido-Gemeinde,

es lag an der Anzahl von Variablen. Die htaccess-Datei habe ich, wie von Christen vorgeschlagen, angepasst, dann ging es. Danke an alle! :D

VG Leonhard

Gesperrt