Gruppe einrichten, welche Templates bearbeiten kann

makemyday
Beiträge: 53
Registriert: Fr 11. Jul 2003, 09:49
Wohnort: Gießen
Kontaktdaten:

Beitrag von makemyday » Sa 27. Nov 2004, 18:25

Bekomme diese Meldung allerdings nur bei einem normalen User ohne adminrechte. Sysadmin erhält ganz normal die Auflistung der Templates.

Bei den Modulen und Layouts funktioniert ebenfalls die Auflistung

makemyday
Beiträge: 53
Registriert: Fr 11. Jul 2003, 09:49
Wohnort: Gießen
Kontaktdaten:

Beitrag von makemyday » Sa 27. Nov 2004, 19:07

Ich habe dem user über ein Gruppe alle Rechte in area gegeben. Ich werde das ganze noch mal auf Linux mit einer anderen Contenido Version testen. Allerdings nicht mehr heute abend, denn das erste Bier hat bereits gut geschmeckt und es werden weiter folgen. Ich werde morgen mal weiter testen und schauen ob ich diesem Fehler auf anderen Systemen reproduzieren kann.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 27. Nov 2004, 19:26

ach ja gefunden...

ist eigentlich ein fehler im
include.tpl.overview.php

da steht nur

Code: Alles auswählen

    if ( $perm->have_perm_item($area, $db->f("idtpl")) ) {         //idarea of area tpl is 12
es wird nur deziert darauf geprüft ob ein recht auf irgendein item gesetzt ist...
und leider nicht ob das recht unter bereiche vorhanden ist...

eigentlich sollte der code so aussehen (4.4.4)

für die 4.4.4

Code: Alles auswählen

    if ( $perm->have_perm_item($area, $db->f("idtpl")) ||
         $perm->have_perm_area_action("tpl" , "tpl_delete") ||
         $perm->have_perm_area_action("tpl" , "tpl_duplicate") ||
         $perm->have_perm_area_action("tpl_edit" , "tpl_edit") ||
         $perm->have_perm_area_action("tpl_edit" , "tpl_new")
     ) {
für die 4.5.x

Code: Alles auswählen

    if ( $perm->have_perm_item($area, $db->f("idtpl")) ||
         $perm->have_perm_area_action("tpl" , "tpl_delete") ||
         $perm->have_perm_area_action("tpl" , "tpl_duplicate") ||
         $perm->have_perm_area_action("tpl_edit" , "tpl_edit") ||
         $perm->have_perm_area_action("tpl_edit" , "tpl_new") ||
         $perm->have_perm_area_action("tpl_visual" , "tpl_visedit")
     ) {
ob
$perm->have_perm_area_action("tpl_edit" , "tpl_new")
wirklich gebraucht wird ist ne andere sache... wenn er das globale recht hat ein template zu erstellen würde er auch alle templates sehen...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 27. Nov 2004, 20:34

ähm da hab ich noch einen wirklich geilen fehler gefunden...

classes/class.backend.php

Code: Alles auswählen

                    if ($perm->have_perm_area_action_item($area, $db->f("name"), $idcat) || $perm->have_perm_area_action($area, $db->f("name"))) {
                        $this->actions[$area][$db->f('name')] = $db->f('code');

                   }
das intressante ist nun das immer $idcat gefragt ist...
die $idtpl etc fallen da durch den rost...

im endeffekt ist es nun so das wenn der user ein recht direkt beim item hat und sonst nirgends die action nicht ausgeführt wird...

nun gut bei der function select einfach nach der global definition folgendes ergänzen:

Code: Alles auswählen

        global $idcat, $idtpl, $idmod, $idlay;

        if (isset($idcat)) {
            $itemid = $idcat;
        } elseif (isset($idtpl)) {
            $itemid = $idtpl;
        } elseif (isset($idmod)) {
            $itemid = $idmod;
        } elseif (isset($idlay)) {
            $itemid = $idlay;
        } else {
            $itemid = 0;
        }
und etwas weiter unten

Code: Alles auswählen

if ($perm->have_perm_area_action_item($area, $db->f("name"), $idcat) || $perm->have_perm_area_action($area, $db->f("name"))) {
ersetzen durch

Code: Alles auswählen

if ($perm->have_perm_area_action_item($area, $db->f("name"), $itemid) || $perm->have_perm_area_action($area, $db->f("name"))) {
damit hat man nun die möglichkeit zu definieren welche werte berücksichtigt werden sollen....

das ist natürlich keine saubere lösung, aber was besseres fällt mir momentan nicht ein...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 28. Nov 2004, 10:25

ach ja sollte auch gleich mit berücksichtigt werden...
-> http://contenido.de/forum/viewtopic.php ... light=perm
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 28. Nov 2004, 10:33

rights.inc.php und grouprights.inc.php

die erklärung am anfang wie der array aussieht ist falsch...

wäre an sich...

Code: Alles auswählen

	/* the right_list array:

	[client] => Array												=> parent area
		(
			[client] => Array										=> area name
				(
					[perm] => client								=> areaname = permission
					[location] => navigation/administration/clients => location for the name in the languagefile only for the main areaid
					[action] => Array
						(
							[0] => client_delete					=> actionnames
						)

				)

			[client_edit] => Array									=> area name
				(
					[perm] => client_edit
					[location] =>
					[action] => Array
						(
							[0] => client_edit
							[1] => client_new
						)

				)

		)

	*/
die funktion saverights() hab ich etwas umgebaut... und vereinfacht...

für rights.inc.php

Code: Alles auswählen

function saverights() {

	global $rights_list, $rights_list_old, $db;
	global $cfg, $userid, $rights_client, $rights_lang;
	global $perm, $sess, $notification;

	//if no checkbox is checked
	if (!is_array($rights_list)) {
		$rights_list = array ();
	}

	/*
	echo "<pre>old:";
	print_r($rights_list_old);
	echo "new:";
	print_r($rights_list);
	echo "</pre>";
	*/

	//search all checks which are not in the new Rights_list for deleting
	$arraydel = array_diff(array_keys($rights_list_old), array_keys($rights_list));
	//search all checks which are not in the Rights_list_old for saving
	$arraysave = array_diff(array_keys($rights_list), array_keys($rights_list_old));

	if (is_array($arraydel)) {

		foreach ($arraydel as $value) {

			$data = explode("|", $value);
			$data[0] = $perm->getIDForArea($data[0]);
			$data[1] = $perm->getIDForAction($data[1]);

			$sql = "DELETE FROM ".$cfg["tab"]["rights"]." WHERE user_id='$userid' AND idclient='$rights_client' AND idlang='$rights_lang' AND idarea='$data[0]' AND idcat='$data[2]' AND idaction='$data[1]' AND type=0";
			$db->query($sql);
			//echo $sql."<br>";

		}
	}

	unset($data);

	//search for all mentioned checkboxes
	if (is_array($arraysave)) {
		foreach ($arraysave as $value) {
			//explodes the key	  it consits	 areait+actionid+itemid
			$data = explode("|", $value);

			// Since areas are stored in a numeric form in the rights table, we have
			// to convert them from strings into numbers

			$data[0] = $perm->getIDForArea($data[0]);
			$data[1] = $perm->getIDForAction($data[1]);

			if (!isset ($data[1])) {
				$data[1] = 0;
			}
			// Insert new right
			$sql = "INSERT INTO ".$cfg["tab"]["rights"]."
						(idright, user_id,idarea,idaction,idcat,idclient,idlang,type)
						VALUES ('".$db->nextid($cfg["tab"]["rights"])."', '$userid','$data[0]','$data[1]','$data[2]','$rights_client','$rights_lang',0)";
			$db->query($sql);
			//echo $sql."<br>";
		}

	}

	$rights_list_old = $rights_list;

	$notification->displayNotification("info", i18n("Changes saved"));

}
für grouprights.inc.php

Code: Alles auswählen

function saverights() {

	global $rights_list, $rights_list_old, $db;
	global $cfg, $groupid, $rights_client, $rights_lang;
	global $perm, $sess, $notification;

	//if no checkbox is checked
	if (!is_array($rights_list)) {
		$rights_list = array ();
	}

	/*
	echo "<pre>old:";
	print_r($rights_list_old);
	echo "new:";
	print_r($rights_list);
	echo "</pre>";
	*/

	//search all checks which are not in the new Rights_list for deleting
	$arraydel = array_diff(array_keys($rights_list_old), array_keys($rights_list));
	//search all checks which are not in the Rights_list_old for saving
	$arraysave = array_diff(array_keys($rights_list), array_keys($rights_list_old));

	if (is_array($arraydel)) {

		foreach ($arraydel as $value) {

			$data = explode("|", $value);
			$data[0] = $perm->getIDForArea($data[0]);
			$data[1] = $perm->getIDForAction($data[1]);

			$sql = "DELETE FROM ".$cfg["tab"]["rights"]." WHERE user_id='$groupid' AND idclient='$rights_client' AND idlang='$rights_lang' AND idarea='$data[0]' AND idcat='$data[2]' AND idaction='$data[1]' AND type=1";
			$db->query($sql);
			//echo $sql."<br>";

		}
	}

	unset($data);

	//search for all mentioned checkboxes
	if (is_array($arraysave)) {
		foreach ($arraysave as $value) {
			//explodes the key	  it consits	 areait+actionid+itemid
			$data = explode("|", $value);

			// Since areas are stored in a numeric form in the rights table, we have
			// to convert them from strings into numbers

			$data[0] = $perm->getIDForArea($data[0]);
			$data[1] = $perm->getIDForAction($data[1]);

			if (!isset ($data[1])) {
				$data[1] = 0;
			}
			// Insert new right
			$sql = "INSERT INTO ".$cfg["tab"]["rights"]."
						(idright, user_id,idarea,idaction,idcat,idclient,idlang, type)
						VALUES ('".$db->nextid($cfg["tab"]["rights"])."', '$groupid','$data[0]','$data[1]','$data[2]','$rights_client','$rights_lang',1)";
			$db->query($sql);
			//echo $sql."<br>";
		}

	}
	$rights_list_old = $rights_list;

	$notification->displayNotification("info", i18n("Changes saved"));

}
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 28. Nov 2004, 10:40

und nun zu letzten teil:

das mit $rights_list_old das manchmal rechte gespeichert werden und manchmal nicht...

rights.area.inc.php

vor

Code: Alles auswählen

if (($perm->have_perm_area_action($area, $action)) && ($action == "user_edit")) {
	saverights();
} else {
	if (!$perm->have_perm_area_action($area, $action)) {
		$notification->displayNotification("error", i18n("Permission denied"));
	}
}
folgendes setzen...

Code: Alles auswählen

//set the areas which are in use fore selecting these

$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='$userid' AND idclient='$rights_client' AND idlang='$rights_lang' AND idcat='0' AND A.idaction = C.idaction AND A.idarea = B.idarea";
$db->query($sql);
$rights_list_old = array ();
while ($db->next_record()) { //set a new rights list fore this user
	$rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x";
}
der untere teil

Code: Alles auswählen

//If rights_list is not set or you browse from a other site    make a new rights_list from this user
if(!isset($rights_list_old)||$action==""||!isset($action)){
...
}
komplett raus...

die änderungen in der grouprights.area.inc.php sind ident... bis auf
das query:

Code: Alles auswählen

user_id='$userid' 
muss

Code: Alles auswählen

user_id='$groupid' 
sein
Zuletzt geändert von emergence am So 28. Nov 2004, 10:50, insgesamt 1-mal geändert.
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 28. Nov 2004, 10:49

das mit $rights_old_list bei den anderen dateien...

rights_tpl.inc.php
rights_con.inc.php
rights_lay.inc.php
rights_mod.inc.php
rights_str.inc.php

am beginn

für tpl

Code: Alles auswählen

//set the areas which are in use fore selecting these
$possible_area = "'".implode("','", $area_tree[showareas("tpl")])."'";
$sql = "SELECT A.idarea, A.idaction, A.idcat, B.name, C.name FROM ".$cfg["tab"]["rights"]." AS A, ".$cfg["tab"]["area"]." AS B, ".$cfg["tab"]["actions"]." AS C WHERE user_id='$userid' AND idclient='$rights_client' AND A.type = 0 AND idlang='$rights_lang' AND B.idarea IN ($possible_area) AND idcat!='0' AND A.idaction = C.idaction AND A.idarea = C.idarea AND A.idarea = B.idarea";
$db->query($sql);
$rights_list_old = array ();
while ($db->next_record()) { //set a new rights list fore this user
	$rights_list_old[$db->f(3)."|".$db->f(4)."|".$db->f("idcat")] = "x";
}
bei con, lay, mod, str
showareas("tpl") anpassen...

der teil mit

Code: Alles auswählen

//If rights_list is not set or you browse from a other site    make a new rights_list from this user 
if(!isset($rights_list_old)||$action==""||!isset($action)){ 
... 
}
fliegt jedesmal raus...

der unterschied bei den grouprights_*.inc.php liegt einfach nur darin das im query

Code: Alles auswählen

user_id='$userid'
geändert werden muss auf

Code: Alles auswählen

user_id='$groupid'
und

Code: Alles auswählen

A.type = 0
muss auf

Code: Alles auswählen

A.type = 1
geändert werden...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 29. Nov 2004, 11:48

jetzt hab ich mittlerweile das ganze rechtesystem verstanden...
zum debuggen ist es wirklich ne katastrophe..

ein paar anmerkungen mal allgemein dazu...

die idee die dahintersteht ist ja nicht schlecht...

sämtliche rechte die gesetzt wurden, werden via ja
$perm->load_permissions();
initialisiert... (conlib/perm.inc)

dabei werden zwei arrays generiert
einmal
$area_rights
und
$item_rights

zusätzlich gibts die nette datei classes/class.backend.php

die nun dafür verantwortlich ist das die actions ausgeführt werden falls der benutzer ein recht darauf hat...

in der class.backend gibts ja die debug funktion die ja recht auskunftsfreudig ist, aber beim debuggen der berechtigungen nicht sonderlich hilfreich ist, da nicht angezeigt wird ob das in action gespeicherte recht nun wirklich ausgeführt ist...

ich hab mir dazu folgendes in der main.php zum debuggen dazugebaut...

Code: Alles auswählen

if (isset($action) && $backend->getCode($action) != '') {

    eval($backend->getCode($action));
}
ersetzen durch

Code: Alles auswählen

if (isset($action)) {
    if ($backend->getCode($action) != '') {
        if ($backend->debug == 1) {
            echo '<pre style="font-family: verdana; font-size: 10px"><b>Executing:</b>'."\n";
            echo $backend->getCode($action)."\n";
            echo '</pre>';
        }
        eval($backend->getCode($action));
    } else {
        if ($backend->debug == 1) {
            echo '<pre style="font-family: verdana; font-size: 10px"><b>Executing:</b>'."\n";
            echo "no code available in action\n";
            echo '</pre>';
        }
    }
}
beim aufräumen ist mir da ein nettes problem aufgefallen...
sagen wir mal der benutzer hat das recht auf den bereich template
und bei einem template selbst das recht ein template zu erstellen...
sollte man annehmen das dies funktionieren sollte... (tuts aber nicht..)

es gibt in der klasse perm keine möglichkeit herzuleiten ob bei einem x-beliebigen element ein recht gesetzt ist und die aktion dann zu erlauben...

ich hab mir jetzt in der perm.inc noch folgendes eingebaut

Code: Alles auswählen

	function have_perm_area_action_anyitem($area, $action = 0) {

        if ($this->have_perm_area_action($area,$action)) {
            return true;
        }

		$area = $this->getIDForArea($area);
		$action = $this->getIDForAction($action);

		global $item_rights;

		if (isset($item_rights[$area][$action])) {
		    return true;
		} else {
		    return false;
		}

	}
damit funktioniert das nämlich...

um jetzt auf das beispiel mit tpl zurückzukommen...
bei include.tpl_edit_form.php

sollte die erste zeile wie folgt aussehen... ***

Code: Alles auswählen

if (($action == "tpl_new") && (!$perm->have_perm_area_action_anyitem($area, $action)))
ansonsten kommt nämlich permission denied...

weiters in functions.tpl.php
bei function tplEditTemplate

stollte am schluss

Code: Alles auswählen

        //******** if layout is changed stay at 'tpl_edit' otherwise go to 'tpl'
        if ($changelayout != 1) {
            $url = $sess->url("main.php?area=tpl_edit&idtpl=$idtpl&frame=4");
            header("location: $url");
        }

        return $idtpl;
stehen...

sonst hebelt das den backend debug modus aus... da header nicht ausgeführt wird und $idtpl in dem fall leer wäre...

und nun zum wirklich intressanten teil in der class.backend.php
es ist zwingend erforderlich das die rechte beim erstellen eines neuen elements hergeleitet werden...
man sollte annehmen das die via tpl_new, mod_new, lay_new gemacht werden sollte...
dem ist aber nicht so...

Code: Alles auswählen

                # Save the action only access to
                # the desired action is granted.
                # If this action is relevant for rights
                # check if the user has permission to
                # execute this action
                if ($db->f("relevant_action") == 1 && $db->f("relevant_area") == 1) {

                    if ($perm->have_perm_area_action_item($area, $db->f("name"), $itemid) || $perm->have_perm_area_action($area, $db->f("name"))) {
                        $this->actions[$area][$db->f('name')] = $db->f('code');
                        
                   } 
                } else {

                    $this->actions[$area][$db->f('name')] = $db->f('code');
                    
                }
sollte ersetzt werden durch

Code: Alles auswählen

                # Save the action only access to
                # the desired action is granted.
                # If this action is relevant for rights
                # check if the user has permission to
                # execute this action

                if ($db->f("relevant_action") == 1 && $db->f("relevant_area") == 1) {

                    if ($perm->have_perm_area_action_item($area, $db->f("name"), $itemid) || $perm->have_perm_area_action($area, $db->f("name"))) {
                        $this->actions[$area][$db->f('name')] = $db->f('code');
                    }

                    if ($itemid == 0) {
                        // itemid not available, since its impossible the get the correct rights out
                        // we only check if userrights are given for these three items on any item
                        if ($action=="mod_edit" || $action=="tpl_edit" || $action=="lay_edit") {
                            if ($perm->have_perm_area_action_anyitem($area, $db->f("name"))) {
                                $this->actions[$area][$db->f('name')] = $db->f('code');
                            }
                        }
                    }

                } else {
                    $this->actions[$area][$db->f('name')] = $db->f('code');

                }
***
ident zu setzen bei include.mod_edit_form.php, include.lay_edit_form.php

ich schätze mal das der einbau in den snapshot für alle änderungen ca. 2 stunden mit tests in anspruch nehmen wird...

wie auch immer:
bei der gestaltung eines neuen rechte systems müsste man wirklich alles umbauen... ich hab mir gedacht solange ich das alte nicht ganz verstanden hab bringts das nicht wirklich...
hauptproblem ist natürlich das herleiten von rechten bei den einzelnen items... wie man das wirklich elegant machen könnte ?? keine ahnung
denke aber nicht das es via generic db einfacher aufbaubar wäre...

ad. windows rechte system
gibts da irgendwo im netz ne info wie das aufgebaut ist ?
Zuletzt geändert von emergence am Di 30. Nov 2004, 14:29, insgesamt 1-mal geändert.
*** make your own tools (wishlist :: thx)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Mo 29. Nov 2004, 12:02

emergence hat geschrieben:ad. windows rechte system
gibts da irgendwo im netz ne info wie das aufgebaut ist ?
Keine Ahnung, aber so grob gesprochen funktioniert das so:

Jedes "Objekt" (also Verzeichnis oder File) hat Berechtigungen (nicht nur lesen und schreiben, sondern auch "Spezialberechtigungen" sind möglich). Weiterhin ist es recht elegant gelöst:

Möchte man von einem Objekt wissen, welche Rechte es hat, dann macht man einen Rechtsklick drauf und sieht, welche Berechtigungen für das Objekt aktiv sind und welche eingestellt wurden. Weiterhin kann man entweder explizit zulassen oder sperren, egal, was das übergeordnete Objekt für Berechtigungen hat - alles auf Benutzer- oder Gruppenbasis.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 29. Nov 2004, 12:30

timo hat geschrieben:Jedes "Objekt" (also Verzeichnis oder File) hat Berechtigungen (nicht nur lesen und schreiben, sondern auch "Spezialberechtigungen" sind möglich). Weiterhin ist es recht elegant gelöst:

Möchte man von einem Objekt wissen, welche Rechte es hat, dann macht man einen Rechtsklick drauf und sieht, welche Berechtigungen für das Objekt aktiv sind und welche eingestellt wurden. Weiterhin kann man entweder explizit zulassen oder sperren, egal, was das übergeordnete Objekt für Berechtigungen hat - alles auf Benutzer- oder Gruppenbasis.
hmm... das hört sich nach einem komplett anders aufgebauten cms an...
nein scherz bei seite...
d.h. jedes objekt das angelegt wird bekommt einen grundstock an berechtigungen...
definiert über gruppen... zb sysadmin, admin
area definition + read, write, delete, modify
auf jedes objekt ? na hurra...
wenn es da mal die berechtigungstabelle zusammenlegt kann man sich die hand schütteln...
nimmt man das system wie im alten rechten system her als super user landet man fast wieder beim selben schlamassel...

ich kann mir das momentan noch nicht einfacher vorstellen... ich meine jetzt umsetzungstechnisch...

andere variation: die berechtigungen mit den funktionen zu koppeln...
aber ist auch immens kompliziert , da land ich beim action prinzip... egal...

aber eines ist klar, es muss ne vereinfachung vom system her...

gibt eigentlich schon mehr als die idee, dass es wie das windows berechtigungssystem funktionieren sollte ? eventuell den ansatz eines schriftlichen konzepts ? wenn nein sollten wir eines erstellen...

ich mach mal nen thread in development auf...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 30. Nov 2004, 15:26

noch ne ergänzung für die class.backend.php
-> http://www.contenido.de/forum/viewtopic ... 8491#28491
*** make your own tools (wishlist :: thx)

makemyday
Beiträge: 53
Registriert: Fr 11. Jul 2003, 09:49
Wohnort: Gießen
Kontaktdaten:

Beitrag von makemyday » Di 30. Nov 2004, 16:20

Ich hab auch noch mal ein bißchen rumgetestet. Totz diesem Fehler, den ich pro Template 1x im linken Fenster der Templatebearbeitung bekomme, funktioniert alles:

Warning: Invalid argument supplied for foreach() in /var/www/contenido-4.4.4/conlib/perm.inc on line 426

Ich hatte gestern ein sehr sehr komisches Verhalten entdeckt, kann es aber heute nicht reproduzieren. Melde mich wenn es noch mal auftaucht. Er hat mir nämlich alle Rechte der area gelöscht nachdem ich die Rechte für einzelne Templates gesetzt hatte. Aber wie gesagt, kann das Verhalten heute nicht mehr reproduzieren.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 30. Nov 2004, 16:25

makemyday hat geschrieben:Ich hab auch noch mal ein bißchen rumgetestet. Totz diesem Fehler, den ich pro Template 1x im linken Fenster der Templatebearbeitung bekomme, funktioniert alles:
gut...

Code: Alles auswählen

Warning: Invalid argument supplied for foreach() in /var/www/contenido-4.4.4/conlib/perm.inc on line 426
anscheinend wird an dieser position kein array an die foreach schleife geschickt...
poste mal die klassen funktion die es betrifft...
*** make your own tools (wishlist :: thx)

makemyday
Beiträge: 53
Registriert: Fr 11. Jul 2003, 09:49
Wohnort: Gießen
Kontaktdaten:

Beitrag von makemyday » Di 30. Nov 2004, 21:48

Fehler tritt auf in Contenido_Perm:have_perm_item

und zwar ist das Array $area_tree['tpl'] leer obwohl ich dem User alle Template Rechte in der Area zugewiesen habe. Wo $area_tree zusammengaut wird konnte ich auf die schnelle nicht nachvollziehen.

Bevor Du Dir aber über diesem Fehler zu viele Gedanken machst sollten wir versuchen den Fehler auf einem anderen System zu reproduzieren. Der Fehler tritt bei mir bei einem "Nicht-Admin-User" auf, unabhängig davon, ob die Rechte über die Gruppe oder die Benutzerebene vergeben wurden.

Gesperrt