Gruppenverwaltung - verbotene Plugins

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Ahso, ok. Wie man sieht, ist das Array leer ... :-(:

Code: Select all

PluginPermissions werden geholt.<br />
PluginPermissions wurden geholt: <pre>Array
(
)
</pre><br />
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Ah, na das hilft doch schonmal weiter.

Dans cheint wohl $groups =& serendipity_checkPermission(null, null, 'all'); nichts zurückzuliefern, müsste man mal schauen warum. Kann ich nächste Woche mal anschauen!

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Alles klar, danke Garvin!

Ich frage mich nur, tritt das Problem jetzt nur bei mir auf?
Wie gesagt, ich hatte dieses Problem bei einem regelmäßig aktualisierten Blog und bei einem komplett frisch installierten 1.1 Blog ...
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Ersetze in der include/functions_config.inc.php mal folgende beide funktionen:

Code: Select all

function serendipity_hasPluginPermissions($plugin) {
    static $forbidden = null;
    global $serendipity;

    if (empty($serendipity['authorid'])) {
        echo "AuthorID nicht gesetzt, kann Permission nicht rausfinden<br />\n";
        return true;
    }

    if ($forbidden === null) {
        echo "PluginPermissions werden geholt.<br />\n";
        $forbidden = array();
        $groups =& serendipity_checkPermission(null, null, 'all');
        echo "Groups: <pre>" . print_r($groups) . "<br />\n";
        foreach($groups AS $idx => $group) {
            if ($idx == 'membership') {
                continue;
            }
            foreach($group AS $key => $val) {
                if (substr($key, 0, 2) == 'f_') {
                    $forbidden[$key] = true;
                }
            }
        }
        echo "PluginPermissions wurden geholt: <pre>" . print_r($forbidden, true) . "</pre><br />\n";
    }

    if (isset($forbidden['f_' . $plugin])) {
        echo "Plugin $plugin ist in der Blacklist<br />\n";
        return false;
    } else {
        echo "Plugin $plugin ist nicht in der Blacklist<br />\n";
        return true;
    }
} 

function serendipity_checkPermission($permName, $authorid = null, $returnMyGroups = false) {
    global $serendipity;

    // Define old serendipity permissions
    static $permissions = null;
    static $group = null;

    if (IS_installed !== true) {
        return true;
    }

    if ($permissions === null) {
        $permissions = serendipity_getPermissionNames();
    }

    if ($group === null) {
        $group = array();
    }

    if ($authorid === null) {
        $authorid = $serendipity['authorid'];
    }

    if (!isset($group[$authorid])) {
        $group[$authorid] = serendipity_getPermissions($authorid);
    }

    if ($returnMyGroups) {
        if ($returnMyGroups === 'all') {
            echo "CheckPerm: Liefere alle Gruppen für Autor #$authorid: <pre>" . print_r($group, true) . "</pre><br />\n";
            return $group[$authorid];
        } else {
            return $group[$authorid]['membership'];
        }
    }

    if ($authorid == $serendipity['authorid'] && $serendipity['no_create']) {
        // This no_create user privilege overrides other permissions.
        return false;
    }

    $return = true;

    foreach($group[$authorid] AS $item) {
        if (!isset($item[$permName])) {
            continue;
        }

        if ($item[$permName] === 'true') {
            return true;
        } else {
            $return = false;
        }
    }

    // If the function did not yet return it means there's a check for a permission which is not defined anywhere.
    // Let's use a backwards compatible way.
    if ($return && isset($permissions[$permName]) && in_array($serendipity['serendipityUserlevel'], $permissions[$permName])) {
        return true;
    }

    return false;
}

Das sollte uns noch etwas mehr aufschluss geben.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Hallo Garvin!

Kann es sein, dass der gar nicht in der Gruppenverwaltung die Permissions für die Gruppe 1 ausliest, sondern die der gruppe 3 (Admingruppe)?

Hier das Ergebnis:

Code: Select all

PluginPermissions werden geholt.<br />
CheckPerm: Liefere alle Gruppen für Autor #1: <pre>Array
(
    [1] => Array
        (
            [membership] => Array
                (
                    [3] => 3
                )

            [3] => Array
                (
                    [adminCategories] => true
                    [adminCategoriesDelete] => true
                    [adminCategoriesMaintainOthers] => true
                    [adminComments] => true
                    [adminEntries] => true
                    [adminEntriesMaintainOthers] => true
                    [adminImages] => true
                    [adminImagesAdd] => true
                    [adminImagesDelete] => true
                    [adminImagesDirectories] => true
                    [adminImagesMaintainOthers] => true
                    [adminImagesSync] => true
                    [adminImagesView] => true
                    [adminImagesViewOthers] => true
                    [adminImport] => true
                    [adminPlugins] => true
                    [adminPluginsMaintainOthers] => true
                    [adminTemplates] => true
                    [adminUsers] => true
                    [adminUsersCreateNew] => true
                    [adminUsersDelete] => true
                    [adminUsersEditUserlevel] => true
                    [adminUsersGroups] => true
                    [adminUsersMaintainOthers] => true
                    [adminUsersMaintainSame] => true
                    [blogConfiguration] => true
                    [personalConfiguration] => true
                    [personalConfigurationNoCreate] => true
                    [personalConfigurationRightPublish] => true
                    [personalConfigurationUserlevel] => true
                    [siteConfiguration] => true
                    [userlevel] => 255
                )

        )

)
</pre><br />
Array
(
    [membership] => Array
        (
            [3] => 3
        )

    [3] => Array
        (
            [adminCategories] => true
            [adminCategoriesDelete] => true
            [adminCategoriesMaintainOthers] => true
            [adminComments] => true
            [adminEntries] => true
            [adminEntriesMaintainOthers] => true
            [adminImages] => true
            [adminImagesAdd] => true
            [adminImagesDelete] => true
            [adminImagesDirectories] => true
            [adminImagesMaintainOthers] => true
            [adminImagesSync] => true
            [adminImagesView] => true
            [adminImagesViewOthers] => true
            [adminImport] => true
            [adminPlugins] => true
            [adminPluginsMaintainOthers] => true
            [adminTemplates] => true
            [adminUsers] => true
            [adminUsersCreateNew] => true
            [adminUsersDelete] => true
            [adminUsersEditUserlevel] => true
            [adminUsersGroups] => true
            [adminUsersMaintainOthers] => true
            [adminUsersMaintainSame] => true
            [blogConfiguration] => true
            [personalConfiguration] => true
            [personalConfigurationNoCreate] => true
            [personalConfigurationRightPublish] => true
            [personalConfigurationUserlevel] => true
            [siteConfiguration] => true
            [userlevel] => 255
        )

)
Groups: <pre>1<br />
PluginPermissions wurden geholt: <pre>Array
(
)
</pre><br />
Last edited by ICE on Mon Feb 12, 2007 3:41 pm, edited 1 time in total.
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Hallo Garvin!
Ich habe noch was festgestellt, und zwar:

Es gibt doch auf der Gruppenverwaltungsseite ganz am Anfang ein Optionfeld, wo die Autoren stehen, die Mitglied in dieser Gruppe sind.

Dort werden ja alle Namen von Accounts gelistet, die im Blog registriert sind. Ich habe mich dort nicht angeklickt, weil ich ja der Administrator bin und nicht Mitglied in der Gruppe Redakteur sein muß. Dort ist also nur ein ganz gewöhnlicher Benutzer ausgewählt, der Redakteur sein soll.

Wenn ich mich trotzdem für diese Gruppe auswähle, dann ist das Array auch befüllt und die Permissions werden richtig angewählt und angezeigt, so wie es sein soll. Wähle ich mich aber ab, dann ist das Array leer und die Felder unten sind auch leer. Dann besteht das Problem ...

(Ich merke gerade, ich kann mich selbst gar nicht mehr aus der Gruppe entfernen. Wähle ich mich durch die Tastenkombination STRG und Mausklick ab und speichere das ganze, bleibe ich trotzdem in der Liste der Redakteure angewählt ...
Lösche ich mich per Hand aus der Tabelle serendipity_authorgroups aus der groupid 1 wieder heraus, so besteht das Problem wieder ...)

Sollten die Permissions nicht auch ohne eine Mitgliedschaft in der Gruppe richtig angezeigt werden? Muß ich wirklich in jeder Gruppe Mitglied sein?
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
Sollten die Permissions nicht auch ohne eine Mitgliedschaft in der Gruppe richtig angezeigt werden? Muß ich wirklich in jeder Gruppe Mitglied sein?
Nicht wirklich, das sehe ich als Bug an. Den habe ich gerade im SVN für den nächsten Snapshot gefixt, würde mich freuen wenn Du es dann mal testen kannst.

Das beim abwählen deines usernamen das ganze nicht gespeichert wird, kann ich natürlich auch mal wieder nicht reproduzieren, vielleicht können wir hier auch den Unterschied in unseren Installationen/Usermanagement herausfinden? :)

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Hallo Garvin!
Ok, vielen Dank für die Lösung! Wegen dem anderen Problem: Naklar, können wir schauen!

Dann werde ich mal den nächsten Snapshot installieren (das wird wohl erst morgen gehen) und dann sehen, warum ich mich nicht aus der Redakteurgruppe entfernen kann ...

gruß
Martin
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Hallo Garvin!
So, neues nightly installiert und die Berechtigungsanzeige funktioniert jetzt auch richtig, wenn ich nicht Mitglied der Gruppe bin! Super!

Nun zum anderen Problem:
Wie ich oben schon geschrieben habe, konnte ich mich nicht mehr aus der Gruppe abwählen ... Ich habe mir das noch ein wenig näher angesehen ...

Das Verhalten des Formulars ist so, dass es immer eine Person für die Gruppenzugehörigkeit haben möchte und die gibt er nicht mehr frei.

1. Beispiel: Ist nur eine Person am Blog registriert und man aktiviert sich für die Gruppe Redakteur, dann kann man sich nicht wieder abwählen.

2. Beispiel: Sind zwei Personen am Blog registriert und man aktiviert z.B. beide Personen für die Redakteur Gruppe, so kann man immer nur einen der beiden aus der Gruppe entfernen. Einer bleibt immer in der Gruppe.

Auch ein Bug?
gruß
Martin
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Hm, ich schätze mal das könnte daran liegen dass wenn kein Benutzer in der Gruppe ausgewählt ist, dass dann das POST-Array leer ist, und daher keine Änderungen vorgenommen werden. Das ist eine Sicherheitsmaßnahme, weil früher ganz kluge Leute die Liste leergeklickt haben - und leider auch schwer zu erkennen.

In der Realität sollte es ja eigentlich nicht vorkommen dass eine Gruppe nicht mindestens einen Benutzer hat - sonst würde man ja die Gruppe auch direkt ganz löschen können...?

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

hmm ... naja ... prinzipiell hast Du ja recht ...

das fällt ja wirklich nicht auf, wenn man mehrere Personen im Blog hat. Sonst benutzt man das ja eh nicht ... Das ist mir jetzt auch nur aufgefallen, weil ich das oben genannte Problem nicht auf dem Produktiv Blog getestet hatte sondern in einer frischen Testumgebung mit nur einem Benutzer. Sonst wäre mir das gar nicht aufgefallen ...
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Hallo Garvin, noch ein Nachtrag:

Kann es sein, dass andere Plugins es auch erwarten, dass der Admin z.B. in allen Gruppen Mitglied ist?

In dem QuickNote Plugin kann ich so nämlich nur für die Administratoren Gruppe Nachrichten hinterlegen. Die anderen Benutzergruppen werden mir in dem Auswahlfeld nämlich nicht angezeigt...

Genauso ist es mit den Quicknote Beiträgen von einem Redakteur. Ich kann die Beiträge als Admin nicht lesen, wenn ich nicht gleichzeitig Mitglied in der Gruppe Redakteur bin ...
Das geht aber nicht, weil die verbotenen Plugins dann auch für mich als Admin gelten ... Da steckt auf jeden Fall noch der Berechtigunswurm drin ;-)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
Kann es sein, dass andere Plugins es auch erwarten, dass der Admin z.B. in allen Gruppen Mitglied ist?

In dem QuickNote Plugin kann ich so nämlich nur für die Administratoren Gruppe Nachrichten hinterlegen. Die anderen Benutzergruppen werden mir in dem Auswahlfeld nämlich nicht angezeigt...
Bei einigen Plugins ist das so, ja. Das QuickNote-Plugin ist da das offensichtlichste, da ist es in der Beschreibung/Konfiguration ja glaub ich auch explizit benannt.

Das die Berechtigungen da reinspielen is natürlich doof, das sehe ich jetzt erst. Tja, da wüsste ich nur nicht wie man das konzeptionell lösen kann.

Und dass man bei quicknotes auch notizen an andere gruppen schicken kann wäre schwierig, weil dann würde ja immer jeder alles sehen...?!

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
ICE
Regular
Posts: 240
Joined: Tue Jun 28, 2005 11:15 pm

Post by ICE »

Hmm ...
Wenn eine Mitgliedschaft in allen Gruppen notwendig ist, wäre eine konzeptionelle Lösung z.B. für den Admin:

- Nur das höchste Verbot gilt!
(Da in der Admingruppe keine Verbote eingetragen sind ==> Keine Beschränkung des auch dort eingetragenen Benutzers...)
Wäre bestimmt die einfachste Lösung ...[/i]
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!
- Nur das höchste Verbot gilt!
(Da in der Admingruppe keine Verbote eingetragen sind ==> Keine Beschränkung des auch dort eingetragenen Benutzers...)
Wäre bestimmt die einfachste Lösung ...[/i]
Das ist das Problem: "Kein Verbot" wird nicht in der Datenbank gespeichert - es wird kein "Verboten: Nein" gespeichert pro Plugin sondern nur "Verboten: Ja".

Man kann also nicht so einfach prüfen, ob ein Recht NICHT in einer Gruppe gesetzt ist...
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Post Reply