# Aufbau eines Content managment systems



## fluxy (19. Sep 2004)

Hallo,

ich will in Java ein Content Managment System (CMS) implementieren. Ich frage mich jetzt natürlich, wie man sowas anfängt und wie es dann weitergeht. Ein Kollege hat eins im PHP programmiert, dort hat er so Vorlagen verwendet. Aber mehr weiss ich darüber bis jetzt noch nicht.


Wenn mir jemand sagen könnte, wie man an sowas ran geht, würde das sehr helfen.


Gruß Sebastian


----------



## fluxy (23. Sep 2004)

Hmm ich habe mir überlegt, dass ich in meiner Datenbank eine Tabelle Contents erzeugen sollte, in der alle Contents eingefügt werden. Eine Spalte sollte dann ein Flag sein, ob das Content ein HTML Baustein ist oder nicht, mit welchem ich dann meine Webseiten bauen kann. Allerdings überlege ich mir grade wie ich das mit den Rechten mache. Auf der Arbeit haben wir so ein Rollensystem, welches Benutzerrechte verwaltet. Weiss jemand wie sowas funktioniert?!


----------



## Guest (23. Sep 2004)

Erstelle ein kleines HTML-Projekt und überlege Dir, was dort alles austauschbar ist
bzw. verwaltet werden könnte.

- Welche Informationene werden über einzelne Seiten benötigt?
- Wie kann man die Informationenen über die Seitenübergänge verwalten? 
- Wohin mit dem Inhalt?
- Wohin mit dem Layout? (CSS, Grafik etc.)
- Wie könnten die typischen Abläufe aus Sicht des Anwenders aussehen?
  (Je detailierter dest besser, den darauf kommt's an.)
- Wie spielt das ganze zusammen, wenn es mal läuft?

Beschreibe das ganze zuerst mal bevor Du Dich auf die Tastatur stürzst, 
um zu programmieren. Jede noch so verrückte Idee aufschreiben, ohne viel 
zu überlegen. Danach kannst Du Dir Gedanken über die Kernaufgaben eines 
CMS machen und das ganze in paar kleine Teilprojekte aufteilen.


----------



## Guest (23. Sep 2004)

Sollte Informationen heissen  Ich tippe zu schnell, leider nicht fehlerfrei...


----------



## akira (23. Sep 2004)

> Auf der Arbeit haben wir so ein Rollensystem, welches Benutzerrechte verwaltet. Weiss jemand wie sowas funktioniert?!



Ein Ansatz wäre folgender:

Du definierst Rollen und die damit verbundenen Rechte. Dabei könnten z.B. Rollen voneinander erben, wenn sie die Rechte einer anderen Rolle erweitern.

Dann ordnest Du jedem Benutzer eine (oder mehrere) Rollen zu und prüfst im Code bei bestimmten Aktionen, ober der Benutzer eine bestimmte Rolle und somit deren Rechte besitzt und eine bestimmte Aktion ausführen darf. Oder Du stellst im Menü z.B. nur die Menüpunkte zur Verfügung, die der spezielle Nutzer mit seinen Rollen sehen darf.

Bei vielen Benutzern machen wahrscheinlich auch Benutzergruppen mit bestimmten Rollen Sinn. Du kannst dann z.B. bestimmten Gruppen nur bestimmte Contentteile zur Verwaltung überlassen oder ähnliches.


----------



## fluxy (23. Sep 2004)

naja so ähnlich habe ich mir das schon vorgestellt.


Das Problem dabei, das ich habe ist folgendes: Ich muss es ja quasi schaffen, dass ich für jeden Baustein, also jeden Content, welcher vom System verwaltet wird, für jeden User über ein Recht verfügt, damit das variabel genug anwendbar ist. Ich muss also sagen können, dass user x auf der baustein a volles recht hat, während user y nur lesezugriff und user z nur Schreib-/Leserecht, aber kein Ausführrecht hat. 

Und das muss mein Rollensystem nachher können. Bisher bin ich ja nur bei der Datenbank. Ich brauche ja dann jetzt entsprechend eine Datenbanktabelle (oder mehrere) für mein Rollensystem. Allerdings habe ich keine Ahnung, wie ich das aufziehen soll. Eine Rolle muss ja die Rechte verwalten. Muss ich dann für jedes Content eine eigene Rolle definieren und den usern dann die Rollen zuweisen, wenn sie die rechten haben sollten?! Oder wie soll das vonstattengehen?!


----------



## akira (23. Sep 2004)

Also ich würde da so rangehen:

Eine Tabelle für alle Berechtigungen die es gibt, also id und Name. Die Bedeutung dieser id mußt Du dann im Code definieren, z.B:


```
public class Rechte {
   
    public final static int LESERECHT = 1;
    public final static int SCHREIBRECHT = 2;
    // usw.

    private int id;
    private int name;

    //...
}
```

Eine weiter Tabelle anlegen mit allen Rollen, die es geben soll, z.B. Leser, Author, Lektor, Redakteur, Admin usw. wieder mit id und Name und vielleicht noch Beschreibung.

Dritte Tabelle alle Benutzer reinstecken mit id und sonstiges.

Nun eine Verknüpfungstabelle aufbauen, die die Rollen zu Berechtigungen mappt (rechtId, rolleId) und eine weitere, die Benutzer zu Rollen zuordnet (userId, roleId).

Eventuell führst Du noch eine Gruppentabelle ein und eine weitere Verküpfungstabelle (groupId, roleId) um gleichzeitig mehreren Leuten die gleichen Rechte zu geben.

Bezuglich des Contents würde ich Dir eine Art Verzeichnissystem empfehlen, welches jeden Content einem bestimmten (Unter-)verzeichnis zuweist, dem Du wiederum einer bestimmten Gruppe mit ihren Rechen Zugriff gewähren lassen kannst. Ich meine übrigens keine Verzeichnisse auf der Platte, sondern "virtuelle" in der DB.


----------



## fluxy (23. Sep 2004)

Also als meine Usertabelle nehme ich einfach mein Seitenlogin, das sollte ich dafür Problemlos nehmen können. Es wird auch eine Tabelle directory oder so ähnlich geben, wobei das content dann die id des Parentverzeichnisses übergeben bekommt. Damit sollte klar sein, wo sich das content befindet.

Im Moment sieht es so aus (bitte nicht an RELATION stören, dass ist die Syntax die wir auf der Arbeit verwenden, hat mit mySQL nix am Hut 


// RELATION content EXPLAIN "Baustein"
content (baustein)
	- cnt_nr						// Content ID
	- cnt_bez						// Dateiname
	- cnt_htmlTmpl			// Ist HTML Template
	- cnt_dnr						// Elternverzeichnis
	- cnt_drpos					// Position in Verzeichnis
	- cnt_mineTpNr			// Mine-Type ID
	- cnt_isVisible			// Content sichtbar für alle Benutzer
	- cnt_rolle					// Rolle für Sicherheitsrichtlinien



// RELATION direcoty EXPLAIN "Verzeichnis"	
directory (verzeichnis)
	- dnr_id							// Verzeichnis ID
	- dnr_bez							// Name des Verzeichnises
	- dnr_ebene						// Verzeichnisebene, 0 für root
	- dnr_numcnt					// Anzahl entschaltender Bausteine
	- dnr_role						// Rolle für Sicherheitsrichtlinien



// RELATION rolle EXPLAIN "Rollenverwaltung"
role (Rollenverwaltung)
	- rol_id								// Rollen-ID
	- 



// RELATION auth	EXPLAIN "Userrechte"
auth
	- auth_nr								// Rechte ID
	-	


so in Etwa bin ich im Moment mit der Planung. Da müsste ich jetzt also quasi noch die Verknüpfungstabellen einbauen oder?!


----------



## akira (24. Sep 2004)

> Da müsste ich jetzt also quasi noch die Verknüpfungstabellen einbauen oder?!



Ganz genau.   

Ich würde wie gesagt noch Benutzergruppen verwenden, must Du aber wissen.


----------

