From 9c4da2be8af42b390128d29a88d6511891c783a4 Mon Sep 17 00:00:00 2001 From: garvinhicking Date: Sun, 5 Jun 2005 20:39:34 +0000 Subject: [PATCH] ACL group permission setup for Serendipity. Very experimental. I tested it until my head went into flames. Testers very much appreciated. There's a little notice in the docs/NEWs file for future TODOs. I need QA guys who check if the system is exploitable; please read more on the mailinglist. --- docs/NEWS | 14 + include/admin/category.inc.php | 9 +- include/admin/comments.inc.php | 4 +- include/admin/configuration.inc.php | 9 +- include/admin/entries.inc.php | 2 +- include/admin/groups.inc.php | 197 +++++++++ include/admin/images.inc.php | 58 ++- include/admin/import.inc.php | 3 +- include/admin/personal.inc.php | 22 +- include/admin/plugins.inc.php | 12 +- include/admin/templates.inc.php | 2 +- include/admin/upgrader.inc.php | 6 + include/admin/users.inc.php | 140 ++++-- include/functions.inc.php | 29 +- include/functions_comments.inc.php | 6 +- include/functions_config.inc.php | 399 +++++++++++++++++- include/functions_entries.inc.php | 16 +- include/functions_images.inc.php | 14 +- include/functions_installer.inc.php | 69 ++- include/functions_upgrader.inc.php | 47 ++- include/plugin_api.inc.php | 4 +- include/tpl/config_local.inc.php | 64 ++- include/tpl/config_personal.inc.php | 39 +- lang/serendipity_lang_bg.inc.php | 10 + lang/serendipity_lang_cn.inc.php | 10 + lang/serendipity_lang_cs.inc.php | 10 + lang/serendipity_lang_cz.inc.php | 10 + lang/serendipity_lang_da.inc.php | 10 + lang/serendipity_lang_de.inc.php | 10 + lang/serendipity_lang_en.inc.php | 10 + lang/serendipity_lang_es.inc.php | 10 + lang/serendipity_lang_fa.inc.php | 10 + lang/serendipity_lang_fi.inc.php | 10 + lang/serendipity_lang_fr.inc.php | 10 + lang/serendipity_lang_is.inc.php | 10 + lang/serendipity_lang_it.inc.php | 10 + lang/serendipity_lang_ja.inc.php | 10 + lang/serendipity_lang_ko.inc.php | 10 + lang/serendipity_lang_nl.inc.php | 10 + lang/serendipity_lang_no.inc.php | 10 + lang/serendipity_lang_pt.inc.php | 10 + lang/serendipity_lang_ro.inc.php | 10 + lang/serendipity_lang_ru.inc.php | 10 + lang/serendipity_lang_se.inc.php | 10 + lang/serendipity_lang_tn.inc.php | 10 + lang/serendipity_lang_tw.inc.php | 10 + lang/serendipity_lang_zh.inc.php | 10 + .../serendipity_event_entryproperties.php | 89 +++- .../serendipity_event_statistics.php | 2 - serendipity_admin.php | 95 ++++- serendipity_config.inc.php | 2 +- sql/db.sql | 22 + sql/db_update_0.9-alpha2_0.9-alpha3_mysql.sql | 21 + 53 files changed, 1479 insertions(+), 157 deletions(-) create mode 100644 include/admin/groups.inc.php create mode 100644 sql/db_update_0.9-alpha2_0.9-alpha3_mysql.sql diff --git a/docs/NEWS b/docs/NEWS index dc7ea22..58d79de 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -3,6 +3,20 @@ Version 0.9 () ------------------------------------------------------------------------ + * Introduce permission groups with customizable permission sets. + (garvinhicking) + + This Feature is currently declared "unstable" and will definitely + need finetuning before it usable in restricted environments. + TODO: + * Check Plugins like loginform, adduser to use group-functionality. + * Get rid of as many obsolete userlevel checks in the Admin user/groups + panel. + * Chief editors may not join Admin group if forbidden? + * Chief editors may not enter siteConfiguration if forbidden? + + * Make bblog importer recognize trackbacks. Thanks to Hanno! + * Spartacus plugin can now properly handle plugins which contain both sidebar and event plugins in one directory (garvinhicking) diff --git a/include/admin/category.inc.php b/include/admin/category.inc.php index d55a884..066efaa 100644 --- a/include/admin/category.inc.php +++ b/include/admin/category.inc.php @@ -6,11 +6,11 @@ if (IN_serendipity !== true) { die ("Don't hack!"); } -if ($serendipity['no_create']) { +if (!serendipity_checkPermission('adminCategory')) { return; } -$admin_category = ($serendipity['serendipityUserlevel'] < USERLEVEL_CHIEF ? "AND (authorid = 0 OR authorid = " . (int)$serendipity['authorid'] . ")" : ''); +$admin_category = (!serendipity_checkPermission('adminCategoriesMaintainOthers') ? "AND (authorid = 0 OR authorid = " . (int)$serendipity['authorid'] . ")" : ''); /* Add a new category */ if (isset($_POST['SAVE'])) { @@ -108,7 +108,8 @@ if ($serendipity['GET']['adminAction'] == 'doDelete') { = USERLEVEL_CHIEF || $serendipity['authorid'] == $this_cat['authorid'] || $this_cat['authorid'] == '0') { + if ( (serendipity_checkPermission('adminCategoriesDelete') && serendipity_checkPermission('adminCategoriesMaintainOthers')) + || (serendipity_checkPermission('adminCategoriesDelete') && ($serendipity['authorid'] == $this_cat['authorid'] || $this_cat['authorid'] == '0')) ) { ?>

@@ -119,7 +120,7 @@ if ($serendipity['GET']['adminAction'] == 'doDelete') { $cats = serendipity_fetchCategories('all'); /* TODO, show dropdown as nested categories */ foreach ($cats as $cat_data) { - if ($cat_data['categoryid'] != $serendipity['GET']['cid'] && ($serendipity['serendipityUserlevel'] >= USERLEVEL_ADMIN || $cat_data['authorid'] == '0' || $cat_data['authorid'] == $serendipity['authorid'])) { + if ($cat_data['categoryid'] != $serendipity['GET']['cid'] && (serendipity_checkPermission('adminCategoriesMaintainOthers') || $cat_data['authorid'] == '0' || $cat_data['authorid'] == $serendipity['authorid'])) { echo '' . "\n"; } } diff --git a/include/admin/comments.inc.php b/include/admin/comments.inc.php index 32154a2..53a5b0f 100644 --- a/include/admin/comments.inc.php +++ b/include/admin/comments.inc.php @@ -6,7 +6,7 @@ if (IN_serendipity !== true) { die ("Don't hack!"); } -if ($serendipity['no_create']) { +if (!serendipity_checkPermission('adminComments')) { return; } @@ -164,7 +164,7 @@ $sql = serendipity_db_query("SELECT c.*, e.title FROM {$serendipity['dbPrefix']} LEFT JOIN {$serendipity['dbPrefix']}entries e ON (e.id = c.entry_id) WHERE type = '$c_type' ". $and ." - " . (($serendipity['serendipityUserlevel'] != USERLEVEL_ADMIN) ? 'AND e.authorid = ' . (int)$serendipity['authorid'] : '') . " + " . (!serendipity_checkPermission('adminEntriesMaintainOthers') ? 'AND e.authorid = ' . (int)$serendipity['authorid'] : '') . " ORDER BY c.id DESC $limit"); ?>