diff --git a/app/CMS/Handlers/BaseHandler.php b/app/CMS/Handlers/BaseHandler.php index c7ae9574..40357e35 100644 --- a/app/CMS/Handlers/BaseHandler.php +++ b/app/CMS/Handlers/BaseHandler.php @@ -1,16 +1,22 @@ route('admin.dashboard', trans('admin/mainMenu.dashboard'), [], 10, ['icon' => 'fa fa-fw fa-dashboard']); /** * Content pages - * * Submenus can be registered later */ $menu->dropdown(trans('admin/mainMenu.contentPages'), function ($sub) { @@ -40,63 +45,82 @@ abstract class BaseHandler implements BaseModuleHandler /** * File manager */ - $menu->route('upload.overview', trans('admin/mainMenu.fileManager'), [], 40, ['icon' => 'fa fa-fw fa-folder']); + if ($user->can('manage', File::class)) { + $menu->route('upload.overview', trans('admin/mainMenu.fileManager'), [], 40, ['icon' => 'fa fa-fw fa-folder']); + } /** * Widgets and widget areas */ - $menu->dropdown(trans('admin/mainMenu.widgets'), function ($sub) { - // create list of all widget types - $widgets = WidgetTypes::getWithTranslations(); + if ($user->can('manage', Widget::class) || $user->can('manage', WidgetArea::class)) { + $menu->dropdown(trans('admin/mainMenu.widgets'), function ($sub) use ($user) { + // create list of all widget types + $widgets = WidgetTypes::getWithTranslations(); - if (!empty($widgets)) { - $sub->dropdown(trans('admin/mainMenu.newWidget'), function ($sub) use ($widgets) { - $i = 1; - foreach ($widgets as $type => $name) { - $sub->route('widgets.new', $name, ['type' => $type], $i++); - } - }, 10, ['icon' => 'fa fa-fw fa-plus']); - } + if (!empty($widgets) && $user->can('create-widgets', Widget::class)) { + $sub->dropdown(trans('admin/mainMenu.newWidget'), function ($sub) use ($widgets) { + $i = 1; + foreach ($widgets as $type => $name) { + $sub->route('widgets.new', $name, ['type' => $type], $i++); + } + }, 10, ['icon' => 'fa fa-fw fa-plus']); + } - $sub->route('widgets.overview', trans('admin/mainMenu.widgetsOverview'), [], 20, ['icon' => 'fa fa-fw fa-list']); + $sub->route('widgets.overview', trans('admin/mainMenu.widgetsOverview'), [], 20, ['icon' => 'fa fa-fw fa-list']); - // menu for widget areas - $sub->dropdown(trans('admin/mainMenu.widgetAreas'), function ($sub) { - $sub->route('widgetareas.new', trans('admin/mainMenu.newWidgetArea'), [], 1, ['icon' => 'fa fa-fw fa-plus']); - $sub->route('widgetareas.overview', trans('admin/mainMenu.widgetAreaOverview'), [], 2, ['icon' => 'fa fa-fw fa-list']); - }, 50, ['icon' => 'fa fa-fw fa-object-group']); - }, 50, ['icon' => 'fa fa-fw fa-puzzle-piece']); + // menu for widget areas + if ($user->can('manage', WidgetArea::class)) { + $sub->dropdown(trans('admin/mainMenu.widgetAreas'), function ($sub) use ($user) { + if ($user->can('create-widgetareas', WidgetArea::class)) { + $sub->route('widgetareas.new', trans('admin/mainMenu.newWidgetArea'), [], 1, ['icon' => 'fa fa-fw fa-plus']); + } + $sub->route('widgetareas.overview', trans('admin/mainMenu.widgetAreaOverview'), [], 2, ['icon' => 'fa fa-fw fa-list']); + }, 50, ['icon' => 'fa fa-fw fa-object-group']); + } + }, 50, ['icon' => 'fa fa-fw fa-puzzle-piece']); + } /** * Divide system entries and other links in menu */ $menu->addDivider(9999); - $menu->dropdown(trans('admin/mainMenu.system'), function ($sub) { + $menu->dropdown(trans('admin/mainMenu.system'), function ($sub) use ($user) { /** * User management */ - $sub->dropdown(trans('admin/mainMenu.userManagement'), function ($sub) { - $sub->route('users.new', trans('admin/mainMenu.newUser'), [], 10, ['icon' => 'fa fa-fw fa-user-plus']); - $sub->route('users.overview', trans('admin/mainMenu.usersOverview'), [], 30, ['icon' => 'fa fa-fw fa-users']); - }, 20, ['icon' => 'fa fa-fw fa-users']); + if ($user->can('manage', User::class)) { + $sub->dropdown(trans('admin/mainMenu.userManagement'), function ($sub) use ($user) { + if ($user->can('create', User::class)) { + $sub->route('users.new', trans('admin/mainMenu.newUser'), [], 10, ['icon' => 'fa fa-fw fa-user-plus']); + } + $sub->route('users.overview', trans('admin/mainMenu.usersOverview'), [], 30, ['icon' => 'fa fa-fw fa-users']); + }, 20, ['icon' => 'fa fa-fw fa-users']); + } /** * Templates */ - $templatePaths = TemplatePathsHumanReadableRootOnly::getWithTranslations(); - if (!empty($templatePaths)) { - $sub->dropdown(trans('admin/mainMenu.templates'), function ($sub) use ($templatePaths) { - $i = 1; - foreach ($templatePaths as $id => $name) { - $sub->route('templates.overview', $name, ['id' => $id], $i++); - } - }, 60, ['icon' => 'fa fa-fw fa-file-code-o']); + if ($user->can('manage', Template::class)) { + $templatePaths = TemplatePathsHumanReadableRootOnly::getWithTranslations(); + if (!empty($templatePaths)) { + $sub->dropdown(trans('admin/mainMenu.templates'), function ($sub) use ($templatePaths) { + $i = 1; + foreach ($templatePaths as $id => $name) { + $sub->route('templates.overview', $name, ['id' => $id], $i++); + } + }, 60, ['icon' => 'fa fa-fw fa-file-code-o']); + } } - $sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']); - $sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']); + if ($user->can('manage', ActionLogType::class)) { + $sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']); + } + + if ($user->can('manage', Settings::class)) { + $sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']); + } }, 10000, ['icon' => 'fa fa-fw fa-gears']); }); diff --git a/app/CMS/MenuPresenters/MetismenuPresenter.php b/app/CMS/MenuPresenters/MetismenuPresenter.php index d32c48c7..a2f290e4 100644 --- a/app/CMS/MenuPresenters/MetismenuPresenter.php +++ b/app/CMS/MenuPresenters/MetismenuPresenter.php @@ -1,4 +1,5 @@ getUrl())) { + return null; + } + return '