Bug im Berechtigungskonzept

Gesperrt
ReHa
Beiträge: 14
Registriert: Mo 6. Aug 2007, 16:33
Kontaktdaten:

Bug im Berechtigungskonzept

Beitrag von ReHa »

Wird einem Nutzer in ganze bestimmten ausgewählten Unterkategorien nirgends das Recht "Artikel online setzen" erteilt (nur Neuerstellen / Bearbeiten / etc. - aber eben nicht publizieren), so wird diesem Redakteur im Backend kein Navigationsbaum angezeigt :( - Er kann also gar nicht zu dieser Kategorie navigieren, in der er z.B. einen Artikel erstellen können sollte!

Kann man das beheben?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

hmm... merkwürdig...
an sich reicht es frontend zugriff bis zu der kategorie zu vergeben...
tut man das nicht sieht man den verzeichnisbaum nicht...

ad. beheben
es wäre möglich das es bereits eine modifikation dieses verhalten unter bugs4.6 zu finden ist... das weiss ich aber leider nicht mehr genau...
musst dort die beiträge durchsehen...

welche contenido version ?
*** make your own tools (wishlist :: thx)
ReHa
Beiträge: 14
Registriert: Mo 6. Aug 2007, 16:33
Kontaktdaten:

Beitrag von ReHa »

Frontend-Zugriff bis zu der gewünschten Kategorie war selbstverständlich vergeben.

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

Beitrag von emergence »

keine zeit das zu verifizieren... verschoben nach bugs.... muss man sich ansehen...
*** make your own tools (wishlist :: thx)
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Hab das mal ausprobiert: 4.6.23

Bei mir reichen die folgenden Rechte aus, um den Baum anzuzeigen.

Frontendzugriff nur auf die direkte Kategorie (die übergeordneten werden nicht benötigt)
Eines der folgenden: Artikel duplizieren, Startartikel festlegen, Artikel syncronisieren.

Wenn nur Artikel bearbeiten, Neuen Artikel erstellen, Artikeleigenschaften bearbeiten gewährt werden wird die Kategorie nicht angezeigt.


Mit dem Setzten des Rechtes "Artikel syncronisieren" wird man erstmal leben können, wenn man nur eine Sprache hat.
Bis dann
Tono
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Sind die Rechte dem Benutzer zugewiesen oder einer Gruppe, in der der Benutzer Mitglied ist?

edit: Frage hat sich erledigt, s.u.
Zuletzt geändert von tono am Do 27. Dez 2007, 14:18, insgesamt 1-mal geändert.
Bis dann
Tono
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

perm.inc Zeile 655-662

Code: Alles auswählen

			foreach ($area_tree[$mainarea] as $value)
			{
				// if the flag noright is set there are no rights in this area
				if ($item_rights[$value] == "noright")
				{
					return false;

				}

Zeile 660 return false; muss ersetzt werden durch continue;

Die Bearbeitung der foreach-Schleife und der gesamten Funktion darf nicht abgebrochen werden, wenn für die erste area keine Rechte gesetzt sind. Damit werden gesetzte Rechte für weitere Areas ignoriert. Typischerweise sind das subareas in diesem speziellen Fall 'con_editart' und 'con_edit'.

Bei der Suche nach diesem Fehler ist mir ein anderer aufgefallen:

include.con_str_overview.php (Zeile 585 ff)

Code: Alles auswählen

		#Check if any rights are applied to current user or his groups
		$sql = "SELECT *
				FROM ".$cfg["tab"]["rights"]."
				WHERE user_id IN ('".$tmp_userstring."') AND idclient = '$client' AND idlang = '$lang' AND idcat = '".$value->id."'";
		$db->query($sql);
		if ($db->num_rows() != 0)
		{
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_makestart",$value->id);
Da hat jemand unsauber aus perm.inc Zeile 260 kopiert. $tmp_userstring ist in diesem Kontext aber nicht verfügbar und daher immer leer. Deshalb ist auch Zeile 590 immer false, und der anschließende Block wird nie evaluiert.

Dieser Block ist auch überflüssig und kann gelöscht werden. Er bringt keine Ergebnisse, die nicht Zeile 230-233

Code: Alles auswählen

		if ($perm->have_perm_item("con", $item['idcat']))
		{
			$newItem->custom['forcedisplay'] = 1;
		}
in Verbindung mit Zeile 635-638

Code: Alles auswählen

	if (!$check_rights)
	{
         $check_rights = $value->isCustomAttributeSet("forcedisplay");
	}

auch ergeben. Immer wenn eine der Abfragen zwischen 585 und 633 true ergibt, ergibt auch have_perm_item() (mit obigem Fix) true. Ich denke das wurde mal als workarround für den obigen Bug in have_perm_item() eingebaut und ist jetzt obsolet.

Diese beiden Fehler hängen auch zusammen mit diesem Thread: http://contenido.org/forum/viewtopic.php?t=16227
Bis dann
Tono
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Habe ich die letzten Ausführungen so richtig verstanden, dass dieser Teil:

Code: Alles auswählen

		#Check if any rights are applied to current user or his groups
		$sql = "SELECT *
				FROM ".$cfg["tab"]["rights"]."
				WHERE user_id IN ('".$tmp_userstring."') AND idclient = '$client' AND idlang = '$lang' AND idcat = '".$value->id."'";
		$db->query($sql);
		
		if ($db->num_rows() != 0)
		{
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_makestart",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_makeonline",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_deleteart",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_tplcfg_edit",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_makecatonline",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con", "con_changetemplate",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con_editcontent", "con_editart",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con_editart", "con_edit",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con_editart", "con_newart",$value->id);
			}
			if (!$check_rights)
			{
				$check_rights = $perm->have_perm_area_action_item("con_editart", "con_saveart",$value->id);
			}
		}
	}

	if (!$check_rights)
	{
         $check_rights = $value->isCustomAttributeSet("forcedisplay");
	}
komplett durch

Code: Alles auswählen

$check_rights = $value->isCustomAttributeSet("forcedisplay");
und der Fix in der verlinkten Seite ignoriert werden könnte?

Gruß
HerrB
ersetzt werden könnte?
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Der Fix im verlikten Thread kann ignoriert werden bis auf:
Brazo Alkher hat geschrieben:in der Datei perm.inc ist glaube ich in der Funktion have_perm_item() ein Fehler.

und zwar ab Zeile 682 steht:

Code: Alles auswählen

$sql = "SELECT
                        *
                     FROM
                        ".$cfg["tab"]["rights"]."
                     WHERE
                        user_id IN ('".implode("','", $groupsForUser)."') AND
                        idclient = '$client' AND
                        idlang = '$lang' AND
                        idarea = '$area' AND
                        idcat != '0'";
$db->query($sql);

//if there are no rights for this area set the flag norights
if ($db->affected_rows() == 0)
{
	$item_rights[$area] = "noright";
}
dort wird zweimal die Variable $area verwendet, die immer undefiniert ist.

Wahscheinlich müsste statt dessen die Variable $value verwendet werden, wenn ich die Funktion richtig verstanden habe :-)

Contenido Version 4.6.15
Ist zwar kein Bug, aber eine Performance-Bremse. Ist in 4.6.23 noch nicht gefixt. Vielleicht hat sich die Zeilennummber geändert.


Bei dem von Dir gennanten Teil fehlt oben was in der Art:

Code: Alles auswählen

   if (!$check_rights)
   { 
sonst stimmt die Klammerung nicht.
Und ersetzt werden soll er durch

Code: Alles auswählen

   if (!$check_rights)
   {
         $check_rights = $value->isCustomAttributeSet("forcedisplay");
   } 
Anders formuliert:
Zeile 582-635 löschen.
Bis dann
Tono
Gesperrt