Modul und Layout-Zugriff von verschiedenen Mandanten aus...

Gesperrt
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Modul und Layout-Zugriff von verschiedenen Mandanten aus...

Beitrag von rethus »

Ich möchte gerne über eine eigene DB-Tabelle (mod_client_access) den Zugriff von diversen Clients auf ein Modul zulassen.

IST-Zustand
Ausgeliefert wird Contenido so, dass in der Tabelle con_mod die Spalte id_client angibt, welcher Client zugriff auf das Modul hat.

SOLL-Zustand
Geplant ist, dass beliebig viele Mandanten Zugriff auf ein und das gleiche Modul haben. Dabei ist der Nachteil, der Vorteil, denn wenn man ein Modul ändert wird das bei allen geändert - was natürlich einiges an Vorsicht erfordert, bei dem Umgang mit dieser Funktion.

WEG zum ZIEL
  1. Als Lösung könnte man die Spalte idclient in der Tabelle con_mod mit kommaseparierten Zahlenwerten füllen (1,5,7 = Client 1,5 und 7 haben Zugriff). Dafür müsste dann lediglich das Modulausgabescript angepasst werden, dass es diese kommaseparierten Spalten auslesen kann.
  2. Oder man erstellt eine neue Tabelle mod_client_access, mit den Spalten id, id_mod, id_owner, id_clients, lastmodified.
    Diese erhält in id_mod die Modul-ID, kennzeichnet in id_owner den Huptsächlichen Besitzer (könnte von nutzen sein, damit nur dieser User das Modul ändern darf), und in id_clients wieder die kommaseparierte Liste, wer alles Zugriff hat.
Meine Frage bei der ganzen Sache:
Wo finde ich die Funktionen, die die Module im Modulbereich auflisten?
Zuletzt geändert von rethus am Mi 9. Jul 2008, 15:23, insgesamt 1-mal geändert.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: Modulzugriff von verschiedenen Mandanten aus...

Beitrag von emergence »

rethus hat geschrieben:Wo finde ich die Funktionen, die die Module im Modulbereich auflisten?
-> includes/include.mod_overview.php
*** make your own tools (wishlist :: thx)
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Danke. Hab nun auch die verantwortlichen Zeilen mal eingegrenzt. Es ist von Zeile 140 bis Zeile 208 :

Code: Alles auswählen

// Build list for left_bottom considering filter values
$mlist 			= new UI_Menu;
$sOptionModuleCheck	= getSystemProperty("system", "modulecheck");
$sOptionForceCheck	= getEffectiveSetting("modules", "force-menu-check", "false");
$iMenu			= 0;

$cApiModuleCollection->query();
while ($cApiModule = $cApiModuleCollection->next())
{
	if ($perm->have_perm_item($area, $db->f("idmod")) || $perm->have_perm_area_action("mod_translate", "mod_translation_save") || $perm->have_perm_area_action_item("mod_translate", "mod_translation_save", $cApiModule->get("idmod")))
	{
			$idmod = $cApiModule->get("idmod");

			$link = new cHTMLLink;
			$link->setMultiLink("mod", "", "mod_edit", "");
			$link->setCustom("idmod", $cApiModule->get("idmod"));
			$link->updateAttributes(array ("alt" => $cApiModule->get("description")));
			$link->updateAttributes(array ("title" => $cApiModule->get("description")));
			$link->updateAttributes(array ("style" => "margin-left:5px"));

			$sName = $cApiModule->get("name");

			if ($sOptionModuleCheck !== "false" && $sOptionForceCheck !== "false")
			{
				// Check module and force check has been enabled - check module (surprisingly...)
				$inputok = modTestModule($cApiModule->get("input"), $cApiModule->get("idmod")."i", false);
				$outputok = modTestModule($cApiModule->get("output"), $cApiModule->get("idmod")."o", true);

				if ($inputok && $outputok)		// Everything ok
				{
					$colName = $sName;			// The set default color: none :)
				}
				else if ($inputok || $outputok)	// Input or output has a problem
				{
					$colName = '<font color="#B1AC58">'.$sName.'</font>';
				}
				else							// Input >and< output has a problem
				{
					$colName = '<font color="red">'.$sName.'</font>';
				}
			}
			else
			{
				// Do not check modules (or don't force it) - so, let's take a look into the database 
				$sModuleError = $cApiModule->get("error");
				
				if ($sModuleError == "none")
				{
					$colName = $sName;
				} 
				else if ($sModuleError == "input" || $sModuleError == "output")
				{
					$colName = '<font color="#B1AC58">'.$sName.'</font>';
				} 
				else
				{
					$colName = '<font color="red">'.$sName.'</font>';
				}
			}

			$iMenu ++;

			$mlist->setTitle($iMenu, $colName);
			if ($perm->have_perm_area_action_item("mod_edit", "mod_edit", $db->f("idmod")) || $perm->have_perm_area_action_item("mod_translate", "mod_translation_save", $cApiModule->get("idmod")))
			{
				$mlist->setLink($iMenu, $link);
			}

			$inUse = $classmodule->moduleInUse($idmod);
Irgendwie kann ich aber nicht wirklich was mit den Funktionen anfangen. Wo setze ich denn am beste den Hebel an, um meine Sonderfunktion zu implementieren?

Scheinbar holt die Funktion $cApiModule->get() sämtliche Infos zu den Links aus der DB. Kann mir jemand nen Tipp geben, wo die Funktion implementiert ist? Ich Baum den See vor lauter Wald nicht mehr :?
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Habs gefunden... Zeile 115:
$cApiModuleCollection->setWhere("idclient", $client);
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Ok, haut super hin. Hab es eingebaut, und funzt einfach Klasse :-) Und sind nur 5 Zeilen weiterer Code, und eine um-Typisierung einer Tabellenspalte :lol:

Habe erstmal nur den einfachsten Weg gewählt. Das bedeutet in der Tabelle con_mod die Spalte idclient in den Typen varchar(10) umgewandelt. Dort hab ich dann in die ein oder andere Spalte zu der (bei mir) bestehenden id 4 die id 7 hinzugenommen [id7 ist bei mir ein zweiter Mandant].

steht ein zweiter Mandant drin, haben beide Mandanten auf das Modul Zugriff.

Was noch fehlt, ist eine Plugin, mit dessen Hilfe ich die Module und die dazugehörigen Mandanten schön übersichtlich verwalten kann.

Ich würde Vorschlagen, diese Funktion ins CORE von Contenido zu übernehmen. (als Karteikarte im Frame 3 ... siehe Bild). Also direkt in den Modulbereich, als optionale Möglichkeit, Module flexibel weiter zu verarbeiten. Somit könnte man die Möglichkeit nutzen, standardmäßig wird sie aber nicht genutzt.

Was sagt Ihr?

Was haltet Ihr davon?
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
tinof
Beiträge: 197
Registriert: Mi 24. Jan 2007, 20:38
Wohnort: Kirchberg / Sa.
Kontaktdaten:

Beitrag von tinof »

Hallo,

ok, die Tabelle wird nicht unmöglich viele Module enthalten, trotzdem ändert sich die Abrufgeschwindigkeit meiner Erfahrung nach signifkant, wenn man einen Int in einen Varchar 'wandelt' (Computer denken eben in Zahlen).
Das heißt, man büst hier sicher Performance ein.

Kompromißvorschlag :

idclient = 0 --> Modul steht in allen Mandanten zur Verfügung
sonst wie gewohnt.

Grüße
Tino
Für die Freizeit : www.hobbybrauer.de
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Sicherlich eine interessante Überlegung von dir, dass mit der Performance.
Hast du da definitive Zahlen an der Hand, um wie viel sich die Abrufzeit verlangsamt, oder ist es eine Vermutung aus dem Bauch heraus?

Wie könnten wir das denn Testen?

Eine Abfrage in Kommaseparierter Form hat noch den Vorteil, das einem User gezielt Module zugeordnet werden können. Wenn man z.B. User 1 eine Mitarbeiterverwaltung gestatten will, aber User 2 nicht, kommt man bei deiner Variante schon an die Grenzen. Mit der Kommaseparierten Funktion ist dies ohne weiteres möglich.

Ausserdem kann man nachhalten, wem das Modul gehört (erste Zahl in der Kommaseparierten Liste), und kann ggf. einstellen, das Module nur von diesem User verändert werden können.

Alternativ könnte man die Funktion auch so erweitern, dass User2 der ein Modul, welches sich in Besitz von User1 befindet ändern möchte, im Modulbereich die Möglichkeit hat, dieses Modul als eigene Kopie zu speichern und dieses zu verändern.

Heute kümmere ich mich mal darum, was noch verändert werden muss, damit es im ganzen System läuft (z.B. Templatesystem)
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Ok, hab es nun soweit angepasst.
Hab ich noch was vergessen? Wo wird ausser im Bereich Module und im Bereich Templates noch auf die idclients der Tabelle con_mod zugegriffen?

Wer die Änderungen haben möchte, dem seien die folgenden Diff-Patches ans Herz gelegen:

http://www.suther.de/contenido-modules/ ... H_v_01.zip

PS: Im ZIP-Package ist auch eine kleine Textdatei enthalten, welche Hinweise zur Installation (d.h. einspielen des Patches, und DB-Änderung) geben.

Die Änderungen sind minimal, ggf. auch händisch durchführbar.
Unterstützung könnte ich brauchen, bei der Erstellung einer GUI, die es ermöglicht die Module entsprechend den Mandanten zuzuordnen - da ich Zeitlich sehr ausgelastet bin.

Wer helfen will, bitte per PN melden.

================
WICHTIG:
Ich habe den Patch nochmals angepasst, nun ist automatisch die Clientfähigkeit von Layouts mit drin. (PS:Dran denken auch in der Tabelle con_lay idclients auf carchar(10) zu setzen)
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Gerade fällt mir noch eine sinnvolle Funktion für diese Funktionalität ein.
Wenn jemand nicht Modul, oder Layout - Ersteller war (erste id in idclients), kann er das Layout oder Modul nicht löschen.

Wo ich noch nicht so sicher bin, ist bei der Veränderung des Moduls. Da würde ich ggf. über eine Mandanteneinstellung regeln, ob SharedUser grundsätzlich Veränderungen an den Modulen vornehmen dürfen, oder ob das auch nur der Ersteller des Moduls darf.

Was denkt Ihr?
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

So, für die Layouts habe ich nun eine Funktion eingebaut, welche einem Mandanten, der lediglich für ein Layout freigeschaltet wurde verbietet, das Layout inhaltlich zu ändern. (Falls der Admin aus Versehen Zugriff auf Layouts gegeben haben sollte, oder falls der Kunde auch eigene Layouts/ Moduleanlegen können soll)

Hier mal ein Bild dazu:

Ein Modul, welches nicht geändert werden darf:
Bild
Bild

Darf ein Mandant das Modul ändern, sieht alles wie gewohnt aus.
Übrigens, die Performance hat sich - rein fühlbar - in keinster Weise durch das ändern der Tabellen von int(19) in varchar(19) verändert.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Kann mir noch jemand sagen, wie ich eine weitere Karteikarte (siehe oberes Bild "Bearbeiten,Historie,Übersetzung,Package) hinzufpgen kann, um dort die Modulverteilung anzusiedeln?

Oder würdet Ihr es für sinnvoller halten, wenn dafür unter Extras ein Plugin erstellt würde?
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

HINWEIS:
Bei der Nutzung von mandantenübergreifenden - Layouts sollte bedacht werden, das beim Anlegen eines Layouts die Grafikdateien (insofern mit der Dateiverwaltung hochgeladen) nur für den Mandanten bereitstehen, der die Grafiken hochgeladen hat.

Hier geh ich aber davon aus, dass die Layouts einmal im Server-System installiert werden. Daher würde ich so vorgehen, dass die Grafiken in einem gesonderten Verzeichnis zu finden sind, auf welches alle Mandanten Zugriff haben, welches aber nicht im Contenido-Backend-Bereich liegt (Thema Sicherheit)

Also erzeuge ich ein Verzeichnis für die Layouts (z.B. layouts) oberhalb vom Contenido-Backend-Verzeichnis.
Im Layout dann einfach die Variable $img definieren und den Bildern vorschalten:
  1. <?php img = str_replace("contenido","layouts",$cfg['path']['contenido_fullhtml']);?>
  2. <img="<?php echo $img;?>header.jpg" alt=....... >
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Modul und Layout-Zugriff von verschiedenen Mandanten aus

Beitrag von rethus »

Mal einfach ne Frage ins Blaue hier:

Besteht überhaupt Interesse, dass der Core-Code von Contenido so aufgemotzt wird, dass man Layouts und Module an beliebige Mandanten zuteilen kann?

Würde mich natürlich sehr freuen, da ich dann nicht der einzige bin, der da dran rumbastelt... und ich müsste nicht bei jedem Upgrade mit entsprechenden Diff-patches jonglieren.


Also, Rückmeldung (auch von 4fb) erwünscht ;)
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
Gesperrt