From 536898f41b7bced4c9ca634c5e32ad648938449b Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Fri, 8 Feb 2019 13:53:11 -0700 Subject: [PATCH] Improved tools permissions handling --- admin.php | 10 +- classes/admin.php | 12 ++ pages/admin/tools.md | 4 - themes/grav/templates/partials/nav.html.twig | 2 +- .../partials/tools-backups-titlebar.html.twig | 2 +- .../partials/tools-backups.html.twig | 123 +++++++++--------- .../partials/tools-direct-install.html.twig | 1 - .../templates/partials/tools-logs.html.twig | 94 +++++++------ .../partials/tools-reports.html.twig | 19 ++- .../tools-scheduler-titlebar.html.twig | 2 +- .../partials/tools-scheduler.html.twig | 56 ++++---- themes/grav/templates/tools.html.twig | 12 +- 12 files changed, 171 insertions(+), 166 deletions(-) diff --git a/admin.php b/admin.php index d53a0966..78850863 100644 --- a/admin.php +++ b/admin.php @@ -373,11 +373,11 @@ class AdminPlugin extends Plugin public function onAdminTools(Event $event) { $event['tools'] = array_merge($event['tools'], [ - 'backups' => $this->grav['language']->translate('PLUGIN_ADMIN.BACKUPS'), - 'scheduler' => $this->grav['language']->translate('PLUGIN_ADMIN.SCHEDULER'), - 'logs' => $this->grav['language']->translate('PLUGIN_ADMIN.LOGS'), - 'reports' => $this->grav['language']->translate('PLUGIN_ADMIN.REPORTS'), - 'direct-install' => $this->grav['language']->translate('PLUGIN_ADMIN.DIRECT_INSTALL'), + 'backups' => [['admin.maintenance', 'admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.BACKUPS')], + 'scheduler' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.SCHEDULER')], + 'logs' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.LOGS')], + 'reports' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.REPORTS')], + 'direct-install' => [['admin.super'], $this->grav['language']->translate('PLUGIN_ADMIN.DIRECT_INSTALL')], ]); return $event; diff --git a/classes/admin.php b/classes/admin.php index fc1ef554..ba9d0f8e 100644 --- a/classes/admin.php +++ b/classes/admin.php @@ -226,6 +226,18 @@ class Admin return $tools; } + public static function toolsPermissions() + { + $tools = static::tools(); + $perms = []; + + foreach ($tools as $tool) { + $perms = array_merge($perms, $tool[0]); + } + + return array_unique($perms); + } + /** * Return the languages available in the site * diff --git a/pages/admin/tools.md b/pages/admin/tools.md index 50c13d6d..bee2c659 100644 --- a/pages/admin/tools.md +++ b/pages/admin/tools.md @@ -1,7 +1,3 @@ --- title: Grav Tools - -access: - admin.tools: true - admin.super: true --- diff --git a/themes/grav/templates/partials/nav.html.twig b/themes/grav/templates/partials/nav.html.twig index c2bc2585..8f864422 100644 --- a/themes/grav/templates/partials/nav.html.twig +++ b/themes/grav/templates/partials/nav.html.twig @@ -76,7 +76,7 @@ {% endif %} - {% if authorize(['admin.tools', 'admin.super']) %} + {% if authorize(admin.toolsPermissions) %}
  • diff --git a/themes/grav/templates/partials/tools-backups-titlebar.html.twig b/themes/grav/templates/partials/tools-backups-titlebar.html.twig index 80b80c4f..8b168f1e 100644 --- a/themes/grav/templates/partials/tools-backups-titlebar.html.twig +++ b/themes/grav/templates/partials/tools-backups-titlebar.html.twig @@ -3,5 +3,5 @@ {% include 'partials/backups-button.html.twig' %} -

    {{ "PLUGIN_ADMIN.TOOLS"|tu }} - {{ "PLUGIN_ADMIN.BACKUPS"|tu }}

    +

    {{ "PLUGIN_ADMIN.TOOLS"|tu }} - {{ "PLUGIN_ADMIN.BACKUPS"|tu }}

    diff --git a/themes/grav/templates/partials/tools-backups.html.twig b/themes/grav/templates/partials/tools-backups.html.twig index 17b61a03..a63f7daf 100644 --- a/themes/grav/templates/partials/tools-backups.html.twig +++ b/themes/grav/templates/partials/tools-backups.html.twig @@ -1,79 +1,76 @@
    - {% if authorize(['admin.configuration_backups', 'admin.super']) %} + {% set data = admin.data('config/backups') %} + {% set backups = grav.backups.getAvailableBackups() %} + {% set profiles = grav.backups.getBackupProfiles() %} + {% set purge_config = grav.backups.getPurgeConfig() %} + {% set newest_date = (backups|first).date %} + {% set newest_backup = newest_date ? newest_date|nicetime(false, false) : 'none' %} + {% set oldest_date = (backups|last).date %} + {% set oldest_backup = oldest_date ? oldest_date|nicetime(false, false) : 'none' %} - {% set data = admin.data('config/backups') %} - {% set backups = grav.backups.getAvailableBackups() %} - {% set profiles = grav.backups.getBackupProfiles() %} - {% set purge_config = grav.backups.getPurgeConfig() %} - {% set newest_date = (backups|first).date %} - {% set newest_backup = newest_date ? newest_date|nicetime(false, false) : 'none' %} - {% set oldest_date = (backups|last).date %} - {% set oldest_backup = oldest_date ? oldest_date|nicetime(false, false) : 'none' %} + {% switch purge_config.trigger %} + {% case 'number' %} + {% set count = backups|count %} + {% set percent_used = count == 0 ? 0 : 100 - (count / purge_config.max_backups_count * 100) %} + {% set bar_msg = "PLUGIN_ADMIN.BACKUPS_PURGE_NUMBER"|tu([count, purge_config.max_backups_count]) %} + {% case 'time' %} + {% set last = backups|last %} + {% set days = last == null ? 0 : (date('now')).diff(last.time).days %} + {% set percent_used = days == 0 ? 0 : 100 - (days / purge_config.max_backups_time * 100) %} + {% set bar_msg = "PLUGIN_ADMIN.BACKUPS_PURGE_TIME"|tu([(purge_config.max_backups_time - days)]) %} + {% default %} + {% set space_used = grav.backups.getTotalBackupsSize() %} + {% set space_available = purge_config.max_backups_space * 1024 * 1024 * 1024 %} + {% set percent_used = space_used == 0 ? 0 : 100 - (space_used / space_available * 100) %} + {% set bar_msg = "PLUGIN_ADMIN.BACKUPS_PURGE_SPACE"|tu([space_used|nicefilesize, space_available|nicefilesize]) %} + {% endswitch %} - {% switch purge_config.trigger %} - {% case 'number' %} - {% set count = backups|count %} - {% set percent_used = count == 0 ? 0 : 100 - (count / purge_config.max_backups_count * 100) %} - {% set bar_msg = "PLUGIN_ADMIN.BACKUPS_PURGE_NUMBER"|tu([count, purge_config.max_backups_count]) %} - {% case 'time' %} - {% set last = backups|last %} - {% set days = last == null ? 0 : (date('now')).diff(last.time).days %} - {% set percent_used = days == 0 ? 0 : 100 - (days / purge_config.max_backups_time * 100) %} - {% set bar_msg = "PLUGIN_ADMIN.BACKUPS_PURGE_TIME"|tu([(purge_config.max_backups_time - days)]) %} - {% default %} - {% set space_used = grav.backups.getTotalBackupsSize() %} - {% set space_available = purge_config.max_backups_space * 1024 * 1024 * 1024 %} - {% set percent_used = space_used == 0 ? 0 : 100 - (space_used / space_available * 100) %} - {% set bar_msg = "PLUGIN_ADMIN.BACKUPS_PURGE_SPACE"|tu([space_used|nicefilesize, space_available|nicefilesize]) %} - {% endswitch %} +
    +
    +
    +

    {{ "PLUGIN_ADMIN.BACKUPS_STATS"|tu }}

    +
    +
    -
    -
    -
    -

    {{ "PLUGIN_ADMIN.BACKUPS_STATS"|tu }}

    -
    -
    - -
    -
    - {% if percent_used >= 100 %} -
    - {% else %} -
    - {% endif %} -
    -

    {{ bar_msg }}

    +
    +
    + {% if percent_used >= 100 %} +
    + {% else %} +
    + {% endif %}
    +

    {{ bar_msg }}

    +
    -
    - - {{ backups|length }} - {{ "PLUGIN_ADMIN.BACKUPS_COUNT"|tu }} - - - {{ profiles|count }} - {{ "PLUGIN_ADMIN.BACKUPS_PROFILES_COUNT"|tu }} - - - {{ newest_backup }} - {{ "PLUGIN_ADMIN.BACKUPS_NEWEST"|tu }} - - - {{ oldest_backup }} - {{ "PLUGIN_ADMIN.BACKUPS_OLDEST"|tu }} - -
    -
    +
    + + {{ backups|length }} + {{ "PLUGIN_ADMIN.BACKUPS_COUNT"|tu }} + + + {{ profiles|count }} + {{ "PLUGIN_ADMIN.BACKUPS_PROFILES_COUNT"|tu }} + + + {{ newest_backup }} + {{ "PLUGIN_ADMIN.BACKUPS_NEWEST"|tu }} + + + {{ oldest_backup }} + {{ "PLUGIN_ADMIN.BACKUPS_OLDEST"|tu }} +
    +
    +
    - {% include 'partials/blueprints.html.twig' with { blueprints: data.blueprints, data: data } %} + {% include 'partials/blueprints.html.twig' with { blueprints: data.blueprints, data: data } %} - {% include 'partials/modal-changes-detected.html.twig' %} + {% include 'partials/modal-changes-detected.html.twig' %} - {% endif %}
    diff --git a/themes/grav/templates/partials/tools-direct-install.html.twig b/themes/grav/templates/partials/tools-direct-install.html.twig index af496442..a9e26975 100644 --- a/themes/grav/templates/partials/tools-direct-install.html.twig +++ b/themes/grav/templates/partials/tools-direct-install.html.twig @@ -25,6 +25,5 @@ {{ nonce_field('admin-form', 'admin-nonce')|raw }} -
    diff --git a/themes/grav/templates/partials/tools-logs.html.twig b/themes/grav/templates/partials/tools-logs.html.twig index 13cf8239..9d94c438 100644 --- a/themes/grav/templates/partials/tools-logs.html.twig +++ b/themes/grav/templates/partials/tools-logs.html.twig @@ -15,7 +15,6 @@ {% import _self as macro %} - {% if authorize(['admin.super']) %} {% set file = grav.uri.query('log') ?: 'grav' %} {% set verbose = grav.uri.query('verbose') == 'true' ? true : false %} {% set lines = grav.uri.query('lines') ?: 20 %} @@ -24,57 +23,56 @@
    -
    -
    -
    -
    - {% set log_files = config.plugins.admin.log_viewer_files|default(['grav','email']) %} - {% set lines_list = {10:'10 entries', 25:'25 entries', 50:'50 entries', 100:'100 entries', 200:'200 entries', 500:'500 entries'} %} + +
    +
    +
    + {% set log_files = config.plugins.admin.log_viewer_files|default(['grav','email']) %} + {% set lines_list = {10:'10 entries', 25:'25 entries', 50:'50 entries', 100:'100 entries', 200:'200 entries', 500:'500 entries'} %} - {{ macro.render_select('log', log_files, file, true) }} - {{ macro.render_select('verbose', {'false':'Essential Output', 'true':'Verbose Output'}, verbose) }} - {{ macro.render_select('lines', lines_list, lines) }} -
    + {{ macro.render_select('log', log_files, file, true) }} + {{ macro.render_select('verbose', {'false':'Essential Output', 'true':'Verbose Output'}, verbose) }} + {{ macro.render_select('lines', lines_list, lines) }}
    - +
    + -

    {{ file|titleize }} Log File

    -

    Display the {{ lines }} most recent entries...

    - - - - - - - - - - {% for log in logs %} - - - - - {% if verbose %} - - - - - {% endif %} - - {% endfor %} - -
    DateLevelMessage
    {{ log.date|date }}{{ log.level }}{{ log.message }}
      -
    -
      - {% for tracerow in log.trace %} -
    1. {{ tracerow }}
    2. - {% endfor %} -
    -
    -
    -
    +

    {{ file|titleize }} Log File

    +

    Display the {{ lines }} most recent entries...

    + + + + + + + + + + {% for log in logs %} + + + + + {% if verbose %} + + + + + {% endif %} + + {% endfor %} + +
    DateLevelMessage
    {{ log.date|date }}{{ log.level }}{{ log.message }}
      +
    +
      + {% for tracerow in log.trace %} +
    1. {{ tracerow }}
    2. + {% endfor %} +
    +
    +
    +
    - {% endif %}
    diff --git a/themes/grav/templates/partials/tools-reports.html.twig b/themes/grav/templates/partials/tools-reports.html.twig index 187a55b0..32f9cc8d 100644 --- a/themes/grav/templates/partials/tools-reports.html.twig +++ b/themes/grav/templates/partials/tools-reports.html.twig @@ -1,16 +1,15 @@
    - {% if authorize(['admin.configuration_reports', 'admin.super']) %} - {% set reports = admin.generateReports() %} + {% set reports = admin.generateReports() %} -
    - {% for title, report in reports %} -

    {{ title }}

    - {{ report|raw }} - {% endfor %} -
    +
    + {% for title, report in reports %} +

    {{ title }}

    + {{ report|raw }} + {% endfor %} +
    + + {% include 'partials/modal-changes-detected.html.twig' %} - {% include 'partials/modal-changes-detected.html.twig' %} - {% endif %}
    diff --git a/themes/grav/templates/partials/tools-scheduler-titlebar.html.twig b/themes/grav/templates/partials/tools-scheduler-titlebar.html.twig index 0e4aaf27..20321e03 100644 --- a/themes/grav/templates/partials/tools-scheduler-titlebar.html.twig +++ b/themes/grav/templates/partials/tools-scheduler-titlebar.html.twig @@ -2,5 +2,5 @@
    {{ "PLUGIN_ADMIN.BACK"|tu }}
    -

    {{ "PLUGIN_ADMIN.TOOLS"|tu }} - {{ "PLUGIN_ADMIN.SCHEDULER"|tu }}

    +

    {{ "PLUGIN_ADMIN.TOOLS"|tu }} - {{ "PLUGIN_ADMIN.SCHEDULER"|tu }}

    diff --git a/themes/grav/templates/partials/tools-scheduler.html.twig b/themes/grav/templates/partials/tools-scheduler.html.twig index 28b76e4f..1bf9a4fd 100644 --- a/themes/grav/templates/partials/tools-scheduler.html.twig +++ b/themes/grav/templates/partials/tools-scheduler.html.twig @@ -1,37 +1,33 @@
    {% set data = admin.data('config/scheduler') %} + {% set cron_status = grav.scheduler.isCrontabSetup()%} - {% if authorize(['admin.configuration_scheduler', 'admin.super']) %} - - {% set cron_status = grav.scheduler.isCrontabSetup()%} - - {% if cron_status == 1 %} -
    -
    {{ "PLUGIN_ADMIN.SCHEDULER_INSTALL_INSTRUCTIONS"|tu }}
    - {{ "PLUGIN_ADMIN.SCHEDULER_INSTALLED_READY"|tu }} -
    - {% elseif cron_status == 2 %} -
    {{ "PLUGIN_ADMIN.SCHEDULER_CRON_NA"|tu }}
    - {% else %} -
    {{ "PLUGIN_ADMIN.SCHEDULER_NOT_ENABLED"|tu }}
    - {% endif %} - -
    -
    {{- grav.scheduler.getCronCommand()|trim -}}
    - -

    {{ "PLUGIN_ADMIN.SCHEDULER_POST_INSTRUCTIONS"|tu|raw }}

    + {% if cron_status == 1 %} +
    +
    {{ "PLUGIN_ADMIN.SCHEDULER_INSTALL_INSTRUCTIONS"|tu }}
    + {{ "PLUGIN_ADMIN.SCHEDULER_INSTALLED_READY"|tu }}
    - - {% include 'partials/blueprints.html.twig' with { blueprints: data.blueprints, data: data } %} - - {% include 'partials/modal-changes-detected.html.twig' %} - - - + {% elseif cron_status == 2 %} +
    {{ "PLUGIN_ADMIN.SCHEDULER_CRON_NA"|tu }}
    + {% else %} +
    {{ "PLUGIN_ADMIN.SCHEDULER_NOT_ENABLED"|tu }}
    {% endif %} + +
    +
    {{- grav.scheduler.getCronCommand()|trim -}}
    + +

    {{ "PLUGIN_ADMIN.SCHEDULER_POST_INSTRUCTIONS"|tu|raw }}

    +
    + + {% include 'partials/blueprints.html.twig' with { blueprints: data.blueprints, data: data } %} + + {% include 'partials/modal-changes-detected.html.twig' %} + + +
    diff --git a/themes/grav/templates/tools.html.twig b/themes/grav/templates/tools.html.twig index badbcae7..fa604ad5 100644 --- a/themes/grav/templates/tools.html.twig +++ b/themes/grav/templates/tools.html.twig @@ -25,9 +25,13 @@
    {% for slug,tool in tools %} + {% set perms = tool|first %} + {% set name = tool|last %} + {% if authorize(perms) %} - {{ tool|tu|capitalize }} + {{ name|tu|capitalize }} + {% endif %} {% endfor %}
    @@ -35,8 +39,12 @@ {% endblock %} {% block content %} - {% if authorize(['admin.tools', 'admin.super']) %} + {% set perms = tools[tools_slug]|first %} + + {% if authorize(perms) %} {% include 'partials/tools-' ~ tools_slug ~ '.html.twig' ignore missing %} + {% else %} +

    Unauthorized

    {% endif %} {% endblock %}