aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/develop/add_permissions.php
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2009-10-04 18:14:59 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2009-10-04 18:14:59 +0000
commit2e17e448deed073f8614bb555a8ef20c57291c2a (patch)
tree533007e53d3584d0887b0f639d0e673b1e15ea7a /phpBB/develop/add_permissions.php
parentbf8ac19eaa8d74f9dfd6d597190f5664e7339382 (diff)
downloadforums-2e17e448deed073f8614bb555a8ef20c57291c2a.tar
forums-2e17e448deed073f8614bb555a8ef20c57291c2a.tar.gz
forums-2e17e448deed073f8614bb555a8ef20c57291c2a.tar.bz2
forums-2e17e448deed073f8614bb555a8ef20c57291c2a.tar.xz
forums-2e17e448deed073f8614bb555a8ef20c57291c2a.zip
Copy 3.0.x branch to trunk
git-svn-id: file:///svn/phpbb/trunk@10211 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/develop/add_permissions.php')
-rw-r--r--phpBB/develop/add_permissions.php417
1 files changed, 417 insertions, 0 deletions
diff --git a/phpBB/develop/add_permissions.php b/phpBB/develop/add_permissions.php
new file mode 100644
index 0000000000..035c23f49c
--- /dev/null
+++ b/phpBB/develop/add_permissions.php
@@ -0,0 +1,417 @@
+<?php
+// -------------------------------------------------------------
+//
+// $Id$
+//
+// FILENAME : add_permissions.php
+// STARTED : Sat Nov 06, 2004
+// COPYRIGHT : © 2004 phpBB Group
+// WWW : http://www.phpbb.com/
+// LICENCE : GPL vs2.0 [ see /docs/COPYING ]
+//
+// -------------------------------------------------------------
+
+//
+// Security message:
+//
+// This script is potentially dangerous.
+// Remove or comment the next line (die(".... ) to enable this script.
+// Do NOT FORGET to either remove this script or disable it after you have used it.
+//
+die("Please read the first lines of this script for instructions on how to enable it");
+
+
+// This script adds missing permissions
+$db = $dbhost = $dbuser = $dbpasswd = $dbport = $dbname = '';
+
+define('IN_PHPBB', 1);
+define('ANONYMOUS', 1);
+$phpEx = substr(strrchr(__FILE__, '.'), 1);
+$phpbb_root_path='./../';
+include($phpbb_root_path . 'config.'.$phpEx);
+require($phpbb_root_path . 'includes/acm/acm_' . $acm_type . '.'.$phpEx);
+require($phpbb_root_path . 'includes/db/' . $dbms . '.'.$phpEx);
+include($phpbb_root_path . 'includes/functions.'.$phpEx);
+
+define('ACL_NEVER', 0);
+define('ACL_YES', 1);
+define('ACL_NO', -1);
+
+define('ACL_GROUPS_TABLE', $table_prefix.'acl_groups');
+define('ACL_OPTIONS_TABLE', $table_prefix.'acl_options');
+define('ACL_USERS_TABLE', $table_prefix.'acl_users');
+define('GROUPS_TABLE', $table_prefix.'groups');
+define('USERS_TABLE', $table_prefix.'users');
+
+$cache = new acm();
+$db = new sql_db();
+
+// Connect to DB
+$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
+
+// auth => is_local, is_global
+$f_permissions = array(
+ 'f_' => array(1, 0),
+ 'f_list' => array(1, 0),
+ 'f_read' => array(1, 0),
+ 'f_post' => array(1, 0),
+ 'f_reply' => array(1, 0),
+ 'f_edit' => array(1, 0),
+ 'f_user_lock' => array(1, 0),
+ 'f_delete' => array(1, 0),
+ 'f_bump' => array(1, 0),
+ 'f_poll' => array(1, 0),
+ 'f_vote' => array(1, 0),
+ 'f_votechg' => array(1, 0),
+ 'f_announce'=> array(1, 0),
+ 'f_sticky' => array(1, 0),
+ 'f_attach' => array(1, 0),
+ 'f_download'=> array(1, 0),
+ 'f_icons' => array(1, 0),
+ 'f_bbcode' => array(1, 0),
+ 'f_smilies' => array(1, 0),
+ 'f_img' => array(1, 0),
+ 'f_flash' => array(1, 0),
+ 'f_sigs' => array(1, 0),
+ 'f_search' => array(1, 0),
+ 'f_email' => array(1, 0),
+ 'f_print' => array(1, 0),
+ 'f_ignoreflood' => array(1, 0),
+ 'f_postcount' => array(1, 0),
+ 'f_noapprove'=> array(1, 0),
+ 'f_report' => array(1, 0),
+ 'f_subscribe' => array(1, 0),
+);
+
+$m_permissions = array(
+ 'm_' => array(1, 1),
+ 'm_edit' => array(1, 1),
+ 'm_delete' => array(1, 1),
+ 'm_move' => array(1, 1),
+ 'm_lock' => array(1, 1),
+ 'm_split' => array(1, 1),
+ 'm_merge' => array(1, 1),
+ 'm_approve' => array(1, 1),
+ 'm_unrate' => array(1, 1),
+ 'm_auth' => array(1, 1),
+ 'm_ip' => array(1, 1),
+ 'm_info' => array(1, 1),
+);
+
+$a_permissions = array(
+ 'a_' => array(0, 1),
+ 'a_server' => array(0, 1),
+ 'a_board' => array(0, 1),
+ 'a_clearlogs' => array(0, 1),
+ 'a_words' => array(0, 1),
+ 'a_icons' => array(0, 1),
+ 'a_bbcode' => array(0, 1),
+ 'a_attach' => array(0, 1),
+ 'a_email' => array(0, 1),
+ 'a_styles' => array(0, 1),
+ 'a_user' => array(0, 1),
+ 'a_useradd' => array(0, 1),
+ 'a_userdel' => array(0, 1),
+ 'a_ranks' => array(0, 1),
+ 'a_ban' => array(0, 1),
+ 'a_names' => array(0, 1),
+ 'a_group' => array(0, 1),
+ 'a_groupadd'=> array(0, 1),
+ 'a_groupdel'=> array(0, 1),
+ 'a_forum' => array(0, 1),
+ 'a_forumadd'=> array(0, 1),
+ 'a_forumdel'=> array(0, 1),
+ 'a_prune' => array(0, 1),
+ 'a_auth' => array(0, 1),
+ 'a_authmods'=> array(0, 1),
+ 'a_authadmins' => array(0, 1),
+ 'a_authusers' => array(0, 1),
+ 'a_authgroups' => array(0, 1),
+ 'a_authdeps'=> array(0, 1),
+ 'a_backup' => array(0, 1),
+ 'a_restore' => array(0, 1),
+ 'a_search' => array(0, 1),
+ 'a_events' => array(0, 1),
+ 'a_cron' => array(0, 1),
+);
+
+$u_permissions = array(
+ 'u_' => array(0, 1),
+ 'u_sendemail' => array(0, 1),
+ 'u_readpm' => array(0, 1),
+ 'u_sendpm' => array(0, 1),
+ 'u_sendim' => array(0, 1),
+ 'u_hideonline' => array(0, 1),
+ 'u_viewonline' => array(0, 1),
+ 'u_viewprofile' => array(0, 1),
+ 'u_chgavatar' => array(0, 1),
+ 'u_chggrp' => array(0, 1),
+ 'u_chgemail' => array(0, 1),
+ 'u_chgname' => array(0, 1),
+ 'u_chgpasswd' => array(0, 1),
+ 'u_chgcensors' => array(0, 1),
+ 'u_search' => array(0, 1),
+ 'u_savedrafts' => array(0, 1),
+ 'u_download' => array(0, 1),
+ 'u_attach' => array(0, 1),
+ 'u_sig' => array(0, 1),
+ 'u_pm_attach' => array(0, 1),
+ 'u_pm_bbcode' => array(0, 1),
+ 'u_pm_smilies' => array(0, 1),
+ 'u_pm_download' => array(0, 1),
+ 'u_pm_edit' => array(0, 1),
+ 'u_pm_printpm' => array(0, 1),
+ 'u_pm_emailpm' => array(0, 1),
+ 'u_pm_forward' => array(0, 1),
+ 'u_pm_delete' => array(0, 1),
+ 'u_pm_img' => array(0, 1),
+ 'u_pm_flash' => array(0, 1),
+);
+
+echo "<p><b>Determining existing permissions</b></p>\n";
+
+$sql = 'SELECT auth_option_id, auth_option FROM ' . ACL_OPTIONS_TABLE;
+$result = $db->sql_query($sql);
+
+$remove_auth_options = array();
+while ($row = $db->sql_fetchrow($result))
+{
+ if (!in_array($row['auth_option'], array_keys(${substr($row['auth_option'], 0, 2) . 'permissions'})))
+ {
+ $remove_auth_options[$row['auth_option']] = $row['auth_option_id'];
+ }
+ unset(${substr($row['auth_option'], 0, 2) . 'permissions'}[$row['auth_option']]);
+}
+$db->sql_freeresult($result);
+
+if (sizeof($remove_auth_options))
+{
+ $db->sql_query('DELETE FROM ' . ACL_USERS_TABLE . ' WHERE auth_option_id IN (' . implode(', ', $remove_auth_options) . ')');
+ $db->sql_query('DELETE FROM ' . ACL_GROUPS_TABLE . ' WHERE auth_option_id IN (' . implode(', ', $remove_auth_options) . ')');
+ $db->sql_query('DELETE FROM ' . ACL_OPTIONS_TABLE . ' WHERE auth_option_id IN (' . implode(', ', $remove_auth_options) . ')');
+
+ echo '<p><b>Removed the following auth options... [<i>' . implode(', ', array_keys($remove_auth_options)) . "</i>]</b></p>\n\n";
+}
+
+$prefixes = array('f_', 'a_', 'm_', 'u_');
+
+foreach ($prefixes as $prefix)
+{
+ $var = $prefix . 'permissions';
+ if (sizeof($$var))
+ {
+ foreach ($$var as $auth_option => $l_ary)
+ {
+ $sql_ary = array(
+ 'auth_option' => $auth_option,
+ 'is_local' => $l_ary[0],
+ 'is_global' => $l_ary[1]
+ );
+
+ $db->sql_query('INSERT INTO ' . ACL_OPTIONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
+
+ echo "<p><b>Adding $auth_option...</b></p>\n";
+
+ mass_auth('group', 0, 'guests', $auth_option, ACL_NEVER);
+ mass_auth('group', 0, 'inactive', $auth_option, ACL_NEVER);
+ mass_auth('group', 0, 'inactive_coppa', $auth_option, ACL_NEVER);
+ mass_auth('group', 0, 'registered_coppa', $auth_option, ACL_NEVER);
+ mass_auth('group', 0, 'registered', $auth_option, (($prefix != 'm_' && $prefix != 'a_') ? ACL_YES : ACL_NEVER));
+ mass_auth('group', 0, 'global_moderators', $auth_option, (($prefix != 'a_') ? ACL_YES : ACL_NEVER));
+ mass_auth('group', 0, 'administrators', $auth_option, ACL_YES);
+ mass_auth('group', 0, 'bots', $auth_option, (($prefix != 'm_' && $prefix != 'a_') ? ACL_YES : ACL_NEVER));
+ }
+ }
+}
+
+$sql = 'UPDATE ' . USERS_TABLE . " SET user_permissions = ''";
+$db->sql_query($sql);
+
+$cache->destroy('_acl_options');
+
+echo "<p><b>Done</b></p>\n";
+
+/*
+ $ug_type = user|group
+ $forum_id = forum ids (array|int|0) -> 0 == all forums
+ $ug_id = [int] user_id|group_id : [string] usergroup name
+ $acl_list = [string] acl entry : [array] acl entries
+ $setting = ACL_YES|ACL_NEVER|ACL_NO
+*/
+function mass_auth($ug_type, $forum_id, $ug_id, $acl_list, $setting)
+{
+ global $db;
+ static $acl_option_ids, $group_ids;
+
+ if ($ug_type == 'group' && is_string($ug_id))
+ {
+ if (!isset($group_ids[$ug_id]))
+ {
+ $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . "
+ WHERE group_name = '" . strtoupper($ug_id) . "'";
+ $result = $db->sql_query_limit($sql, 1);
+ $id = (int) $db->sql_fetchfield('group_id', 0, $result);
+ $db->sql_freeresult($result);
+
+ if (!$id)
+ {
+ return;
+ }
+
+ $group_ids[$ug_id] = $id;
+ }
+
+ $ug_id = (int) $group_ids[$ug_id];
+ }
+
+ // Build correct parameters
+ $auth = array();
+
+ if (!is_array($acl_list))
+ {
+ $auth = array($acl_list => $setting);
+ }
+ else
+ {
+ foreach ($acl_list as $auth_option)
+ {
+ $auth[$auth_option] = $setting;
+ }
+ }
+ unset($acl_list);
+
+ if (!is_array($forum_id))
+ {
+ $forum_id = array($forum_id);
+ }
+
+ // Set any flags as required
+ foreach ($auth as $auth_option => $acl_setting)
+ {
+ $flag = substr($auth_option, 0, strpos($auth_option, '_') + 1);
+ if (empty($auth[$flag]))
+ {
+ $auth[$flag] = $acl_setting;
+ }
+ }
+
+ if (!is_array($acl_option_ids) || empty($acl_option_ids))
+ {
+ $sql = 'SELECT auth_option_id, auth_option
+ FROM ' . ACL_OPTIONS_TABLE;
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $acl_option_ids[$row['auth_option']] = $row['auth_option_id'];
+ }
+ $db->sql_freeresult($result);
+ }
+
+ $sql_forum = 'AND a.forum_id IN (' . implode(', ', array_map('intval', $forum_id)) . ')';
+
+ $sql = ($ug_type == 'user') ? 'SELECT o.auth_option_id, o.auth_option, a.forum_id, a.auth_setting FROM ' . ACL_USERS_TABLE . ' a, ' . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $sql_forum AND a.user_id = $ug_id" : 'SELECT o.auth_option_id, o.auth_option, a.forum_id, a.auth_setting FROM ' . ACL_GROUPS_TABLE . ' a, ' . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $sql_forum AND a.group_id = $ug_id";
+ $result = $db->sql_query($sql);
+
+ $cur_auth = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $cur_auth[$row['forum_id']][$row['auth_option_id']] = $row['auth_setting'];
+ }
+ $db->sql_freeresult($result);
+
+ $table = ($ug_type == 'user') ? ACL_USERS_TABLE : ACL_GROUPS_TABLE;
+ $id_field = $ug_type . '_id';
+
+ $sql_ary = array();
+ foreach ($forum_id as $forum)
+ {
+ foreach ($auth as $auth_option => $setting)
+ {
+ $auth_option_id = $acl_option_ids[$auth_option];
+
+ if (!$auth_option_id)
+ {
+ continue;
+ }
+
+ switch ($setting)
+ {
+ case ACL_NO:
+ if (isset($cur_auth[$forum][$auth_option_id]))
+ {
+ $sql_ary['delete'][] = "DELETE FROM $table
+ WHERE forum_id = $forum
+ AND auth_option_id = $auth_option_id
+ AND $id_field = $ug_id";
+ }
+ break;
+
+ default:
+ if (!isset($cur_auth[$forum][$auth_option_id]))
+ {
+ $sql_ary['insert'][] = "$ug_id, $forum, $auth_option_id, $setting";
+ }
+ else if ($cur_auth[$forum][$auth_option_id] != $setting)
+ {
+ $sql_ary['update'][] = "UPDATE " . $table . "
+ SET auth_setting = $setting
+ WHERE $id_field = $ug_id
+ AND forum_id = $forum
+ AND auth_option_id = $auth_option_id";
+ }
+ }
+ }
+ }
+ unset($cur_auth);
+
+ $sql = '';
+ foreach ($sql_ary as $sql_type => $sql_subary)
+ {
+ switch ($sql_type)
+ {
+ case 'insert':
+ switch ($db->sql_layer)
+ {
+ case 'mysql':
+ case 'mysql4':
+ $sql = 'VALUES ' . implode(', ', preg_replace('#^(.*?)$#', '(\1)', $sql_subary));
+ break;
+
+ case 'mssql':
+ case 'sqlite':
+ $sql = implode(' UNION ALL ', preg_replace('#^(.*?)$#', 'SELECT \1', $sql_subary));
+ break;
+
+ default:
+ foreach ($sql_subary as $sql)
+ {
+ $sql = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_setting) VALUES ($sql)";
+ $result = $db->sql_query($sql);
+ $sql = '';
+ }
+ }
+
+ if ($sql != '')
+ {
+ $sql = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_setting) $sql";
+ $result = $db->sql_query($sql);
+ }
+ break;
+
+ case 'update':
+ case 'delete':
+ foreach ($sql_subary as $sql)
+ {
+ $result = $db->sql_query($sql);
+ $sql = '';
+ }
+ break;
+ }
+ unset($sql_ary[$sql_type]);
+ }
+ unset($sql_ary);
+
+}
+
+?> \ No newline at end of file