Seite 1 von 2
Fehler in perm.inc
Verfasst: Di 27. Mär 2007, 11:57
von Brazo Alkher
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
Verfasst: Di 27. Mär 2007, 12:01
von Brazo Alkher
vielleicht auch doch nicht (also das $value verwendet werden muss)
da jetzt gar kein Kategoriebaum mehr angezeigt wird. Aber zumindest scheint das Skript dann etwas schneller zu laufen ;-P
Verfasst: Di 27. Mär 2007, 12:05
von Brazo Alkher
wenn ich $mainarea verwende, dann bekomme ich wenigstens auch Ergebnisse bei dem Query. aber dann ist das Skript noch langsamer...
Verfasst: Di 27. Mär 2007, 12:32
von emergence
verschoben...
und müsste da $value sein...
Verfasst: Di 27. Mär 2007, 13:09
von Brazo Alkher
also $value ist es definitv nicht da dann der Kategoriebaum immer leer ist
und zwischen $area und $mainarea gibt es kein Unterschied beim Kategorienbaum der angezeigt wird.
Verfasst: Di 27. Mär 2007, 13:23
von emergence
seltsam,
das steckt in einer foreach schleife wo sich dann alles auf $value bezieht ...
die selbe sql abfrage gibts noch in der have_perm_area_action_item
und da bezieht sich alles auf $area (da ist es ja anscheinend richtig)
somit gleich gedacht -> weiter unten gleich gemacht...
Verfasst: Di 27. Mär 2007, 14:28
von Brazo Alkher
an sich ist es auch logisch gesehen richtig
also das $value verwendet wird
das habe ich jetzt auch mit debug meldungen nachvollziehen können.
ich versuche jetzt noch raus zu finden, woran es dann nur liegen kann, das trotzdem dann keine einzige Kategorie mehr im Baum angezeigt wird...
ich melde mich :)
Verfasst: Di 27. Mär 2007, 14:58
von Brazo Alkher
so....
also es MUSS in
perm.inc in der Funktion EDIT:
have_perm_item() $value verwendet werden.
Damit dann aber in
include.con_str_overview.php trotzdem ein Kategoriebaum angezeigt wird muss noch vor der foreach-Schleife
folgende Zeilen eingefügt werden
Code: Alles auswählen
$groupsForUser = $perm->getGroupsForUser($auth->auth['uid']);
$groupsForUser[] = $auth->auth['uid'];
$tmp_userstring = implode('","', $groupsForUser);
damit in der SQL-Abfrage auch ein Ergbeniss kommt
Code: Alles auswählen
$sql = '
SELECT
*
FROM
'.$cfg['tab']['rights'].'
WHERE
user_id IN ("'.$tmp_userstring.'")
AND
idclient = "'.$client.'"
AND
idlang = "'.$lang.'"
AND
idcat = "'.$value->id.'"
';
Nachteil vom ganzen ist: das dann der Kategoriebaum etwa so aussieht, wenn ein User nicht von der untersten Ebene an Rechte für Kategorien / Artikel hat:
vorher sah es nämlich so aus:
dort konnte man die Kategorien zwar anklicken, auf die man keine Rechte hatte, bekam aber dann auf der rechten Seite lediglich "Zugriff verweigert" angezeigt.
Verfasst: Di 27. Mär 2007, 15:02
von Brazo Alkher
jetzt ist das ganze schonmal nen bissl schneller, aber wenn der User die Kategorien (oder Alle) zuklappt, sieht er nix mehr. Ausser klappt wieder mit "Alle Kategorien öffnen" alle wieder auf.
Verfasst: Di 27. Mär 2007, 17:25
von emergence
Brazo Alkher hat geschrieben:so....
also es MUSS in perm.inc in der Funktion have_perm_area_action_item() $value verwendet werden.....
ähm ?? du meinst wohl have_perm_item oder nicht ?
Verfasst: Mi 28. Mär 2007, 08:34
von Brazo Alkher
ähh ja :-)
Verfasst: Mi 28. Mär 2007, 08:53
von emergence
ähm ich hab mir das jetzt mal genauer angesehen und muss sagen ich kann die änderungen ab
nicht nachvollziehen... die zeile finde ich nicht mal...
was
bei einem array bringen soll ist mir auch nicht wirklich klar...
poste am besten mal die ganze methode
function have_perm_item
Verfasst: Do 29. Mär 2007, 14:23
von Brazo Alkher
perm.inc
Code: Alles auswählen
function have_perm_item($mainarea, $itemid)
{
global $cfg, $item_rights, $cfg, $client, $lang, $auth, $area_tree, $sess;
$mainarea = $this->getIDForArea($mainarea);
// if is not admin or sysadmin
if (!$this->have_perm())
{
$db = new DB_Contenido;
$this->showareas($mainarea);
$flg = false;
// check if there are any rights for this areas
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;
elseif (is_array($item_rights[$value]))
{
// if there are any rights
foreach ($item_rights[$value] as $value2)
if (in_array($itemid, $value2))
return true;
}
elseif ($item_rights[$value] != 'noright')
{
$groupsForUser = $this->getGroupsForUser($auth->auth['uid']);
$groupsForUser[] = $auth->auth['uid'];
// else search for rights for this user in this area
$sql = '
SELECT
*
FROM
'.$cfg['tab']['rights'].'
WHERE
user_id IN ("'.implode('","', $groupsForUser).'")
AND
idclient = "'.$client.'"
AND
idlang = "'.$lang.'"
AND
idarea = "'.$value.'"
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[$value] = 'noright';
// set the rights
while ($db->next_record())
{
if ($db->f('idcat') == $itemid)
$flg = true;
$item_rights[$db->f('idarea')][$db->f('idaction')][$db->f('idcat')] = $db->f('idcat');
}
} //end if
} //end foreach
return $flg;
} //end if
return true;
}
include.con_str_overview.php
um folgende Zeilen
Code: Alles auswählen
unset($objects[0]);
foreach ($objects as $key => $value)
dieses:
Code: Alles auswählen
$groupsForUser = $perm->getGroupsForUser($auth->auth['uid']);
$groupsForUser[] = $auth->auth['uid'];
$tmp_userstring = implode('","', $groupsForUser);
unset($objects[0]);
foreach ($objects as $key => $value)
{
# Check global rights
$check_rights = $perm->have_perm_area_action('con', 'con_makestart');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con', 'con_makeonline');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con', 'con_deleteart');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con', 'con_tplcfg_edit');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con', 'con_makecatonline');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con', 'con_changetemplate');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con_editcontent', 'con_editart');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con_editart', 'con_edit');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con_editart', 'con_newart');
if (!$check_rights) $check_rights = $perm->have_perm_area_action('con_editart', 'con_saveart');
# Check rights per cat
if (!$check_rights)
{
# 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);
}
}
Verfasst: So 24. Jun 2007, 19:18
von HerrB
Ähm, vielleicht kann mir jemand kurz helfen:
Der Bug ist noch drin - mit $value ersetzen? Wie ist der Zusammenhang mit str_overview.php?
Gruß
HerrB
Verfasst: Mo 9. Jul 2007, 12:09
von Brazo Alkher
HerrB hat geschrieben:Ähm, vielleicht kann mir jemand kurz helfen:
Der Bug ist noch drin - mit $value ersetzen? Wie ist der Zusammenhang mit str_overview.php?
Gruß
HerrB
die Anpassung in str_overview.php ist notwendig damit ein User mit eingeschränkten Rechten einen Kategoriebaum angezeigt bekommt, wenn die Routine in perm.inc angepasst wurde. Ansonsten sieht der nämlich nix