Refactor and Extract HTML from table privs page
Server\Privileges::getHtmlForSpecificTablePrivileges Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
This commit is contained in:
parent
ecd9b08dbb
commit
860290eef4
@ -1425,34 +1425,91 @@ class Privileges
|
||||
*/
|
||||
public function getHtmlForSpecificTablePrivileges(string $db, string $table): string
|
||||
{
|
||||
global $cfg, $pmaThemeImage, $text_dir, $is_createuser;
|
||||
global $cfg, $pmaThemeImage, $text_dir, $is_createuser, $is_grantuser;
|
||||
|
||||
$scriptName = Util::getScriptNameForOption(
|
||||
$cfg['DefaultTabTable'],
|
||||
'table'
|
||||
);
|
||||
|
||||
$tableBody = '';
|
||||
$privileges = [];
|
||||
if ($this->dbi->isSuperuser()) {
|
||||
$privileges = $this->getDatabasePrivileges($db);
|
||||
$databasePrivileges = $this->getDatabasePrivileges($db);
|
||||
|
||||
$tablePrivileges = $this->getTablePrivileges($db, $table);
|
||||
foreach ($tablePrivileges as $user => $hosts) {
|
||||
foreach ($hosts as $host => $privs) {
|
||||
$privileges[$user] = $privileges[$user] ?? [];
|
||||
$privileges[$user][$host] = array_merge($privileges[$user][$host] ?? [], $privs);
|
||||
foreach ($hosts as $host => $specificPrivileges) {
|
||||
$databasePrivileges[$user] = $databasePrivileges[$user] ?? [];
|
||||
$databasePrivileges[$user][$host] = array_merge(
|
||||
$databasePrivileges[$user][$host] ?? [],
|
||||
$specificPrivileges
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$routinePrivileges = $this->getRoutinesPrivileges($db);
|
||||
foreach ($routinePrivileges as $user => $hosts) {
|
||||
foreach ($hosts as $host => $privs) {
|
||||
$privileges[$user] = $privileges[$user] ?? [];
|
||||
$privileges[$user][$host] = array_merge($privileges[$user][$host] ?? [], $privs);
|
||||
foreach ($hosts as $host => $specificPrivileges) {
|
||||
$databasePrivileges[$user] = $databasePrivileges[$user] ?? [];
|
||||
$databasePrivileges[$user][$host] = array_merge(
|
||||
$databasePrivileges[$user][$host] ?? [],
|
||||
$specificPrivileges
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$tableBody = $this->getHtmlTableBodyForSpecificDbOrTablePrivs($privileges, $db);
|
||||
foreach ($databasePrivileges as $user => $hosts) {
|
||||
foreach ($hosts as $host => $specificPrivileges) {
|
||||
$privileges[$user . '@' . $host] = [
|
||||
'user' => $user,
|
||||
'host' => $host,
|
||||
'privileges' => [],
|
||||
];
|
||||
foreach ($specificPrivileges as $specificPrivilege) {
|
||||
$privilege = [
|
||||
'type' => $specificPrivilege['Type'],
|
||||
'database' => $specificPrivilege['Db'],
|
||||
];
|
||||
if ($specificPrivilege['Type'] === 'r') {
|
||||
$privilege['routine'] = $specificPrivilege['Routine_name'];
|
||||
$privilege['has_grant'] = strpos(
|
||||
$specificPrivilege['Proc_priv'],
|
||||
'Grant'
|
||||
) !== false;
|
||||
$privilege['privileges'] = explode(',', $specificPrivilege['Proc_priv']);
|
||||
} elseif ($specificPrivilege['Type'] === 't') {
|
||||
$privilege['table'] = $specificPrivilege['Table_name'];
|
||||
$privilege['has_grant'] = strpos(
|
||||
$specificPrivilege['Table_priv'],
|
||||
'Grant'
|
||||
) !== false;
|
||||
$tablePrivs = explode(',', $specificPrivilege['Table_priv']);
|
||||
$specificPrivileges = [];
|
||||
$grantsArr = $this->getTableGrantsArray();
|
||||
foreach ($grantsArr as $grant) {
|
||||
$specificPrivileges[$grant[0]] = 'N';
|
||||
foreach ($tablePrivs as $priv) {
|
||||
if ($grant[0] == $priv) {
|
||||
$specificPrivileges[$grant[0]] = 'Y';
|
||||
}
|
||||
}
|
||||
}
|
||||
$privilege['privileges'] = $this->extractPrivInfo(
|
||||
$specificPrivileges,
|
||||
true,
|
||||
true
|
||||
);
|
||||
} else {
|
||||
$privilege['has_grant'] = $specificPrivilege['Grant_priv'] === 'Y';
|
||||
$privilege['privileges'] = $this->extractPrivInfo(
|
||||
$specificPrivilege,
|
||||
true
|
||||
);
|
||||
}
|
||||
$privileges[$user . '@' . $host]['privileges'][$specificPrivilege['Type']] = $privilege;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->template->render('server/privileges/table', [
|
||||
@ -1462,8 +1519,9 @@ class Privileges
|
||||
'table_url' => $scriptName,
|
||||
'pma_theme_image' => $pmaThemeImage,
|
||||
'text_dir' => $text_dir,
|
||||
'table_body' => $tableBody,
|
||||
'is_createuser' => $is_createuser,
|
||||
'is_grantuser' => $is_grantuser,
|
||||
'privileges' => $privileges,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@ -25,13 +25,95 @@
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
{{ table_body|raw }}
|
||||
<tbody>
|
||||
{% for privilege in privileges %}
|
||||
{% set privileges_amount = privilege.privileges|length %}
|
||||
<tr>
|
||||
<td{% if privileges_amount > 1 %} rowspan="{{ privileges_amount }}"{% endif %}>
|
||||
<input type="checkbox" class="checkall" name="selected_usr[]" id="checkbox_sel_users_{{ loop.index0 }}" value="
|
||||
{{- privilege.user ~ '&#27;' ~ privilege.host }}">
|
||||
</td>
|
||||
<td{% if privileges_amount > 1 %} rowspan="{{ privileges_amount }}"{% endif %}>
|
||||
{% if privilege.user is empty %}
|
||||
<span class="text-danger">{% trans 'Any' %}</span>
|
||||
{% else %}
|
||||
{{ privilege.user }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td{% if privileges_amount > 1 %} rowspan="{{ privileges_amount }}"{% endif %}>
|
||||
{{ privilege.host }}
|
||||
</td>
|
||||
{% for priv in privilege.privileges %}
|
||||
<td>
|
||||
{% if priv.type == 'g' %}
|
||||
{% trans 'global' %}
|
||||
{% elseif priv.type == 'd' %}
|
||||
{% if priv.database == db|replace({'_': '\\_', '%': '\\%'}) %}
|
||||
{% trans 'database-specific' %}
|
||||
{% else %}
|
||||
{% trans 'wildcard' %}: <code>{{ priv.database }}</code>
|
||||
{% endif %}
|
||||
{% elseif priv.type == 't' %}
|
||||
{% trans 'table-specific' %}
|
||||
{% elseif priv.type == 'r' %}
|
||||
{% trans 'routine' %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<code>
|
||||
{% if priv.type == 'r' %}
|
||||
{{ priv.routine }}
|
||||
({{ priv.privileges|join(', ')|upper }})
|
||||
{% else %}
|
||||
{{ priv.privileges|join(', ')|raw }}
|
||||
{% endif %}
|
||||
</code>
|
||||
</td>
|
||||
<td>
|
||||
{{ priv.has_grant ? 'Yes'|trans : 'No'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{% if is_grantuser %}
|
||||
<a class="edit_user_anchor" href="{{ url('/server/privileges', {
|
||||
'username': privilege.user,
|
||||
'hostname': privilege.host,
|
||||
'dbname': priv.database != '*' ? priv.database,
|
||||
'tablename': priv.table is defined and priv.table != '*' ? priv.table,
|
||||
'routinename': priv.routine ?? ''
|
||||
}) }}">
|
||||
{{ get_icon('b_usredit', 'Edit privileges'|trans) }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="center">
|
||||
<a class="export_user_anchor ajax" href="{{ url('/server/privileges', {
|
||||
'username': privilege.user,
|
||||
'hostname': privilege.host,
|
||||
'export': true,
|
||||
'initial': ''
|
||||
}) }}">
|
||||
{{ get_icon('b_tblexport', 'Export'|trans) }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% if privileges_amount > 1 %}
|
||||
<tr class="noclick">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="7">
|
||||
{% trans 'No user found.' %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="floatleft">
|
||||
<img class="selectallarrow" src="{{ pma_theme_image }}arrow_{{ text_dir }}.png" alt="
|
||||
{%- trans 'With selected:' %}" width="38" height="22">
|
||||
{%- trans 'With selected:' %}" width="38" height="22">
|
||||
<input type="checkbox" id="usersForm_checkall" class="checkall_box" title="{% trans 'Check all' %}">
|
||||
<label for="usersForm_checkall">{% trans 'Check all' %}</label>
|
||||
<em class="with-selected">{% trans 'With selected:' %}</em>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user