Merge branch 'master' of https://github.com/phpmyadmin/phpmyadmin into server_refactor2

This commit is contained in:
xmujay 2013-07-16 22:57:21 +08:00
commit ab05e84092
18 changed files with 1043 additions and 75 deletions

View File

@ -25,6 +25,7 @@ phpMyAdmin - ChangeLog
- [core] Dropped support for PHP 5.2.
+ rfe #487 and rfe #1405 Find and Replacing column wise
+ rfe #1373 Use same create view dialog for editing a view
+ rfe #316 Configurable menus; allow user groups with customized menus per group
4.0.5.0 (not yet released)
- bug #3977 Not detected configuration storage

View File

@ -59,6 +59,8 @@ $cfg['Servers'][$i]['AllowNoPassword'] = false;
// $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
// $cfg['Servers'][$i]['recent'] = 'pma__recent';
// $cfg['Servers'][$i]['users'] = 'pma__users';
// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
/* Contrib / Swekey authentication */
// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';

View File

@ -649,6 +649,29 @@ Server connection settings
* put the table name in :config:option:`$cfg['Servers'][$i]['table\_uiprefs']` (e.g.
``pma__table_uiprefs``)
.. _configurablemenus:
.. config:option:: $cfg['Servers'][$i]['users']
:type: string
:default: ``''``
.. config:option:: $cfg['Servers'][$i]['usergroups']
:type: string
:default: ``''``
Since release 4.1.0 you can create different user groups with menu items
attached to them. Users can be assigned to these groups and the logged in
user would only see menu items configured to the usergroup he is assigned to.
To do this it needs two tables "usergroups" (storing allowed menu items for each
user group) and "users" (storing users and their assignments to user groups).
To allow the usage of this functionality:
* set up :config:option:`$cfg['Servers'][$i]['pmadb']` and the phpMyAdmin configuration storage
* put the correct table names in
:config:option:`$cfg['Servers'][$i]['users']` (e.g. ``pma__users``) and
:config:option:`$cfg['Servers'][$i]['usergroups']` (e.g. ``pma__usergroups``)
.. _tracking:
.. config:option:: $cfg['Servers'][$i]['tracking']

View File

@ -45,4 +45,6 @@ foreach ($hosts as $host) {
$cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
}

View File

@ -239,3 +239,66 @@ CREATE TABLE IF NOT EXISTS `pma__userconfig` (
)
COMMENT='User preferences storage for phpMyAdmin'
DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
-- --------------------------------------------------------
--
-- Table structure for table `pma__users`
--
CREATE TABLE IF NOT EXISTS `pma__users` (
`username` varchar(64) NOT NULL,
`usergroup` varchar(64) NOT NULL,
PRIMARY KEY (`username`,`usergroup`)
)
COMMENT='Users and their assignments to user groups'
DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
-- --------------------------------------------------------
--
-- Table structure for table `pma__usergroups`
--
CREATE TABLE IF NOT EXISTS `pma__usergroups` (
`usergroup` varchar(64) NOT NULL,
`server_databases` enum('Y','N') NOT NULL DEFAULT 'N',
`server_sql` enum('Y','N') NOT NULL DEFAULT 'N',
`server_status` enum('Y','N') NOT NULL DEFAULT 'N',
`server_rights` enum('Y','N') NOT NULL DEFAULT 'N',
`server_export` enum('Y','N') NOT NULL DEFAULT 'N',
`server_import` enum('Y','N') NOT NULL DEFAULT 'N',
`server_settings` enum('Y','N') NOT NULL DEFAULT 'N',
`server_binlog` enum('Y','N') NOT NULL DEFAULT 'N',
`server_replication` enum('Y','N') NOT NULL DEFAULT 'N',
`server_vars` enum('Y','N') NOT NULL DEFAULT 'N',
`server_charset` enum('Y','N') NOT NULL DEFAULT 'N',
`server_plugins` enum('Y','N') NOT NULL DEFAULT 'N',
`server_engine` enum('Y','N') NOT NULL DEFAULT 'N',
`db_structure` enum('Y','N') NOT NULL DEFAULT 'N',
`db_sql` enum('Y','N') NOT NULL DEFAULT 'N',
`db_search` enum('Y','N') NOT NULL DEFAULT 'N',
`db_qbe` enum('Y','N') NOT NULL DEFAULT 'N',
`db_export` enum('Y','N') NOT NULL DEFAULT 'N',
`db_import` enum('Y','N') NOT NULL DEFAULT 'N',
`db_operation` enum('Y','N') NOT NULL DEFAULT 'N',
`db_privileges` enum('Y','N') NOT NULL DEFAULT 'N',
`db_routines` enum('Y','N') NOT NULL DEFAULT 'N',
`db_events` enum('Y','N') NOT NULL DEFAULT 'N',
`db_triggers` enum('Y','N') NOT NULL DEFAULT 'N',
`db_tracking` enum('Y','N') NOT NULL DEFAULT 'N',
`db_designer` enum('Y','N') NOT NULL DEFAULT 'N',
`table_browse` enum('Y','N') NOT NULL DEFAULT 'N',
`table_structure` enum('Y','N') NOT NULL DEFAULT 'N',
`table_sql` enum('Y','N') NOT NULL DEFAULT 'N',
`table_search` enum('Y','N') NOT NULL DEFAULT 'N',
`table_insert` enum('Y','N') NOT NULL DEFAULT 'N',
`table_export` enum('Y','N') NOT NULL DEFAULT 'N',
`table_import` enum('Y','N') NOT NULL DEFAULT 'N',
`table_operation` enum('Y','N') NOT NULL DEFAULT 'N',
`table_tracking` enum('Y','N') NOT NULL DEFAULT 'N',
`table_triggers` enum('Y','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`usergroup`)
)
COMMENT='User groups with configured menu items'
DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

View File

@ -225,3 +225,66 @@ CREATE TABLE IF NOT EXISTS `pma__userconfig` (
)
COMMENT='User preferences storage for phpMyAdmin'
COLLATE utf8_bin;
-- --------------------------------------------------------
--
-- Table structure for table `pma__users`
--
CREATE TABLE IF NOT EXISTS `pma__users` (
`username` varchar(64) NOT NULL,
`usergroup` varchar(64) NOT NULL,
PRIMARY KEY (`username`,`usergroup`)
)
COMMENT='Users and their assignments to user groups'
COLLATE utf8_bin;
-- --------------------------------------------------------
--
-- Table structure for table `pma__usergroups`
--
CREATE TABLE IF NOT EXISTS `pma__usergroups` (
`usergroup` varchar(64) NOT NULL,
`server_databases` enum('Y','N') NOT NULL DEFAULT 'N',
`server_sql` enum('Y','N') NOT NULL DEFAULT 'N',
`server_status` enum('Y','N') NOT NULL DEFAULT 'N',
`server_rights` enum('Y','N') NOT NULL DEFAULT 'N',
`server_export` enum('Y','N') NOT NULL DEFAULT 'N',
`server_import` enum('Y','N') NOT NULL DEFAULT 'N',
`server_settings` enum('Y','N') NOT NULL DEFAULT 'N',
`server_binlog` enum('Y','N') NOT NULL DEFAULT 'N',
`server_replication` enum('Y','N') NOT NULL DEFAULT 'N',
`server_vars` enum('Y','N') NOT NULL DEFAULT 'N',
`server_charset` enum('Y','N') NOT NULL DEFAULT 'N',
`server_plugins` enum('Y','N') NOT NULL DEFAULT 'N',
`server_engine` enum('Y','N') NOT NULL DEFAULT 'N',
`db_structure` enum('Y','N') NOT NULL DEFAULT 'N',
`db_sql` enum('Y','N') NOT NULL DEFAULT 'N',
`db_search` enum('Y','N') NOT NULL DEFAULT 'N',
`db_qbe` enum('Y','N') NOT NULL DEFAULT 'N',
`db_export` enum('Y','N') NOT NULL DEFAULT 'N',
`db_import` enum('Y','N') NOT NULL DEFAULT 'N',
`db_operation` enum('Y','N') NOT NULL DEFAULT 'N',
`db_privileges` enum('Y','N') NOT NULL DEFAULT 'N',
`db_routines` enum('Y','N') NOT NULL DEFAULT 'N',
`db_events` enum('Y','N') NOT NULL DEFAULT 'N',
`db_triggers` enum('Y','N') NOT NULL DEFAULT 'N',
`db_tracking` enum('Y','N') NOT NULL DEFAULT 'N',
`db_designer` enum('Y','N') NOT NULL DEFAULT 'N',
`table_browse` enum('Y','N') NOT NULL DEFAULT 'N',
`table_structure` enum('Y','N') NOT NULL DEFAULT 'N',
`table_sql` enum('Y','N') NOT NULL DEFAULT 'N',
`table_search` enum('Y','N') NOT NULL DEFAULT 'N',
`table_insert` enum('Y','N') NOT NULL DEFAULT 'N',
`table_export` enum('Y','N') NOT NULL DEFAULT 'N',
`table_import` enum('Y','N') NOT NULL DEFAULT 'N',
`table_operation` enum('Y','N') NOT NULL DEFAULT 'N',
`table_tracking` enum('Y','N') NOT NULL DEFAULT 'N',
`table_triggers` enum('Y','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`usergroup`)
)
COMMENT='User groups with configured menu items'
COLLATE utf8_bin;

View File

@ -172,6 +172,7 @@ AJAX.registerTeardown('server_privileges.js', function () {
$('form[name=usersForm]').unbind('submit');
$("#fieldset_delete_user_footer #buttonGo.ajax").die('click');
$("a.edit_user_anchor.ajax").die('click');
$("a.edit_user_group_anchor.ajax").die('click');
$("#edit_user_dialog").find("form.ajax").die('submit');
$("button.mult_submit[value=export]").die('click');
$("a.export_user_anchor.ajax").die('click');
@ -300,6 +301,75 @@ AJAX.registerOnload('server_privileges.js', function () {
}); // end $.post()
}); // end Revoke User
$("a.edit_user_group_anchor.ajax").live('click', function (event) {
event.preventDefault();
$(this).parents('tr').addClass('current_row');
var token = $(this).parents('form').find('input[name="token"]').val();
var $msg = PMA_ajaxShowMessage();
$.get(
$(this).attr('href'),
{
'ajax_request': true,
'edit_user_group_dialog': true,
'token': token
},
function (data) {
if (data.success === true) {
PMA_ajaxRemoveMessage($msg);
var buttonOptions = {};
buttonOptions[PMA_messages.strGo] = function () {
var usrGroup = $('#changeUserGroupDialog')
.find('select[name="userGroup"]')
.val();
var $message = PMA_ajaxShowMessage();
$.get(
'server_privileges.php',
$('#changeUserGroupDialog').find('form').serialize() + '&ajax_request=1',
function (data) {
PMA_ajaxRemoveMessage($message);
if (data.success === true) {
$("#usersForm")
.find('.current_row')
.removeClass('current_row')
.find('.usrGroup')
.text(usrGroup);
} else {
PMA_ajaxShowMessage(data.error, false);
$("#usersForm")
.find('.current_row')
.removeClass('current_row');
}
}
);
$(this).dialog("close");
};
buttonOptions[PMA_messages.strClose] = function () {
$(this).dialog("close");
};
var $dialog = $('<div/>')
.attr('id', 'changeUserGroupDialog')
.append(data.message)
.dialog({
width: 500,
minWidth: 300,
modal: true,
buttons: buttonOptions,
title: $('legend', $(data.message)).text(),
close: function () {
$(this).remove();
}
});
$dialog.find('legend').remove();
} else {
PMA_ajaxShowMessage(data.error, false);
$("#usersForm")
.find('.current_row')
.removeClass('current_row');
}
}
);
});
/**
* AJAX handler for 'Edit User'
*

View File

@ -99,17 +99,64 @@ class PMA_Menu
{
$tabs = array();
$url_params = array('db' => $this->_db);
$level = '';
if (strlen($this->_table)) {
$tabs = $this->_getTableTabs();
$url_params['table'] = $this->_table;
$level = 'table';
} else if (strlen($this->_db)) {
$tabs = $this->_getDbTabs();
$level = 'db';
} else {
$tabs = $this->_getServerTabs();
$level = 'server';
}
$allowedTabs = $this->_getAllowedTabs($level);
foreach ($tabs as $key => $value) {
if (! array_key_exists($key, $allowedTabs)) {
unset($tabs[$key]);
}
}
return PMA_Util::getHtmlTabs($tabs, $url_params, 'topmenu', true);
}
/**
* Returns a list of allowed tabs for the current user for the given level
*
* @param string $level 'server', 'db' or 'table' level
*
* @return array list of allowed tabs
*/
private function _getAllowedTabs($level)
{
$allowedTabs = PMA_Util::getMenuTabList($level);
if ($GLOBALS['cfgRelation']['menuswork']) {
$groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
$userTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);
$sql_query = "SELECT * FROM " . $groupTable
. " WHERE `usergroup` = (SELECT usergroup FROM "
. $userTable . " WHERE `username` = '"
. PMA_Util::sqlAddSlashes($GLOBALS['cfg']['Server']['user']) . "')";
$result = PMA_queryAsControlUser($sql_query, false);
if ($result) {
$row = $GLOBALS['dbi']->fetchAssoc($result);
foreach ($allowedTabs as $key => $tab) {
$colName = $level . '_' . $key;
if (isset($row[$colName]) && $row[$colName] == 'N') {
unset($allowedTabs[$key]);
}
}
}
}
return $allowedTabs;
}
/**
* Returns the breadcrumbs as HTML
*
@ -130,21 +177,13 @@ class PMA_Menu
$item = '<a href="%1$s?%2$s" class="item">';
if (in_array(
$GLOBALS['cfg']['TabsMode'],
array('text', 'both')
)
) {
if (in_array($GLOBALS['cfg']['TabsMode'], array('text', 'both'))) {
$item .= '%4$s: ';
}
$item .= '%3$s</a>';
$retval .= "<div id='floating_menubar'></div>";
$retval .= "<div id='serverinfo'>";
if (in_array(
$GLOBALS['cfg']['TabsMode'],
array('icons', 'both')
)
) {
if (in_array($GLOBALS['cfg']['TabsMode'], array('icons', 'both'))) {
$retval .= PMA_Util::getImage(
's_host.png',
'',
@ -161,11 +200,7 @@ class PMA_Menu
if (strlen($this->_db)) {
$retval .= $separator;
if (in_array(
$GLOBALS['cfg']['TabsMode'],
array('icons', 'both')
)
) {
if (in_array($GLOBALS['cfg']['TabsMode'], array('icons', 'both'))) {
$retval .= PMA_Util::getImage(
's_db.png',
'',
@ -187,11 +222,7 @@ class PMA_Menu
include './libraries/tbl_info.inc.php';
$retval .= $separator;
if (in_array(
$GLOBALS['cfg']['TabsMode'],
array('icons', 'both')
)
) {
if (in_array($GLOBALS['cfg']['TabsMode'], array('icons', 'both'))) {
$icon = $tbl_is_view ? 'b_views.png' : 's_tbl.png';
$retval .= PMA_Util::getImage(
$icon,
@ -444,11 +475,9 @@ class PMA_Menu
{
$is_superuser = isset($GLOBALS['dbi']) && $GLOBALS['dbi']->isSuperuser();
$binary_logs = null;
if (isset($GLOBALS['dbi'])
&& (! defined('PMA_DRIZZLE')
|| (defined('PMA_DRIZZLE') && ! PMA_DRIZZLE)
)
) {
$notDrizzle = ! defined('PMA_DRIZZLE')
|| (defined('PMA_DRIZZLE') && ! PMA_DRIZZLE);
if (isset($GLOBALS['dbi']) && $notDrizzle) {
$binary_logs = $GLOBALS['dbi']->fetchResult(
'SHOW MASTER LOGS',
'Log_name',
@ -486,6 +515,10 @@ class PMA_Menu
$tabs['rights']['icon'] = 's_rights.png';
$tabs['rights']['link'] = 'server_privileges.php';
$tabs['rights']['text'] = __('Users');
$tabs['rights']['active'] = in_array(
basename($GLOBALS['PMA_PHP_SELF']),
array('server_privileges.php', 'server_user_groups.php')
);
}
$tabs['export']['icon'] = 'b_export.png';

View File

@ -4153,6 +4153,69 @@ class PMA_Util
return $regex;
}
/**
* Return the list of tabs for the menu with corresponding names
*
* @param string $level 'server', 'db' or 'table' level
*
* @return array list of tabs for the menu
*/
public static function getMenuTabList($level = null)
{
$tabList = array(
'server' => array(
'databases' => __('Databases'),
'sql' => __('SQL'),
'status' => __('Status'),
'rights' => __('Users'),
'export' => __('Export'),
'import' => __('Import'),
'settings' => __('Settings'),
'binlog' => __('Binary log'),
'replication' => __('Replication'),
'vars' => __('Variables'),
'charset' => __('Charsets'),
'plugins' => __('Plugins'),
'engine' => __('Engines')
),
'db' => array(
'structure' => __('Structure'),
'sql' => __('SQL'),
'search' => __('Search'),
'qbe' => __('Query'),
'export' => __('Export'),
'import' => __('Import'),
'operation' => __('Operations'),
'privileges' => __('Privileges'),
'routines' => __('Routines'),
'events' => __('Events'),
'triggers' => __('Triggers'),
'tracking' => __('Tracking'),
'designer' => __('Designer')
),
'table' => array(
'browse' => __('Browse'),
'structure' => __('Structure'),
'sql' => __('SQL'),
'search' => __('Search'),
'insert' => __('Insert'),
'export' => __('Export'),
'import' => __('Import'),
'operation' => __('Operations'),
'tracking' => __('Tracking'),
'triggers' => __('Triggers'),
)
);
if ($level == null) {
return $tabList;
} else if (array_key_exists($level, $tabList)) {
return $tabList[$level];
} else {
return null;
}
}
/**
* Returns information with latest version from phpmyadmin.net
*
@ -4191,9 +4254,8 @@ class PMA_Util
$cfg['VersionCheckProxyUser'] . ':'
. $cfg['VersionCheckProxyPass']
);
$context['http']['header'] =
'Proxy-Authorization: Basic '
. $auth;
$context['http']['header']
= 'Proxy-Authorization: Basic ' . $auth;
}
}
$response = file_get_contents(

View File

@ -402,6 +402,24 @@ $cfg['Servers'][$i]['tracking'] = '';
*/
$cfg['Servers'][$i]['userconfig'] = '';
/**
* table to store users and their assignment to user groups
* - leave blank to disable configurable menus feature
* SUGGESTED: 'pma__users'
*
* @global string $cfg['Servers'][$i]['users']
*/
$cfg['Servers'][$i]['users'] = '';
/**
* table to store allowed menu items for each user group
* - leave blank to disable configurable menus feature
* SUGGESTED: 'pma__usergroups'
*
* @global string $cfg['Servers'][$i]['usergroups']
*/
$cfg['Servers'][$i]['usergroups'] = '';
/**
* Maximum number of records saved in $cfg['Servers'][$i]['table_uiprefs'] table.
*

View File

@ -450,6 +450,10 @@ $strConfigServers_tracking_version_auto_create_desc = __('Whether the tracking m
$strConfigServers_tracking_version_auto_create_name = __('Automatically create versions');
$strConfigServers_userconfig_desc = __('Leave blank for no user preferences storage in database, suggested: [kbd]pma__userconfig[/kbd]');
$strConfigServers_userconfig_name = __('User preferences storage table');
$strConfigServers_users_desc = __('Leave blank to disable configurable menus feature, suggested: [kbd]pma__users[/kbd]');
$strConfigServers_users_name = __('Users table');
$strConfigServers_usergroups_desc = __('Leave blank to disable configurable menus feature, suggested: [kbd]pma__usergroups[/kbd]');
$strConfigServers_usergroups_name = __('User groups table');
$strConfigServers_user_desc = __('Leave empty if not using config auth');
$strConfigServers_user_name = __('User for config auth');
$strConfigServers_verbose_desc = __('A user-friendly description of this server. Leave blank to display the hostname instead.');

View File

@ -70,6 +70,8 @@ $forms['Servers']['Server_pmadb'] = array('Servers' => array(1 => array(
'bookmarktable' => 'pma__bookmark',
'relation' => 'pma__relation',
'userconfig' => 'pma__userconfig',
'users' => 'pma__users',
'usergroups' => 'pma__usergroups',
'table_info' => 'pma__table_info',
'column_info' => 'pma__column_info',
'history' => 'pma__history',

View File

@ -248,6 +248,23 @@ function PMA_getRelationsParamDiagnostic($cfgRelation)
'userconfigwork',
$messages
);
$retval .= PMA_getDiagMessageForParameter(
'users',
isset($cfgRelation['users']),
$messages,
'users'
);
$retval .= PMA_getDiagMessageForParameter(
'usergroups',
isset($cfgRelation['usergroups']),
$messages,
'usergroups'
);
$retval .= PMA_getDiagMessageForFeature(
__('Configurable menus'),
'menuswork',
$messages
);
$retval .= '</table>' . "\n";
$retval .= '<p>' . __('Quick steps to setup advanced features:') . '</p>';
@ -347,22 +364,23 @@ function PMA_getDiagMessageForParameter($parameter,
*/
function PMA_checkRelationsParam()
{
$cfgRelation = array();
$cfgRelation['relwork'] = false;
$cfgRelation['displaywork'] = false;
$cfgRelation['bookmarkwork']= false;
$cfgRelation['pdfwork'] = false;
$cfgRelation['commwork'] = false;
$cfgRelation['mimework'] = false;
$cfgRelation['historywork'] = false;
$cfgRelation['recentwork'] = false;
$cfgRelation['uiprefswork'] = false;
$cfgRelation['trackingwork'] = false;
$cfgRelation['designerwork'] = false;
$cfgRelation = array();
$cfgRelation['relwork'] = false;
$cfgRelation['displaywork'] = false;
$cfgRelation['bookmarkwork'] = false;
$cfgRelation['pdfwork'] = false;
$cfgRelation['commwork'] = false;
$cfgRelation['mimework'] = false;
$cfgRelation['historywork'] = false;
$cfgRelation['recentwork'] = false;
$cfgRelation['uiprefswork'] = false;
$cfgRelation['trackingwork'] = false;
$cfgRelation['designerwork'] = false;
$cfgRelation['userconfigwork'] = false;
$cfgRelation['allworks'] = false;
$cfgRelation['user'] = null;
$cfgRelation['db'] = null;
$cfgRelation['menuswork'] = false;
$cfgRelation['allworks'] = false;
$cfgRelation['user'] = null;
$cfgRelation['db'] = null;
if ($GLOBALS['server'] == 0
|| empty($GLOBALS['cfg']['Server']['pmadb'])
@ -408,21 +426,25 @@ function PMA_checkRelationsParam()
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['table_coords']) {
$cfgRelation['table_coords'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['designer_coords']) {
$cfgRelation['designer_coords'] = $curr_table[0];
$cfgRelation['designer_coords'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['column_info']) {
$cfgRelation['column_info'] = $curr_table[0];
$cfgRelation['column_info'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['pdf_pages']) {
$cfgRelation['pdf_pages'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['history']) {
$cfgRelation['history'] = $curr_table[0];
$cfgRelation['history'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['recent']) {
$cfgRelation['recent'] = $curr_table[0];
$cfgRelation['recent'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['table_uiprefs']) {
$cfgRelation['table_uiprefs'] = $curr_table[0];
$cfgRelation['table_uiprefs'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['tracking']) {
$cfgRelation['tracking'] = $curr_table[0];
$cfgRelation['tracking'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['userconfig']) {
$cfgRelation['userconfig'] = $curr_table[0];
$cfgRelation['userconfig'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['users']) {
$cfgRelation['users'] = $curr_table[0];
} elseif ($curr_table[0] == $GLOBALS['cfg']['Server']['usergroups']) {
$cfgRelation['usergroups'] = $curr_table[0];
}
} // end while
$GLOBALS['dbi']->freeResult($tab_rs);
@ -430,7 +452,7 @@ function PMA_checkRelationsParam()
if (isset($cfgRelation['relation'])) {
$cfgRelation['relwork'] = true;
if (isset($cfgRelation['table_info'])) {
$cfgRelation['displaywork'] = true;
$cfgRelation['displaywork'] = true;
}
}
@ -473,12 +495,17 @@ function PMA_checkRelationsParam()
$cfgRelation['bookmarkwork'] = true;
}
if (isset($cfgRelation['users']) && isset($cfgRelation['usergroups'])) {
$cfgRelation['menuswork'] = true;
}
if ($cfgRelation['relwork'] && $cfgRelation['displaywork']
&& $cfgRelation['pdfwork'] && $cfgRelation['commwork']
&& $cfgRelation['mimework'] && $cfgRelation['historywork']
&& $cfgRelation['recentwork'] && $cfgRelation['uiprefswork']
&& $cfgRelation['trackingwork'] && $cfgRelation['userconfigwork']
&& $cfgRelation['bookmarkwork'] && $cfgRelation['designerwork']
&& $cfgRelation['menuswork']
) {
$cfgRelation['allworks'] = true;
}

View File

@ -390,6 +390,103 @@ function PMA_getSqlQueryForDisplayPrivTable($db, $table, $username, $hostname)
." AND `Db` = '" . PMA_Util::unescapeMysqlWildcards($db) . "'"
." AND `Table_name` = '" . PMA_Util::sqlAddSlashes($table) . "';";
}
/**
* Displays a dropdown to select the user group
* with menu items configured to each of them.
*
* @param string $username username
*
* @return string html to select the user group
*/
function PMA_getHtmlToChoseUserGroup($username)
{
$html_output = '<form class="ajax" id="changeUserGroupForm"'
. ' action="server_privileges.php" method="post">';
$params = array('username' => $username);
$html_output .= PMA_generate_common_hidden_inputs($params);
$html_output .= '<fieldset id="fieldset_user_group_selection">';
$html_output .= '<legend>' . __('User group') . '</legend>';
$groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
$userTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);
$userGroups = array();
$sql_query = "SELECT `usergroup` FROM " . $groupTable;
$result = PMA_queryAsControlUser($sql_query, false);
if ($result) {
while ($row = $GLOBALS['dbi']->fetchRow($result)) {
$userGroups[] = $row[0];
}
}
$GLOBALS['dbi']->freeResult($result);
$userGroup = '';
if (isset($GLOBALS['username'])) {
$sql_query = "SELECT `usergroup` FROM " . $userTable
. " WHERE `username` = '" . PMA_Util::sqlAddSlashes($username) . "'";
$userGroup = $GLOBALS['dbi']->fetchValue(
$sql_query, 0, 0, $GLOBALS['controllink']
);
}
$html_output .= __('User group') . ': ';
$html_output .= '<select name="userGroup">';
$html_output .= '<option value=""></option>';
foreach ($userGroups as $oneUserGroup) {
$html_output .= '<option value="' . htmlspecialchars($oneUserGroup) . '"'
. ($oneUserGroup == $userGroup ? ' selected="selected"' : '')
. '>'
. htmlspecialchars($oneUserGroup)
. '</option>';
}
$html_output .= '</select>';
$html_output .= '<input type="hidden" name="changeUserGroup" value="1">';
$html_output .= '</fieldset>';
$html_output .= '</form>';
return $html_output;
}
/**
* Sets the user group from request values
*
* @param string $username username
* @param string $userGroup user group to set
*
* @return void
*/
function PMA_setUserGroup($username, $userGroup)
{
$userTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);
$sql_query = "SELECT `usergroup` FROM " . $userTable
. " WHERE `username` = '" . PMA_Util::sqlAddSlashes($username) . "'";
$oldUserGroup = $GLOBALS['dbi']->fetchValue(
$sql_query, 0, 0, $GLOBALS['controllink']
);
if ($oldUserGroup === false) {
$upd_query = "INSERT INTO " . $userTable . "(`username`, `usergroup`)"
. " VALUES ('" . PMA_Util::sqlAddSlashes($username) . "', "
. "'" . PMA_Util::sqlAddSlashes($userGroup) . "')";
} else {
if (empty($userGroup)) {
$upd_query = "DELETE FROM " . $userTable
. " WHERE `username`='" . PMA_Util::sqlAddSlashes($username) . "'";
} elseif ($oldUserGroup != $userGroup) {
$upd_query = "UPDATE " . $userTable
. " SET `usergroup`='" . PMA_Util::sqlAddSlashes($userGroup) . "'"
. " WHERE `username`='" . PMA_Util::sqlAddSlashes($username) . "'";
}
}
if (isset($upd_query)) {
PMA_queryAsControlUser($upd_query);
}
}
/**
* Displays the privileges form table
*
@ -591,7 +688,7 @@ function PMA_getHtmlForDisplayResourceLimits($row)
* @param string $db the database
* @param string $table the table
* @param boolean $columns columns array
* @param $row current privileges row
* @param array $row current privileges row
*
* @return string $html_output
*/
@ -2429,9 +2526,12 @@ function PMA_getUsersOverview($result, $db_rights, $link_edit, $pmaThemeImage,
. PMA_Util::showHint(
__('Note: MySQL privilege names are expressed in English')
)
. '</th>' . "\n"
. '<th>' . __('Grant') . '</th>' . "\n"
. '<th colspan="2">' . __('Action') . '</th>' . "\n"
. '</th>' . "\n";
if ($GLOBALS['cfgRelation']['menuswork']) {
$html_output .= '<th>' . __('User group') . '</th>' . "\n";
}
$html_output .= '<th>' . __('Grant') . '</th>' . "\n"
. '<th colspan="3">' . __('Action') . '</th>' . "\n"
. '</tr>' . "\n"
. '</thead>' . "\n";
@ -2479,6 +2579,27 @@ function PMA_getUsersOverview($result, $db_rights, $link_edit, $pmaThemeImage,
*/
function PMA_getTableBodyForUserRightsTable($db_rights, $link_edit, $link_export)
{
if ($GLOBALS['cfgRelation']['menuswork']) {
$usersTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);
$sqlQuery = "SELECT * FROM " . $usersTable;
$result = PMA_queryAsControlUser($sqlQuery, false);
$groupAssignment = array();
if ($result) {
while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
$groupAssignment[$row['username']] = $row['usergroup'];
}
}
$GLOBALS['dbi']->freeResult($result);
$link_edit_user_group = '<a class="edit_user_group_anchor ajax"'
. ' href="server_privileges.php?'
. str_replace('%', '%%', $GLOBALS['url_query'])
. '&amp;username=%s">'
. PMA_Util::getIcon('b_usrlist.png', __('Edit user group'))
. '</a>';
}
$odd_row = true;
$index_checkbox = 0;
$html_output = '';
@ -2521,28 +2642,48 @@ function PMA_getTableBodyForUserRightsTable($db_rights, $link_edit, $link_export
$html_output .= '<td><code>' . "\n"
. '' . implode(',' . "\n" . ' ', $host['privs']) . "\n"
. '</code></td>' . "\n"
. '<td>'
. '</code></td>' . "\n";
if ($GLOBALS['cfgRelation']['menuswork']) {
$html_output .= '<td class="usrGroup">' . "\n"
. (isset($groupAssignment[$host['User']])
? $groupAssignment[$host['User']]
: ''
)
. '</td>' . "\n";
}
$html_output .= '<td>'
. ($host['Grant_priv'] == 'Y' ? __('Yes') : __('No'))
. '</td>' . "\n"
. '<td class="center">'
. '</td>' . "\n";
$html_output .= '<td class="center">'
. sprintf(
$link_edit,
urlencode($host['User']),
urlencode($host['Host']),
'',
''
);
$html_output .= '</td>';
$html_output .= '<td class="center">';
$html_output .= sprintf(
$link_export,
urlencode($host['User']),
urlencode($host['Host']),
(isset($_GET['initial']) ? $_GET['initial'] : '')
);
$html_output .= '</td>';
)
. '</td>';
if ($GLOBALS['cfgRelation']['menuswork']) {
if (empty($host['User'])) {
$html_output .= '<td class="center"></td>';
} else {
$html_output .= '<td class="center">'
. sprintf(
$link_edit_user_group,
urlencode($host['User'])
)
. '</td>';
}
}
$html_output .= '<td class="center">'
. sprintf(
$link_export,
urlencode($host['User']),
urlencode($host['Host']),
(isset($_GET['initial']) ? $_GET['initial'] : '')
)
. '</td>';
$html_output .= '</tr>';
$odd_row = ! $odd_row;
}
@ -3028,8 +3169,324 @@ function PMA_getHtmlForDisplayUserOverviewPage($link_edit, $pmaThemeImage,
$flushnote->addParam('</a>', false);
$html_output .= $flushnote->getDisplay();
}
return $html_output;
}
return $html_output;
}
/**
* Return HTML to list the users belonging to a given user group
*
* @param string $userGroup user group name
*
* @return HTML to list the users belonging to a given user group
*/
function PMA_getHtmlForListingUsersofAGroup($userGroup)
{
$html_output = '<h2>'
. sprintf(__('Users of \'%s\' user group'), htmlspecialchars($userGroup))
. '</h2>';
$usersTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['users']);
$sql_query = "SELECT `username` FROM " . $usersTable
. " WHERE `usergroup`='" . PMA_Util::sqlAddSlashes($userGroup) . "'";
$result = PMA_queryAsControlUser($sql_query, false);
if ($result) {
if ($GLOBALS['dbi']->numRows($result) == 0) {
$html_output .= '<p>'
. __('No users were found belonging to this user group')
. '</p>';
} else {
$html_output .= '<table>'
. '<thead><tr><th>#</th><th>' . __('User') . '</th></tr></thead>'
. '<tbody>';
$i = 0;
while ($row = $GLOBALS['dbi']->fetchRow($result)) {
$i++;
$html_output .= '<tr>'
. '<td>' . $i . ' </td>'
. '<td>' . htmlspecialchars($row[0]) . '</td>'
. '</tr>';
}
$html_output .= '</tbody>'
. '</table>';
}
}
$GLOBALS['dbi']->freeResult($result);
return $html_output;
}
/**
* Returns HTML for the 'user groups' table
*
* @return string HTML for the 'user groups' table
*/
function PMA_getHtmlForUserGroupsTable()
{
$tabs = PMA_Util::getMenuTabList();
$html_output = '<h2>' . __('User groups') . '</h2>';
$html_output .= '<form name="userGroupsForm" id="userGroupsForm"'
. ' action="server_privileges.php" method="post">';
$html_output .= PMA_generate_common_hidden_inputs();
$html_output .= '<table id="userGroupsTable">';
$html_output .= '<thead><tr>';
$html_output .= '<th style="white-space: nowrap">' . __('User group') . '</th>';
$html_output .= '<th>' . __('Server level tabs') . '</th>';
$html_output .= '<th>' . __('Database level tabs') . '</th>';
$html_output .= '<th>' . __('Table level tabs') . '</th>';
$html_output .= '<th>' . __('Action') . '</th>';
$html_output .= '</tr></thead>';
$html_output .= '<tbody>';
$groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
$sql_query = "SELECT * FROM " . $groupTable;
$result = PMA_queryAsControlUser($sql_query, false);
if ($result) {
$odd = true;
while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
$html_output .= '<tr class="' . ($odd ? 'odd' : 'even') . '">';
$html_output .= '<td>' . htmlspecialchars($row['usergroup']) . '</td>';
$html_output .= '<td>' . _getAllowedTabNames($row, 'server') . '</td>';
$html_output .= '<td>' . _getAllowedTabNames($row, 'db') . '</td>';
$html_output .= '<td>' . _getAllowedTabNames($row, 'table') . '</td>';
$html_output .= '<td>';
$html_output .= '<a class="" href="server_user_groups.php?'
. PMA_generate_common_url() . '&viewUsers=1&userGroup='
. urlencode($row['usergroup']) . '">'
. PMA_Util::getIcon('b_usrlist.png', __('View users')) . '</a>';
$html_output .= '&nbsp;&nbsp;';
$html_output .= '<a class="" href="server_user_groups.php?'
. PMA_generate_common_url() . '&editUserGroup=1&userGroup='
. urlencode($row['usergroup']) . '">'
. PMA_Util::getIcon('b_edit.png', __('Edit')) . '</a>';
$html_output .= '&nbsp;&nbsp;';
$html_output .= '<a class="" href="server_user_groups.php?'
. PMA_generate_common_url() . '&deleteUserGroup=1&userGroup='
. urlencode($row['usergroup']) . '">'
. PMA_Util::getIcon('b_drop.png', __('Delete')) . '</a>';
$html_output .= '</td>';
$html_output .= '</tr>';
$odd = ! $odd;
}
}
$GLOBALS['dbi']->freeResult($result);
$html_output .= '</tbody>';
$html_output .= '</table>';
$html_output .= '</form>';
$html_output .= '<fieldset id="fieldset_add_user_group">';
$html_output .= '<a href="server_user_groups.php?'
. PMA_generate_common_url() . '&addUserGroup=1">'
. PMA_Util::getIcon('b_usradd.png')
. __('Add user group') . '</a>';
$html_output .= '</fieldset>';
return $html_output;
}
/**
* Returns the list of allowed menu tab names
* based on a data row from usergroup table.
*
* @param array $row row of usergroup table
* @param string $level 'server', 'db' or 'table'
*
* @return string comma seperated list of allowed menu tab names
*/
function _getAllowedTabNames($row, $level)
{
$tabNames = array();
$tabs = PMA_Util::getMenuTabList($level);
foreach ($tabs as $tab => $tabName) {
if (! isset($row[$level . '_' . $tab])
|| $row[$level . '_' . $tab] == 'Y'
) {
$tabNames[] = $tabName;
}
}
return implode(', ', $tabNames);
}
/**
* Deletes a user group
*
* @param string $userGroup user group name
*
* @return void
*/
function PMA_deleteUserGroup($userGroup)
{
$groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
$sql_query = "DELETE FROM " . $groupTable
. " WHERE `usergroup`='" . PMA_Util::sqlAddSlashes($userGroup) . "'";
PMA_queryAsControlUser($sql_query, true);
}
/**
* Returns HTML for add/edit user group dialog
*
* @param string $userGroup name of the user group in case of editing
*
* @return string HTML for add/edit user group dialog
*/
function PMA_getHtmlToEditUserGroup($userGroup = null)
{
$html_output = '';
if ($userGroup == null) {
$html_output .= '<h2>' . __('Add user group') . '</h2>';
} else {
$html_output .= '<h2>'
. sprintf(__('Edit user group: \'%s\''), htmlspecialchars($userGroup))
. '</h2>';
}
$html_output .= '<form name="userGroupForm" id="userGroupForm"'
. ' action="server_user_groups.php" method="post">';
$urlParams = array();
if ($userGroup != null) {
$urlParams['userGroup'] = $userGroup;
$urlParams['editUserGroupSubmit'] = '1';
} else {
$urlParams['addUserGroupSubmit'] = '1';
}
$html_output .= PMA_generate_common_hidden_inputs($urlParams);
$html_output .= '<fieldset id="fieldset_user_group_rights">';
$html_output .= '<legend>' . __('User group privileges')
. '&nbsp;&nbsp;&nbsp;'
. '<input type="checkbox" class="checkall_box" title="Check All">'
. '<label for="addUsersForm_checkall">' . __('Check All') .'</label>'
. '</legend>';
if ($userGroup == null) {
$html_output .= '<label for="userGroup">' . __('Group name: ') . '</label>';
$html_output .= '<input type="text" name="userGroup" autocomplete="off" />';
$html_output .= '<div class="clearfloat"></div>';
}
$allowedTabs = array(
'server' => array(),
'db' => array(),
'table' => array()
);
if ($userGroup != null) {
$groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
$sql_query = "SELECT * FROM " . $groupTable
. " WHERE `usergroup`='" . PMA_Util::sqlAddSlashes($userGroup) . "'";
$result = PMA_queryAsControlUser($sql_query, false);
if ($result) {
$row = $GLOBALS['dbi']->fetchAssoc($result);
foreach ($row as $key => $value) {
if (substr($key, 0, 7) == 'server_' && $value == 'Y') {
$allowedTabs['server'][] = substr($key, 7);
} elseif (substr($key, 0, 3) == 'db_' && $value == 'Y') {
$allowedTabs['db'][] = substr($key, 3);
} elseif (substr($key, 0, 6) == 'table_' && $value == 'Y') {
$allowedTabs['table'][] = substr($key, 6);
}
}
}
$GLOBALS['dbi']->freeResult($result);
}
$html_output .= _getTabList(
__('Sever level tabs'), 'server', $allowedTabs['server']
);
$html_output .= _getTabList(
__('Database level tabs'), 'db', $allowedTabs['db']
);
$html_output .= _getTabList(
__('Table level tabs'), 'table', $allowedTabs['table']
);
$html_output .= '</fieldset>';
$html_output .= '<fieldset id="fieldset_user_group_rights_footer"'
. ' class="tblFooters">';
$html_output .= '<input type="submit" name="update_privs" value="Go">';
$html_output .= '</fieldset>';
return $html_output;
}
/**
* Returns HTML for checkbox groups to choose
* tabs of 'server', 'db' or 'table' levels.
*
* @param string $title title of the checkbox group
* @param string $level 'server', 'db' or 'table'
* @param array $selected array of selected allowed tabs
*
* @return string HTML for checkbox groups
*/
function _getTabList($title, $level, $selected)
{
$tabs = PMA_Util::getMenuTabList($level);
$html_output = '<fieldset>';
$html_output .= '<legend>' . $title . '</legend>';
foreach ($tabs as $tab => $tabName) {
$html_output .= '<div class="item">';
$html_output .= '<input type="checkbox" class="checkall"'
. (in_array($tab, $selected) ? 'checked="checked"' : '')
. ' name="' . $level . '_' . $tab . '" value="Y" />';
$html_output .= '<label for="' . $level . '_' . $tab . '">'
. '<code>' . $tabName . '</code>'
. '</label>';
$html_output .= '</div>';
}
$html_output .= '</fieldset>';
return $html_output;
}
/**
* Add/update a user group with allowed menu tabs.
*
* @param string $userGroup user group name
* @param boolean $new whether this is a new user group
*
* @return void
*/
function PMA_editUserGroup($userGroup, $new = false)
{
$tabs = PMA_Util::getMenuTabList();
$groupTable = PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb'])
. "." . PMA_Util::backquote($GLOBALS['cfg']['Server']['usergroups']);
$cols = "";
$vals = "";
$colsNvals = "";
foreach ($tabs as $tabGroupName => $tabGroup) {
foreach ($tabs[$tabGroupName] as $tab => $tabName) {
$colName = $tabGroupName . '_' . $tab;
$cols .= "," . PMA_Util::backquote($colName);
if (isset($_REQUEST[$colName])&& $_REQUEST[$colName] == 'Y') {
$vals .= ",'Y'";
$colsNvals .= "," . PMA_Util::backquote($colName) . "='Y'";
} else {
$vals .= ",'N'";
$colsNvals .= "," . PMA_Util::backquote($colName) . "='N'";
}
}
}
if ($new) {
$sql_query = "INSERT INTO " . $groupTable
. "(`usergroup`" . $cols . ")"
. " VALUES"
. " ('" . PMA_Util::sqlAddSlashes($userGroup) . "'" . $vals . ")";
} else {
$sql_query = "UPDATE " . $groupTable . " SET " . substr($colsNvals, 1)
. " WHERE `usergroup`='" . PMA_Util::sqlAddSlashes($userGroup) . "'";
}
PMA_queryAsControlUser($sql_query, true);
}
/**
@ -3068,9 +3525,6 @@ function PMA_getHtmlForDisplayUserProperties($dbname_is_wildcard,$url_dbname,
}
$class = ' class="ajax"';
$html_output .= '<form' . $class . ' name="usersForm" id="addUsersForm"'
. ' action="server_privileges.php" method="post">' . "\n";
$_params = array(
'username' => $username,
'hostname' => $hostname,
@ -3081,8 +3535,10 @@ function PMA_getHtmlForDisplayUserProperties($dbname_is_wildcard,$url_dbname,
$_params['tablename'] = $tablename;
}
}
$html_output .= PMA_generate_common_hidden_inputs($_params);
$html_output .= '<form' . $class . ' name="usersForm" id="addUsersForm"'
. ' action="server_privileges.php" method="post">' . "\n";
$html_output .= PMA_generate_common_hidden_inputs($_params);
$html_output .= PMA_getHtmlToDisplayPrivilegesTable(
PMA_ifSetOr($dbname, '*', 'length'),
PMA_ifSetOr($tablename, '*', 'length')
@ -3402,4 +3858,44 @@ function PMA_getSqlQueriesForDisplayAndAddUser($username, $hostname, $password)
$sql_query
);
}
/**
* Get HTML for secondary level menu tabs on 'Users' page
*
* @param string $selfUrl Url of the file
*
* @return string HTML for secondary level menu tabs on 'Users' page
*/
function PMA_getHtmlForSubMenusOnUsersPage($selfUrl)
{
$url_params = PMA_generate_common_url();
$items = array(
array(
'name' => __('Users overview'),
'url' => 'server_privileges.php'
),
array(
'name' => __('User groups'),
'url' => 'server_user_groups.php'
)
);
$retval = '<ul id="topmenu2">';
foreach ($items as $item) {
$class = '';
if ($item['url'] === $selfUrl) {
$class = ' class="tabactive"';
}
$retval .= '<li>';
$retval .= '<a' . $class;
$retval .= ' href="' . $item['url'] . '?' . $url_params . '">';
$retval .= $item['name'];
$retval .= '</a>';
$retval .= '</li>';
}
$retval .= '</ul>';
$retval .= '<div class="clearfloat"></div>';
return $retval;
}
?>

View File

@ -16,6 +16,8 @@ require_once 'libraries/common.inc.php';
require_once 'libraries/display_change_password.lib.php';
require_once 'libraries/server_privileges.lib.php';
$cfgRelation = PMA_getRelationsParam();
/**
* Does the common work
*/
@ -24,6 +26,11 @@ $header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('server_privileges.js');
if ($GLOBALS['cfgRelation']['menuswork']) {
$response->addHTML('<div>');
$response->addHTML(PMA_getHtmlForSubMenusOnUsersPage('server_privileges.php'));
}
$_add_user_error = false;
if (isset ($_REQUEST['username'])) {
@ -228,6 +235,9 @@ if (isset($_REQUEST['adduser_submit']) || isset($_REQUEST['change_copy'])) {
$_error, $real_sql_query, $sql_query, $username, $hostname,
isset($dbname) ? $dbname : null
);
if (! empty($_REQUEST['userGroup']) && $cfgRelation['menuswork']) {
PMA_setUserGroup($GLOBALS['username'], $_REQUEST['userGroup']);
}
} else {
if (isset($create_user_real)) {
@ -268,6 +278,14 @@ if (! empty($_POST['update_privs'])) {
);
}
/**
* Assign users to user groups
*/
if (! empty($_REQUEST['changeUserGroup']) && $cfgRelation['menuswork']) {
PMA_setUserGroup($username, $_REQUEST['userGroup']);
$message = PMA_Message::success();
}
/**
* Revokes Privileges
*/
@ -378,6 +396,7 @@ if ($GLOBALS['is_ajax_request']
&& (! isset($_REQUEST['initial']) || empty($_REQUEST['initial']))
&& ! isset($_REQUEST['showall'])
&& ! isset($_REQUEST['edit_user_dialog'])
&& ! isset($_REQUEST['edit_user_group_dialog'])
&& ! isset($_REQUEST['db_specific'])
) {
$extra_data = PMA_getExtraDataForAjaxBehavior(
@ -424,6 +443,18 @@ if (isset($_REQUEST['viewing_mode']) && $_REQUEST['viewing_mode'] == 'db') {
* Displays the page
*/
if (! empty($_REQUEST['edit_user_group_dialog']) && $cfgRelation['menuswork']) {
$dialog = PMA_getHtmlToChoseUserGroup($username);
$response = PMA_Response::getInstance();
if ($GLOBALS['is_ajax_request']) {
$response->addJSON('message', $dialog);
exit;
} else {
$response->addHTML($dialog);
}
}
// export user definition
if (isset($_REQUEST['export'])
|| (isset($_REQUEST['submit_mult']) && $_REQUEST['submit_mult'] == 'export')
@ -491,4 +522,8 @@ if (empty($_REQUEST['adduser'])
);
} // end if (empty($_REQUEST['adduser']) && empty($checkprivs))... elseif... else...
if ($GLOBALS['cfgRelation']['menuswork']) {
$response->addHTML('</div>');
}
?>

59
server_user_groups.php Normal file
View File

@ -0,0 +1,59 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Displays the 'User groups' sub page under 'Users' page.
*
* @package PhpMyAdmin
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/server_privileges.lib.php';
PMA_getRelationsParam();
if (! $GLOBALS['cfgRelation']['menuswork']) {
exit;
}
$response = PMA_Response::getInstance();
$response->addHTML('<div>');
$response->addHTML(PMA_getHtmlForSubMenusOnUsersPage('server_user_groups.php'));
/**
* Delete user group
*/
if (! empty($_REQUEST['deleteUserGroup'])) {
PMA_deleteUserGroup($_REQUEST['userGroup']);
}
/**
* Add a new user group
*/
if (! empty($_REQUEST['addUserGroupSubmit'])) {
PMA_editUserGroup($_REQUEST['userGroup'], true);
}
/**
* Update a user group
*/
if (! empty($_REQUEST['editUserGroupSubmit'])) {
PMA_editUserGroup($_REQUEST['userGroup']);
}
if (isset($_REQUEST['viewUsers'])) {
// Display users belonging to a user group
$response->addHTML(PMA_getHtmlForListingUsersofAGroup($_REQUEST['userGroup']));
}
if (isset($_REQUEST['addUserGroup'])) {
// Display add user group dialog
$response->addHTML(PMA_getHtmlToEditUserGroup());
} elseif (isset($_REQUEST['editUserGroup'])) {
// Display edit user group dialog
$response->addHTML(PMA_getHtmlToEditUserGroup($_REQUEST['userGroup']));
} else {
// Display user groups table
$response->addHTML(PMA_getHtmlForUserGroupsTable());
}
$response->addHTML('</div>');
?>

View File

@ -953,6 +953,10 @@ div#tablestatistics table {
float: <?php echo $left; ?>;
}
#fieldset_user_group_rights fieldset {
float: <?php echo $left; ?>;
}
#fieldset_user_global_rights legend input {
margin-<?php echo $left; ?>: 2em;
}

View File

@ -1207,6 +1207,10 @@ div#tablestatistics table {
float: <?php echo $left; ?>;
}
#fieldset_user_group_rights fieldset {
float: <?php echo $left; ?>;
}
#fieldset_user_global_rights legend input {
margin-<?php echo $left; ?>: 2em;
}