Code: Select all
PluginPermissions werden geholt.<br />
PluginPermissions wurden geholt: <pre>Array
(
)
</pre><br />Code: Select all
PluginPermissions werden geholt.<br />
PluginPermissions wurden geholt: <pre>Array
(
)
</pre><br />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;
}
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 />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.Sollten die Permissions nicht auch ohne eine Mitgliedschaft in der Gruppe richtig angezeigt werden? Muß ich wirklich in jeder Gruppe Mitglied sein?
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.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...
Das ist das Problem: "Kein Verbot" wird nicht in der Datenbank gespeichert - es wird kein "Verboten: Nein" gespeichert pro Plugin sondern nur "Verboten: Ja".- 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]