Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

Mehrbenutzer Loginsystem mit benutzerabhängigem Menüumfang

Begonnen von mhsob, 22. Februar 2010, 21:10:07

« vorheriges - nächstes »

mhsob

Hallo allerseits,

ich bin vor ein paar Wochen nach langer CMS-Suche für eine private Homepage auf Mozilo gestoßen und es hat mir irgendwie sofort zugesagt, da ich selbst ein paar PHP-Kenntnisse habe und mich die einfachsten Datenbank-CMS mit weit über 2000 Dateien auf dem Server einfach überrannt haben. Nach einer gewissen Einarbeitungszeit habe ich jetzt sogar das Gefühl, das Mozilo-Prinzip zu verstehen. Und im Forum wird man nach Anmeldung auch gleich ganz nett begrüßt!

Was mir allerdings sehr abgeht, ist ein (einfacher) Zugangsschutz für bestimmte Seiten, der

  • Anmelden / Abmelden von verschiedenen registrierten Benutzern mit Benutzername / Passwort ermöglicht
  • den angemeldeten Benutzer zumindest bis zum Schließen des Browsers angemeldet lässt (also keine ständige Passwortabfrage wie der Zugangsschutz im aktuellen Nightly verlangt)
  • je nach angemeldetem Benutzer entweder ganze Kategorien oder auch nur Seiten innerhalb einer Kategorie sperrt
  • gesperrte Seiten erst gar nicht im Menü anbietet ("...warum hab ICH auf ... und ... und ... auf Deiner Homepage keinen Zugriff?" & was der Gelegenheits-Hacker nicht weiss, macht ihn nicht heiss)
  • die Verwaltung der Benutzer in einer einfachen Textdatei ermöglicht, man sollte aber nur gesperrte Kategorien / Seiten explizit mit den freigeschalteten Benutzern angeben müssen)
  • nicht durch den Browser manipulierbar ist (wie z.B. Cookies)
  • bei Aufruf von gebookmarkten geschützten Seiten diese unmittelbar nach dem Login anzeigt, ohne ein weiteres Mal das Bookmark aufrufen zu müssen
  • immer den Namen des angemeldeten Benutzers anzeigt und diesem auch ein explizites Abmelden ermöglicht

Daher habe ich in die Nightly-Version (so vom 19.02.2010 oder so) einen Zugangsschutz codiert (wollte wissen, ob ich das so hinbringe, wie ich mir das vorstelle), der nach folgendem Prinzip arbeitet:

  • Die Login-Felder inkl. Anmeldebutton befinden sich (im Template wählbar) z.B. zwischen Menü und Suchfeld, der Stil entspricht dem Suchfeld
  • Die zugelassenen Benutzer für bestimmte Bereiche sowie die Anmelde-Passworte sind in zwei Textdateien abgelegt (in einem extra Verzeichnis - evtl. Schutz über .htaccess)
  • Ein korrekt angemeldeter Benutzer wird in einer Session-Variable gespeichert (das wollten die Mozilo-Coder bei ihrem Login explizit nicht, da es evtl. in seltenen Fällen zu Problemen kommen kann)
  • Im Wesentlichen wird in derjenigen Funktion in der index.php gefiltert, welche entsprechend der Verzeichnisstruktur im "Kategorien"-Verzeichnis die Kategorien bzw. Seiten innerhalb einer Kategorie ermittelt. Diese Filterroutine (unmittelbar vor Rückgabe der Liste eingebaut) gibt nur DIE Seiten zurück, für welche kein Zugangsschutz-Eintrag besteht bzw. für welche der Benutzer eingetragen ist. Andere Seiten existieren dann für Mozilo gar nicht - sowohl der Menüeintrag taucht nicht auf als auch der Direktaufruf der (eben "nicht existenten") Seite ist nicht möglich.

So siehts aus:



Wie wird der Zugangsschutz eingebaut / was muss geändert werden? Eigentlich gar nicht viel...
(Grundlage ist das Nightly-Preview auf Version 1.12)

  • /index.php: Da der Zugangsschutz etwas tiefer in Mozilo eingreift (ich wollte wie gesagt keine geschützten Seiten, von deren Existenz aber jeder weiss), habe ich die index.php verändert. Oberhalb und unterhalb von Abschnitten, die von mir stammen, befinden sich /**AC**/-Kommentare (AccessControl). Alle eingefügten Codeblöcke (insgesamt nur 5 / eigentlich nur 4!) sind kommentiert, auch eine Info zum richtigen Einfügeort ist im Kommentar enthalten. WICHTIG für Skeptiker: In der index.php muss nichts gelöscht oder verändert, sondern nur zusätzlicher Code ergänzt werden!
  • /layouts/xxx/template.html: Hier muss das Login-Formular eingebaut werden (ich habs im "MoziloCMS 2009" eingebaut, innerhalb <!--AC--> Tags
  • /access_control/: dieses Verzeichnis mit Unterverzeichnis /safedir (letzteres kann z.B. mit .htaccess geschützt werden) wird aus der ZIP-Datei ins Basis-Verzeichnis kopiert (da wo auch "admin", "cms", etc. liegen)
Wahrscheinlich funktioniert das alles erst ab Version 1.12 (oder eben dem aktuellen Nightly), da jetzt im Browser genialerweise nicht mehr vor den Kategorien/Seitennamen die Nummern stehen (professionell! das hat mir bisher auch nicht so gefallen, da nicht Suchmaschinenfreundlich...) und dies wird der ganzen Erweiterung zugrundegelegt

Die "Benutzerverwaltung" muss vorerst über die beiden Dateien /access_control/safedir/ac_accesslist.txt und /access_control/safedir/ac_users.txt erfolgen (Texteditor!), der Aufbau der Einträge ist in der jeweiligen Datei erklärt.

Ich hab vorübergehend mal eine Demo-Installation mit zwei Benutzern (user1/pass1 und user2/pass2) aufgesetzt (so auch in der ZIP-Datei enthalten), die folgende Struktur enthält:
(die Demo-Installation befindet sich auf http://engineering.square7.ch/mozilodemo)

Willkommen
|- Willkommen
|- Kontakt
|- Eine Galerie
offene Kategorie
|- offene Seite
|- geschützte Seite (NUR user1 hat Zugriff)
geschützte Kategorie (user1 UND user2 haben Zugriff)
|- Standardseite


Setzt, wenn ihr angemeldet seid, auch mal auf einer geschützten Seite ein Bookmark, meldet Euch ab und ruft das Bookmark auf. Meldet Euch dann an.

Gebt bitte Feedback zu der Lösung, da ich das ganze relativ bald gerne "produktiv" einsetzten will.
Mich würde sehr freuen, wenn eine derartige Loginlösung mit den genannten Features in Mozilo aufgenommen würde (auch wenn sie auf Sessions basiert...) - auch in anderen Forumsbeiträgen sieht man, dass durchaus einige Nutzer einen Teil ihrer Internetpräsenz sichern wollen.

Zum Thema "Plugins in Version 1.12":
Ich habe auf die Schnelle keine Möglichkeit gesehen, den Eingriff in die index.php über die neue Plugin-Schnittstelle vorzunehmen - vielleicht ist da jemand anders fitter!

Und: Mozilo ist einfach GEIL!

Grüße
Manfred

lhuesker

#1
Habe Deine Variante noch nicht getestet.

Setze Mozilo auf 5 Seiten für Vereine ein. Weils so einfach ist. Weil man auch nicht PC-geübte damit schnell dazu kriegt Inhalte einzupflegen.

Das von Dir programmierte Feature , ist das Einzige, was ich noch wirklich vermisst habe!

(Gerade bei Verienen braucht man manchmal Interne und Vorstandsinterne Bereiche!)

Es wäre schön, wenn das in ein final release übernommen würde!

Gruß
Leo

mhsob

#2
Es gibt nochmal einen Nachtrag - ich hab' die Überprüfung der Zugangsberechtigung, die ja relativ oft aufgerufen wird, von einer PHP-Interpreter-For-Schleife mit einem Durchlauf pro geschützter Resource in EINEN strpos()-Aufruf pro Abfrage geändert. Da die strpos()-Funktion direkt Teil der php-Binary ist, sollte das etwas effizienter sein.
Ausserdem hab ich in der index.php noch meine Formularfelder umbenannt, um nicht mit den Mozilo-eigenen zu kollidieren (action -> ac_action).

Grüße
Manfred

stefanbe

#3
Hallo mhsob du hast nee PN

azett

#4
Hallo Manfred,

ich finde die Idee extrem spannend. Für den Standard ist es IMHO zwar oversized, das läßt sich aber garantiert als Plugin erstellen - und das wäre in der Tat ein absolutes Deluxe-Plugin :)

Ich vermute, in die Richtung zielt Stefans PN - er ist unser Plugin-Gott, schließ dich ruhig intensiv mit ihm kurz ;)


Zitat von: "mhsob"Mozilo ist einfach GEIL!
Dem ist nichts hinzuzufügen  :mrgreen:

penk

#5
Absolut das, was ich suche!
Ich trau mich aber noch nicht!

Rainer

#6
Das ist was für unsere LETS-Seite. Jetzt warte ich nochmal so gerne auf das Neue.
moziloCMS über Facebook bekannt machen
•• moziloCMS auf GitHub
••• Nichts ist einfacher, als das, was uns fremd ist, zu verachten.
•••• Mein moziloCMS

stylerontour

#7
Habe das mal in einer meiner Seiten eingebaut, ist an sich absolut genial...ABER

# Nach der anmeldung wäre es besser wenn die für den User vorgesehene seite sich automatich öffnen würde.
# Plugins versagen in seiner funktion zb. SidebarPage, usw.
# Verstekete Inhaltseiten verursachen auf dem server Fehlermeldungen.
# CSS geht verloren und Seite schaut S......e aus.


Kann aber auch sein das ich zu blöd bin das richtig einzubauen.... :D
Um ein tadelloses Mitglied einer Schafsherde sein zu können, muß man vor allem ein Schaf sein.

mozilo CMS im Software-Installer bei UD-Media war mein tipp.

mhsob

#8
@stylerontour:
zu 1.:
"die für den User vorgesehene Seite" gibts bei meinem Prinzip nicht. Es gibt mehrere Seiten, um welche das Menü nach erfolgreichem Login erweitert wird. Die erste aller geschützten Seiten anzuzeigen macht aber nicht unbedingt Sinn.
zu 2.:
Ich habe mir selbst ein slimbox-Galerie-Plugin programmiert, welches ich auf meiner Seite nutze. Hab auch schon stefanbe's Kalender etc. ausprobiert. Bisher hatte ich keine Probleme. Was sein kann ist, dass Du mit 1.12.beta1 Probleme hast, weil diese Version alles zwischen { } als Plugin deutet und der {LOGIN}-Tag als ungültiges Plugin gedeutet wird. Das wurde in .beta2 behoben.
zu 3.:
Ich hab bei mir einige versteckte Inhaltsseiten (3. Menüebene und so). Hatte keine Probleme damit.
zu 4.:
Schau Dir das oben verlinkte Demo an - sieht doch wie gewohnt aus, oder? Möglicherweise gibts mit einigen Layouts Probleme, ich hab bisher nur das MoziloCMS und mein eigenes Template genutzt. Dazu kann ich leider nicht mehr sagen.
Dass Du zu blöd bist, das richtig einzubauen, glaub ich nicht - es ist halt ein auf meine Anwendung optimierter "Hack" und kein universelles Plugin. Normalerweise funktioniert der auch, aber vielleicht nicht in jeder Konstellation.

So, nun zum Thema Plugin:
stefanbe (der Plugin-Gott) hat mir am 23.02.2010 eine Schnellversion in Pluginform geschickt. Prinzipiell genial - das hat mir auch die Plugin-Schnittstelle verdeutlicht.
Das Prinzip ist es, im Template eine eigene Funktion zur Ausgabe des Menüs anstelle von {MAINMENU} zu verwenden, z.B. {Login|loginmenu}. Die Felder für Benutzername/Passwort werden dann ausgegeben im Template mit {Login|loginform}. Der Inhalt jeder zu schützenden Seite wird mit {Login|...} umgeben und ... nur bei gültiger Session ausgegeben.

Es gibt für mich aber Einschränkungen im Vergleich zu meiner Version:
  • Mir war es wichtig, mozilo auf lowlevel vorzugaukeln, dass die Seiten, für welche kein gültiges Login existiert, gar nicht vorhanden sind. Der Effekt ist nicht nur, dass diese eben automatisch nicht im Menü auftauchen, sondern dass auch die Sitemap oder die Suche nix von den Seiten wissen.
  • Beim Plugin benötigt man wie bei mir eine Datei mit Benutzerdaten und eine Datei mit Zugangsberechtigungen für die verschiedenen Kategorien/Inhaltsseiten. Sind die Benutzer mal angelegt, dann wird alles aus der Datei mit den Zugangsberechtigungen verwaltet. Beim Plugin muss man zusätzlich jede zu schützende Inhaltsseite bearbeiten.
  • Bei der vorgeschlagenen Lösung werden die Logindaten erst durch die eigentliche Inhaltsseite geprüft und eine Session-Variable gesetzt. Das Menü ist zu diesem Zeitpunkt schon entsprechend dem alten Wert der Session-Variablen aufgebaut.
  • Die Ersatzfunktion für die Menüausgabe ist im Wesentlichen eine modifizierte Kopie aus der mozilo-index.php. Je nachdem, wie sich im Laufe der Zeit die Funktion ändert, sollte sie auch im Plugin angepasst werden.

stefanbe hat mir geraten (für ein Plugin hat er da wohl recht), dass man Zugriffsrechte- und Benutzerverwaltung direkt aus dem Mozilo-Adminbereich machen muss. Wow - das wäre Luxus aber auch ein bischen Arbeit, für die ich einfach momentan keine Zeit habe.
Er hat auch gemeint, dass ich in der Zugriffsrechte-Datei die Seiten so benennen soll, wie sie im Verzeichnissystem abgelegt sind, also z.B. "30_gesch%C3%BCtzte%20Kategorie%2A" statt "geschützte Kategorie". Das gefällt mir auch nicht besonders, da ich schon oft Seiten verschoben habe, und dann müsste ich auch immer die Rechte-Datei kontrollieren und anpassen. Andererseits kanns mit meiner Variante Probleme mit der Zeichenkodierung der Rechtedatei geben (UTF-8, DOS, etc.). Irgendwie hat er ja auch hier recht, aber ich wollte es eben ein wenig anders.

Beim Hack hat sich inzwischen auch was geändert. Wegen der 1.12.beta1 { }-Problematik wird das Login-Formular im Template jetzt mit #LOGIN# aufgerufen. Geschützte Kategorien oder Seiten müssen jetzt ein * am Ende haben. Alles was ein * am Ende hat, wird erstmal nicht angezeigt, ausser der angemeldete Benutzer hat entsprechende Rechte. Alles ohne * wird gar nicht überprüft. Das * zeigt angemeldeten Benutzern auch, dass sie sich auf einer "besonderen" Seite befinden, für welche sie beim nächsten Besuch wieder Logindaten brauchen. Auch Logins über den Session-Timeout hinaus sind jetzt durch Verwendung von Standard-Cookies möglich.
Ich stell mal wieder eine zip-Datei online mit dem moziloCMS 1.12.beta2 und gehackter index.php sowie access-control Verzeichnis.
Was ist zu tun, um das ganze einzurichten? Die zip-Datei entpacken und fertig. Und bei der eigenen Seite?
  • index.php aus der .zip-Datei verwenden oder selbst patchen. Eine Anleitung (auch für Folgeversionen) befindet sich in der Datei "mozilo_ac_hack.php" im Verzeichnis "access_control". Dort sind die vier Blöcke, welche in die index.php eingefügt werden müssen inkl. Beschreibung der richtigen Stelle enthalten, sowie der Hinweis, wie das ganze ins Template kommt. Wie gesagt, es muss nix "verändert", nur was einfgefügt werden.
  • Template anpassen und #LOGIN# z.B. analog zu {SEARCH} reinbringen (Search kopieren und Tag ersetzen)
  • Verzeichnis "access_control" in die oberste Verzeichnisebene kopieren und "ac_accesslist.txt" und "ac_users.txt" in "safedir" mit Texteditor im DOS-Format anpassen (nicht UTF-8 kodiert)
  • evtl. "safedir" mit .htaccess schützen

Zugangsdaten für die Demo-Installation: user1 & pass1 / user2 & pass2, die Seitenstruktur ist wie im Eingangsbeitrag.

Vielleicht bringts Euch ja was - wie gesagt, für mich isses momentan perfekt und ein wirklich GUTES Plugin ist momentan für mich deutlich zuviel Aufwand. Und was anderes braucht man nicht veröffentlichen, wenn alle bloß Ärger damit haben.

azett

#9
Sehr cool, wirklich sehr, sehr cool.

Ich wäre sehr am Feedback derer interessiert, die das produktiv einsetzen - um abschätzen zu können, ob das vielleicht langfristig sinnvoll im Standard untergebracht wäre.

stylerontour

#10
joa als Plugin wärs der hammer... :mrgreen:

habe aber leider noch immer kleine fehler in der seite wenn ich SidebarPage anwende :cry:
warum weis ich och net... :? und verschiebe das Projekt auf andere Tage meiner Freiheit. :lol:
Um ein tadelloses Mitglied einer Schafsherde sein zu können, muß man vor allem ein Schaf sein.

mozilo CMS im Software-Installer bei UD-Media war mein tipp.

darthm0e

#11
Ich werds mal im Testpark einbauen. Hab 1.12 noch nicht im Produktiven Einsatz.

Momentan laufen meine Seiten noch auf der latest von 1.11.
Die selbstgefrickelten Themes bereiten teilweise noch Probleme bei der 1.12.

Interessant wäre das ganze natürlich noch wenns ins Backend integriert werden würde. Also mit Login für den Admin und für die (DAU) User die Seiten ändern dürfen.

Zitat von: "mhsob"@stylerontour:
So, nun zum Thema Plugin:
stefanbe (der Plugin-Gott) hat mir am 23.02.2010 eine Schnellversion in Pluginform geschickt. Prinzipiell genial - das hat mir auch die Plugin-Schnittstelle verdeutlicht.
Das Prinzip ist es, im Template eine eigene Funktion zur Ausgabe des Menüs anstelle von {MAINMENU} zu verwenden, z.B. {Login|loginmenu}. Die Felder für Benutzername/Passwort werden dann ausgegeben im Template mit {Login|loginform}. Der Inhalt jeder zu schützenden Seite wird mit {Login|...} umgeben und ... nur bei gültiger Session ausgegeben.

läuft das Plugin soweit? Könnte man das mal hier reinstellen? Keine Lust zu fummeln :)
[center:38favh6n]In a World without Walls and Fences, who needs Gates and Windows?
//blog.ocktown.de | //testpark.ocktown.de[/center:38favh6n]

stylerontour

#12
hmmm......

ich will das auch ;)
Um ein tadelloses Mitglied einer Schafsherde sein zu können, muß man vor allem ein Schaf sein.

mozilo CMS im Software-Installer bei UD-Media war mein tipp.

mhsob

#13
Naja, ich will's natürlich auch. Es wird aus den genannten Gründen als Plugin nur nicht DAS, was es als Hack ist (vgl. meinen letzten Beitrag). Ich nutze das ganze nach wie vor, ein Plugin liefert wie gesagt aber leider nicht das, was ich will. Ich stell aber eine gepachte index.php für 1.12b3 ein, wenn's gewünscht ist. Vielleicht wird's ja doch Bestandteil von 1.12.beta4 oder von 1.13... Die Mozilo's könnten gerne auch Code-Teile ohne Quellenangabe verwenden oder alles in optimierter Form selbermachen.

Grüße
Manfred

azett

#14
Zitat von: "mhsob"Ich stell aber eine gepachte index.php für 1.12b3 ein, wenn's gewünscht ist.
Ja, sehr gern.