Kann man das beheben?
Bug im Berechtigungskonzept
Bug im Berechtigungskonzept
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?
Kann man das beheben?
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 ?
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)
keine zeit das zu verifizieren... verschoben nach bugs.... muss man sich ansehen...
*** make your own tools (wishlist :: thx)
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.
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
Sind die Rechte dem Benutzer zugewiesen oder einer Gruppe, in der der Benutzer Mitglied ist?
edit: Frage hat sich erledigt, s.u.
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
perm.inc Zeile 655-662
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)
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
in Verbindung mit Zeile 635-638
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
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);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;
}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
Tono
Habe ich die letzten Ausführungen so richtig verstanden, dass dieser Teil:
komplett durch
und der Fix in der verlinkten Seite ignoriert werden könnte?
Gruß
HerrB
ersetzt werden könnte?
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");
}
Code: Alles auswählen
$check_rights = $value->isCustomAttributeSet("forcedisplay");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
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
Der Fix im verlikten Thread kann ignoriert werden bis auf:
Bei dem von Dir gennanten Teil fehlt oben was in der Art:
sonst stimmt die Klammerung nicht.
Und ersetzt werden soll er durch
Anders formuliert:
Zeile 582-635 löschen.
Ist zwar kein Bug, aber eine Performance-Bremse. Ist in 4.6.23 noch nicht gefixt. Vielleicht hat sich die Zeilennummber geändert.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:dort wird zweimal die Variable $area verwendet, die immer undefiniert ist.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"; }
Wahscheinlich müsste statt dessen die Variable $value verwendet werden, wenn ich die Funktion richtig verstanden habe
Contenido Version 4.6.15
Bei dem von Dir gennanten Teil fehlt oben was in der Art:
Code: Alles auswählen
if (!$check_rights)
{ Und ersetzt werden soll er durch
Code: Alles auswählen
if (!$check_rights)
{
$check_rights = $value->isCustomAttributeSet("forcedisplay");
} Zeile 582-635 löschen.
Bis dann
Tono
Tono