Viele CMS und Frameworks (außer Drupal) trennen selbst vom Design her zwischen einer "öffentlichen Fassade" und dem "Verwaltungsbereich" einer Webseite. Das hat zur Folge daß sich der Aufwand des Designs (Schrifttype, Farbcodes, Darstellung von jedem einzelnen Element wie Bild, Tabelle, Maske, Navigation usw.) mindestens verdoppelt.
Die Idee eines separaten "Backend" oder Verwaltungsseiten erschein mir jedoch immer schon merkwürdig, denn verschiedene Gruppen von Nutzern benötigen einfach nur verschiedene Tiefe des Zugangs immer derselben Webseite: Der Redakteur muß Texte und Bilder auf der Webseite ändern können aber nicht deren Design. Ein angemeldeter Kunde muß dagegen z.B. seine Rechnungen einsehen und herunterladen können, Stammdaten ändern. Geschäftspartner haben z.B. Zugriff auf andere Bereiche derselben Seite.
Wie sind die die üblichen CMS organisiert?
Um die z.B. Anmeldung von Benutzern an einer Webseite zu erlauben, müssen natürlich gewisse Daten in jedem CMS vorgehalten werden, meist ist die Folge davon ein "Benutzerobjekt" (lies: Tabelle mit Benutzerdaten) mit fest zugewiesenen Datenfeldern, wie Email, Vorname, Nachname, Passwort, Berechtigungsstufen. Dieses "Benutzerobjekt" ist in den meisten Fällen nicht einmal mit eigenen Datenfeldern der Installation erweiterbar, wie z.B. einer Postadresse, Bankkonto usw. .
NowCMS hat zwar auch gewisse Minimalanforderungen an einen Loginprozess, - im Moment wird aber lediglich ein ein Passwort benötigt. Schon eine Emailadresse ist nicht zwingend für ein Login erforderlich. Wenn die einzelne Installation außer dem Passwort noch einen Benutzernamen und / oder Emailadresse verlangt ist dies kein Problem und wird wohl auch der Normalfall sein - NowCMS wurde jedoch in den unbedingten Mindestanforderungen auf ein Minimum reduziert.
Bei NowCMS können jederzeit weitere Datenfelder auch zum Benutzerobjekt sogar durch "Zusammenklicken" auf der Webseite selbst - natürlich als entsprechender Administrator - hinzugefügt werden. Diese werden exakt so sauber layoutet als wären sie von Anfang an ureigener Bestandteil von NowCMS gewesen. NowCMS unterscheidet eben prinzipiell nicht zwischen "eigenen", also für die Funktion des CMS nötigen Datenfeldern und den "weiteren" Datenfeldern die für einen bestimmten Kunden in einer bestimmten Instanz von NowCMS bei der Installation hinzugefügt werden müssen.
In den meisten anderen CMS muß man neben der Funktion daß sich Benutzer als Administrator anmelden können, ein zweites Objekt anlegen wie zum Beispiel "Kunden". Beide Nutzergruppen melden sich dann auf unterscheidliche Weise an verschiedenen Teilen der Webseite an. Das fand ich ärgerlich und habe es daher vermieden.
Mit diesem - etwas zu sehr vereinfachten - Satz wird aber zutreffend beschrieben, daß alle Daten in relationalen Datenbanken in Tabellen geschrieben werden. NowCMS verwendet - genau wie die große Mehrheit anderen CMS auf Basis der Programmierspreche PHP - "hinter den Kulissen" auf eine relationale Datenbank wie MySQL, MariaDB oder PostgresQL zugreift. Vorteil dieser Datenbanken ist, daß sich sehr komplexe Such- und Sortieroptionen durch einfache, fast in natürlicher Sprache formulierbaren Abfragen darstellenlassen. NowCMS versucht, die Mächtigkeit von SQL für das Webdesign zu erschließen.
"Alles ist eine Tabelle" trifft jedoch seit Jahrhunderten auch für jede Firma zu: Es gibt eine Liste von Angestellten, sie erhalten eine Liste von Lohnzahlungen, sind in bestimmten Gehaltsklassen, verwalten eine Liste von Artikeln, Bestellungen, Lieferungen, Rechnungen, jede Rechnung hat eine Liste von Rechnungspositionen und so weiter.
Natürlich müssen diese verschiedenen Entitäten auf geeignete Weise miteinander verbunden werden: Eine Rechnung darf natürlich nur immer die eigenen Rechnungsposition zeigen und nciht "alle". Dieser Code (auch "business logic" genant muß auch bei NowCMS "von Hand" programmiert werden, es muß Code geschrieben werden. Gleichzeitig benötigen alle Firmen irggend eine Fakturierung, irgendeine Lagerhaltung, irgendeine Personalabteilung und irgendeine Webseite. Die Informationen fließen bei NowCMS alle im Web - in der Websiete könnte man auch sagen - zusammen.
Was ein "Bruch" des verwendeten Mediums ist, läßt sich am besten an der folgenden "ganz normalen" Geschichte nachvollziehen: Ein Mensch möchte Mitglied in einem Verein werden: Er oder sie füllt also seine Daten in ein Kontaktformular auf der Webseite. Diese erstellt daraus eine Email. Der Schroftführer des Vereins liest diese und überträgt diese in eine Excel-Datei. Diese muß er natürlich auch dem Kasenwart zusenden, dabei aber aufpassen daß deren Daten immer angeglichen sind. Will dann der Schriftführer eien Erinnerungsmail an alle senden, die noch nicht gezahlt haben - am betsen noch in Firm einer Word-Datei die manche Mitglieder vielleicht nicht lesen können, muß er den Kassenwart nach einer Liste der Säumigen fragen. Daraus macht er dann eine Mail mit seinem Mailprogramm...
Stattdessen hätte schon bei der ersten Dateneingabe der Datensatz für das zukünftige Mitglied im CMS angelegt werden können. Rechnungen, Begrüßungsmails oder Newsletter können von NowCMS aus direkt versendet werden, Lastschriften ans Bankprogramm weitergegeben sodaß auch die Zahlungsmoral kein Problem mehr ist - und alle Verwalter des Vereins haben jederzeit die aktuellen Daten, die auch noch täglich automatisch geschichert werden.
Man darf behaupten, alle Menschen kennen den hierarchischen Navigationsbaum des "Windows Explorer" und sehen auch bei Mac OS X dasselbe Prinzip realisiert: Dateien werden in Ordnern gruppiert, die ihrerseits wieder in Ordnern stecken können: Eine belienig verschachtelte Hierarchie kann leicht und intuitiv umgesetzt werden.
Auf den gängigen Internetseiten - je größer je schlimmer - kämpfen oft verschiedene Navigationsmenüs um Aufmerksamkeit oder werden übersehen: Oben, links, unten, manchmal sogar rechts kann man in verschiedene Bereichr der Webseite auf verschiedene Weise gelangen, es ist auf jeden Fall kaum ersichtlich wo man sich gerade befindet, vor allem wenn eine Webseite komplex genug ist daß man mehr als zwei Navigationsebenen benötigt, um z.B. alle Waren darzustellen.
Ich habe mich stattdessen dazu entschlossen, die hierarchische Navigation wie wir sie alle kennen - und wie sie auch in den URLs von beliebigen Webseiten sichtbar ist - als Navigationsbaum abzubilden: Belienig tief verschachtelten Navigationen sidn möglich iund es ist allein eine Frage des Layouts wie man die Daten für den Nutzer so kontextabhängig ausblenden kann, daß er durch die - manchmal unvermeidliche - Komplexität nicht abgelenkt wird.
Dabei gebe ich horizontaler Navigation den Vorteil, ganz einfach weil sie nach oben hin aus dem Browserfenster hinausgescrollt werden kann wenn sie länger wird und weil sie nicht 1/3 der Webseite auf der linen Seite auffrißt.
NowCMS benutzt den Begriff "Node" ganz ähnlich wie andere CMS den Begriff "Artikel" oder "Seite" pflegen. Node rein deshalb weil ein hierarchischer Navigationsbaum wie oben beschrieben immer "Aste" und "Knoten" hat. An einem "Knoten" (Node) kann ein Text hängen (dann ist es ein Artikel) oder der Knoten kann auch nur der Kopf für eine weitere Navigationsebene sein. Auf jeden Fall entspricht einem Node immer ein ganz bestimmten Verzeichnis im URL-Baum.
Es ist bei anderen CMS üblich, feste Rollen wie "Redakteur", "Adminstrator" usw. an die Nutzer zu verteilen oder auch nicht.
NowCMS kennt dagegen nur "Gruppen": Benutzer können beliebig in Gruppen organisiert werden und es können beliebige Gruppen angelegt werden. Einige dieser Gruppen können dann als "Schlüssel" für bestimmte Bereiche eingesetzt werden:
Jedes CMS muß in bezug aif Sicherheit gut gerüstet sein: Es darf nicht möglich sein, über massenhaftes Anfragen z.B. Benutzernamen und Passwörter zu erraten. Gleichzeitig darf ein Benutzer der sich mal beim Passwort vertippt nciht gleich ausgesperrt werden. Auch sollte übermäßige Nutzung (Spidern oder Crawlen) begrenzt werden.
Bei vielen CMS werden diese Sicherheitsfunktionen durch zusätzliche "Pakete" oder "Module" realisiert: Dies schein mir von Anfang an als schlechet Lösung denn Sicherheit ist der ureigenste, wichtigste Kern einer jeden Webanwendung. Schoin in der kleinstmöglichen Form einer Installation von NowCMS müsseen alle Funktionen des Schutzes gegen alle bekannetn Arten von Angriffen fest implementiert sein. Dazu gehört bei NowCMS z.B. auch ein sogenannter "Karmawert"; IP-Adressen die besonders oft Inhalte abrufen werden etwas genauer betrachtet udn länger gespeichert, genauso IP-Adressen welche nach nichtexistenten Seiten Ausschau halten, also z.B. nach Lücken. NowCMS stellt dies schon beim ersten Zugriff fst und stellt die jeweiligen IP-Adressen unter Beobachtung bis hin zur automatischen Sperre.
Die Sperre ist dabei so gestaltet, daß gerade automatische Angriffsmechanismen besonders früh ins Leere laufen.
Hier die im Moment in NowCMS verfügbare Datentypen:
Jede dieser Einstellungen hat viele spezifische Einstellmöglichkeiten.
10. NowCMS ist von Grund auf mehrsprachig
NowCMS ist durchgehend mehrsprachig aufgebaut und kommt von Haus aus in den Sprachen Englisch, Deutsch, Französisch und Italienisch (F und I sind nicht vollständig übersetzt). Jede Sprache hat ihren eigenen Navigationsbaum, es können also in den Sprachen verschieden verzweigter Content dargestellt werden. Es kann aber immer zwischen den übersetzten Seiten hin- und her gewechselt werden.
Wordpress ist eines der "kleinsten" CMS unter den gängigen. Es besteht aber aus etwa 419000 Codezeilen (2016) allein in seinem Kernbereich.
NowCMS hat in 2019 ganze 12300 Codezeilen in nur 11 PHP-Dateien, die zusammen etwa 406 kByte Code bilden. Es kommen natürlich noch Konfigurationsdaten in der Datenbank, CSS-Dateien, wenige grafische Elemente in etwa gleicher Größe dazu.
Daher gilt:
Weil NowCMS vergleichsweise spartanisch wenig Code hat, hat es im Unterschied zu den meisten anderen CMS die Chance, vollständig sicherheitsauditiert zu werden, ohne hunderttausende Euro ausgeben zu müssen.
Im gegenwärtigen Webdesign beobachteen wir überall ein ungeheuerliches Aufblähen von Code: Für jede kleine Funktion wird eine weitere Bibliothek hinzugeladen, darunter serh viel javaScript: Durch diese zahllose Abhängkeiten wird der Code insgesamt nicht mehr sicherheitsuditierbar, da bei jeder Änderung überorüft werden müßte ob unsicherer Code Zugang gefunden hat.
Da NowCMS vor allem in bezug auf Sicherheit konzipiert wurde, wurde schon früh entschieden daß die Bedienung identisch und fehlerfrei funktionieren muß für Nutzer, welche JavaScript ausgeschaltet haben
Selbstverständlich adressiert NowCMS alle aktuell bekannten Angriffsvektoren, als da sind:
Die mag für Fachleute zunächst als ein Schock erscheinen.
Objektorientiertes Programmieren ist eine absolut gängige moderne Programmierweise und sie hat auf jeden Fall ihre Berechtigung in vielen Bereichen der Softwareentwicklung.
Sie sorgt aber in der Regel dafür daß Cod edurch das Einführen von zusätzlichen Abstraktionen stark aufgebläht wird. Aufgeblähter Code ist schwerer und teurer zu pflegen.
Ich verwehre mich nicht generell den Denkweise des OOP, werde sie nur an Stellen einsetzen, wo sie auch für mich unvermeidlich ist um eine gesunde Architektur zu erzeugen: So ist z.B. das "messaging" (Logging, Fehlermeldungen, Rückmeldungen zum Nutzer, Ergenismeldung von Aktionen usw.) auch über ein Messaging-Objekt realisiert. Der Zugriff auf die Datenbank und Erstellen von Mails sind ebenfalls objektoerientiert strukturiert.
Da es aber bei NowCMS im wesentlchen nur vier Onejkte gibt, die sich sinnvoll abstrahieren lißen (der Node, der DataNode, der Datensatz und die Tabelle) habe ich im Moment noch drauf verzichtet alles sauber obnjekorientiwrt umzusetzen, auch weil der Cod eam Anfang noch nicht die nötige Reife hatte um die richtige oder im Zusammenhang optimale Abstraktion zu finden:
Da Datenbanktabellen stets um Spalten erweitert werden können oder Spalten gelöscht werden, andere Funktionen und Interpretationen erhalten, halte ich einen datenorientierten Ansatz für überlegen. Details würden aber hier zu weit führen.
Oben haben wir vom Begriff "Nodes" gesprochen, ein Begriff der fast synonym mit "Seite" oder "Artikel" verwendet werden können. Wenn jedoch etwas anderes als fester Text auf der Seite dargestellt werden soll wie Kalender, Grafiken oder auch nur in tabellen organisierte Daten, benötigen wir den "DataNode": Ein Node kann mehrere "Datanodes" enthalten.
NowCMS wächst bereits seit einigen Jahren und ist zur Produktionsreife in mittlerweile 4 Installationen vorgedrungen.
Natürlich habe auch ich mir Gedanken darüber gemacht, auf welche Weise die Funktion von NowCMS, insbesondere in einer kundenspizifischen Installation erweitert werden können.
Im Moment geschieht dies durch das Hinzufügen bestimmter, abgeschotteter Funktionen für das Laden, Speichern, Anlegen und Löschen von Datensätzen einer jeden Tabelle.
Im Dezember 2015 habe ich nach reiflicher Abwägung begonenn, ein neues CMS zu schreiben. Seit September 2017 läuft es bereits auf dellekom.de.
Mir ist völlig klar daß man nicht "das Rad neu erfinden sollte" - andererseits liefern alle CMS die ich bisher gesehen habe nicht die Funktionen die ich schon für die "Dellekom" dringend benötige. Wenn das Rad also nicht mehr rund läuft, kann Neuerfindung Sinn machen - wenn das Sicherheitswissen und "Best practice" Praktiken ausreichen, um meine Installation sowie die Kundendaten zu schützen.
Für mich hat sich das Schreiben schon fast dadurch gelohnt, daß die "Vorversion" des CMS mir seit 2005 gute Dienste als Fakturierung geleistet hat, die mir bis heute (Juli 2018) bereits 22247 Rechnungen geschrieben und größtenteils per Lastschrift eingezogen hat.
Das neue CMS ist in PHP (7.x) geschrieben und nutzt Datenbanken wie MySQL und MariaDB, kann aber auch mit anderen SQL-Datenbanken betrieben werden.
NowCMS ist nicht Open Source (was die Zukuft bringt werden wir sehen), ich benutze es bereits für mehrere Kunden. Das Hauptziel von "NowCMS" ist es nicht, die bekannten anderen CMS zu ersetzen, es soll immer dann zum Einsatz kommen, wenn die bekannten CMS wegen der Komplexität der Datenflüsse oder der Vielzahl besonderer Datentabellen und Businss-Logik nicht mehr verwendet werden können.
Pate gestanden hat phpMyAdmin - eine in PHP geschriebene Software die Technikern ermöglicht, beliebige Datenbankaktionen durchzuführen. NowCMS soll wie phpMyAdmin ein "Kleid" um eine Datenbank mit beliebigen Tabellen sein, bei dem die Zugriffsrechte und Visualisierung ansprechend gestaltet ist, während beliebige Tabellen dargestellt und manipuliert werden können.