diff --git a/app/CMS/Handlers/BaseHandler.php b/app/CMS/Handlers/BaseHandler.php index e52a4ec3..a86169d5 100644 --- a/app/CMS/Handlers/BaseHandler.php +++ b/app/CMS/Handlers/BaseHandler.php @@ -5,7 +5,7 @@ namespace App\CMS\Handlers; use App\CMS\Contracts\Modules\BaseModuleHandler; use App\CMS\Enumerations\TemplatePathsHumanReadableRootOnly; use App\CMS\Enumerations\WidgetTypes; -use App\Models\ActionLog\ActionLogType; +use App\Models\ActionLog\ActionLog; use App\Models\Content\Content; use App\Models\FileManager\File; use App\Models\Settings; @@ -60,7 +60,7 @@ abstract class BaseHandler implements BaseModuleHandler // create list of all widget types $widgets = WidgetTypes::getWithTranslations(); - if (!empty($widgets) && $user->can('create-widgets', Widget::class)) { + if (!empty($widgets) && $user->can('create', Widget::class)) { $sub->dropdown(trans('admin/mainMenu.newWidget'), function ($sub) use ($widgets) { $i = 1; foreach ($widgets as $type => $name) { @@ -117,7 +117,7 @@ abstract class BaseHandler implements BaseModuleHandler } } - if ($user->can('manage', ActionLogType::class)) { + if ($user->can('manage', ActionLog::class)) { $sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']); } diff --git a/app/Policies/ActionLogPolicy.php b/app/Policies/ActionLogPolicy.php new file mode 100644 index 00000000..7522281d --- /dev/null +++ b/app/Policies/ActionLogPolicy.php @@ -0,0 +1,11 @@ +hasAbility('create-directories'); + } + + /** + * Determine whether the user can update the directory. + * + * @param \App\Models\User $user + * @param \App\Directory $directory + * @return mixed + */ + public function update(User $user, Directory $directory) + { + return $user->hasAbility('update-directories'); + } +} diff --git a/app/Policies/SettingsPolicy.php b/app/Policies/SettingsPolicy.php new file mode 100644 index 00000000..6b0ff0e5 --- /dev/null +++ b/app/Policies/SettingsPolicy.php @@ -0,0 +1,11 @@ +hasAbility('copy-templates'); + } + + /** + * Determine whether the user can update the template. + * + * @param \App\Models\User $user + * @param \App\Template $template + * + * @return mixed + */ + public function update(User $user, Template $template) + { + return $user->hasAbility('edit-templates'); + } +} diff --git a/app/Policies/WidgetAreaPolicy.php b/app/Policies/WidgetAreaPolicy.php new file mode 100644 index 00000000..f0efc9b4 --- /dev/null +++ b/app/Policies/WidgetAreaPolicy.php @@ -0,0 +1,36 @@ +hasAbility('create-widgetareas'); + } + + /** + * Determine whether the user can update the widgetArea. + * + * @param \App\Models\User $user + * @param \App\WidgetArea $widgetArea + * @return mixed + */ + public function update(User $user, WidgetArea $widgetArea) + { + return $user->hasAbility('edit-widgetareas'); + } +} diff --git a/app/Policies/WidgetsPolicy.php b/app/Policies/WidgetsPolicy.php new file mode 100644 index 00000000..c818f5f0 --- /dev/null +++ b/app/Policies/WidgetsPolicy.php @@ -0,0 +1,48 @@ +hasAbility('create-widgets'); + } + + /** + * Determine whether the user can update the widget. + * + * @param \App\Models\User $user + * @param \App\Widget $widget + * + * @return mixed + */ + public function update(User $user, Widget $widget) + { + return $user->id == $widget->user_id || $user->hasAbility('edit-widgets'); + } + + public function assign(User $user, Widget $widget) + { + return $user->hasAbility('assign-widgets'); + } + + public function unassign(User $user, Widget $widget) + { + return $user->hasAbility('unassign-widgets'); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index b0c4f024..fdf18d8e 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -25,6 +25,7 @@ use App\CMS\Repositories\Module as ModuleRepository; use App\CMS\Repositories\Templates\Template as TemplateRepository; use App\CMS\Widgets\HtmlCode\HtmlCode; use App\CMS\Widgets\Menu\Menu; +use App\CMS\Widgets\SocialButtons\SocialButtons; use Barryvdh\Debugbar\ServiceProvider as DebugBarServiceProvider; use Illuminate\Support\Facades\App; use Illuminate\Support\ServiceProvider; @@ -106,6 +107,7 @@ class AppServiceProvider extends ServiceProvider // register all available widgets $registrator->register(HtmlCode::class); $registrator->register(Menu::class); + $registrator->register(SocialButtons::class); } /** diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index f451ee79..08e6ed49 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,14 +2,26 @@ namespace App\Providers; +use App\Models\ActionLog\ActionLog; use App\Models\Content\Content; +use App\Models\FileManager\Directory; use App\Models\FileManager\File; use App\Models\Module; +use App\Models\Settings; +use App\Models\Templates\Template; use App\Models\User; +use App\Models\Widgets\Widget; +use App\Models\Widgets\WidgetArea; +use App\Policies\ActionLogPolicy; use App\Policies\ContentPolicy; +use App\Policies\DirectoriesPolicy; use App\Policies\FilesPolicy; use App\Policies\ModulePolicy; +use App\Policies\SettingsPolicy; +use App\Policies\TemplatePolicy; use App\Policies\UserPolicy; +use App\Policies\WidgetAreaPolicy; +use App\Policies\WidgetsPolicy; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as IlluminateAuthServiceProvider; class AuthServiceProvider extends IlluminateAuthServiceProvider @@ -19,10 +31,17 @@ class AuthServiceProvider extends IlluminateAuthServiceProvider * @var array */ protected $policies = [ - Content::class => ContentPolicy::class, - User::class => UserPolicy::class, - Module::class => ModulePolicy::class, - File::class => FilesPolicy::class, + Content::class => ContentPolicy::class, + User::class => UserPolicy::class, + Module::class => ModulePolicy::class, + File::class => FilesPolicy::class, + ActionLog::class => ActionLogPolicy::class, + Template::class => TemplatePolicy::class, + Directory::class => DirectoriesPolicy::class, + Settings::class => SettingsPolicy::class, + Widget::class => WidgetsPolicy::class, + WidgetArea::class => WidgetAreaPolicy::class, + ActionLog::class => ActionLogPolicy::class, ]; /** diff --git a/resources/lang/cs/widgets/orbitSlider.php b/resources/lang/cs/widgets/orbitSlider.php deleted file mode 100644 index 3ac4aab9..00000000 --- a/resources/lang/cs/widgets/orbitSlider.php +++ /dev/null @@ -1,21 +0,0 @@ - "Dodatečný HTML/JS kód pro slider", -"containerClass" => "HTML třída pro obalový element tohoto widgetu", -"createNew" => "Vytvořit nový", -"description" => "Popis", -"displayBullets" => "Zobrazit odrážky?", -"edit" => "Upravit :name", -"editExisting" => "Uložit", -"extraSettings" => "Další nastavení", -"fullscreen" => "Zobrazit slider na celou obrazovku", -"imagesPerSlide" => "Obrázků na slide", -"name" => "Jméno slideru", -"new" => "Vytvořit nový slider", -"preview" => "Náhled", -"showInFullscreen" => "Zobrazit na celou obrazovku", -"slideContainerClass" => "HTML třída pro každý obrázek ve slideru", -"upload" => "Přidat obrázky do slideru", -"widgetDescription" => "Slider pro obrázky. Tento widget používá Foundation framework a jeho vlastní slider zvaný Orbit. (Nebude fungovat bez Foundation 6!)", -"widgetName" => "Orbit slider", -]; diff --git a/resources/lang/cs/widgets/socialButtons.php b/resources/lang/cs/widgets/socialButtons.php new file mode 100644 index 00000000..987ef446 --- /dev/null +++ b/resources/lang/cs/widgets/socialButtons.php @@ -0,0 +1,16 @@ + "HTML kod", +"containerClass" => "HTML třída pro obalový element tohoto widgetu", +"createNew" => "Vytvořit nový widget", +"description" => "Popis", +"edit" => "Edituji widget :name", +"editExisting" => "Upravit widget", +"name" => "Jméno", +"new" => "Vytvořit nový widget", +"preview" => "Náhled", +"save" => "Uložit", +"successfullyEdited" => "Widget úspěšně upraven", +"widgetDescription" => "Jednoduchý widget pro vkládání sociálních tlačítek.", +"widgetName" => "Sociální tlačítka", +]; diff --git a/resources/views/admin/templates/templatesTiles.blade.php b/resources/views/admin/templates/templatesTiles.blade.php index c532a468..74e3654a 100644 --- a/resources/views/admin/templates/templatesTiles.blade.php +++ b/resources/views/admin/templates/templatesTiles.blade.php @@ -8,28 +8,37 @@ {{str_limit($template->description, 150)}} - @if($isWritable) - - - + @can('copy', $template) + @if($isWritable) + + + + @else + + + + @endif @else - @endif + @endcan + @can('update', $template) @if ($template->editable) - @else + @else @endif + @endcan @empty
@@ -40,27 +49,27 @@ @section('javascripts') @endsection \ No newline at end of file diff --git a/resources/views/admin/widgets/area/overview.blade.php b/resources/views/admin/widgets/area/overview.blade.php index 46b122bd..518eedae 100644 --- a/resources/views/admin/widgets/area/overview.blade.php +++ b/resources/views/admin/widgets/area/overview.blade.php @@ -36,6 +36,7 @@ href="{{route('widgetareas.edit', ['id' => $area->id])}}"> +
  • @endif
  • -
    -
    -
    -
    -

    @lang('admin/widgetAreas.new')

    + @can('create', \App\Models\Widgets\WidgetArea::class) +
    +
    +
    +
    +

    @lang('admin/widgetAreas.new')

    +
    +
    +
    + @include('admin.widgets.area.form', ['action' => route('widgetareas.postNew'), 'area' => new \App\Models\Widgets\WidgetArea()])
    -
    - @include('admin.widgets.area.form', ['action' => route('widgetareas.postNew'), 'area' => new \App\Models\Widgets\WidgetArea()]) -
    -
    + @endcan
    diff --git a/resources/views/admin/widgets/overview.blade.php b/resources/views/admin/widgets/overview.blade.php index 197ee852..9126eb44 100644 --- a/resources/views/admin/widgets/overview.blade.php +++ b/resources/views/admin/widgets/overview.blade.php @@ -23,38 +23,48 @@ @foreach($widgets as $widget) -
    {{$widget->name}} + + @can('update', $widget) + {{$widget->name}} + @else + {{$widget->name}} + @endcan + {{trans(call_user_func([$widget->widget_type_handler, 'getName']))}} {{$widget->description}} -
    - - - - -
    -
      -
    • - -
    • + @if(\Auth::user()->can('update', $widget) || $widget->deletable) +
      + + + + +
      +
        + @can('update', $widget) +
      • + +
      • + @endcan - @if($widget->deletable) -
      • - -
      • - @endif + @if($widget->deletable) +
      • + +
      • + @endif -
      +
    +
    -
    + @endif diff --git a/routes/admin/widgets.php b/routes/admin/widgets.php index ba4720e1..18ac8f69 100644 --- a/routes/admin/widgets.php +++ b/routes/admin/widgets.php @@ -5,7 +5,7 @@ Route::group(['namespace' => 'Widgets'], function () { // list of all installed widget types Route::get('widgets', 'WidgetsOverview@index') ->name('widgets.overview') - ->middleware('can:update,' . \App\Models\Widgets\Widget::class); + ->middleware('can:manage,' . \App\Models\Widgets\Widget::class); // create new instance of widget of given type Route::get('widgets/new/{widgetType}', 'CreateNewWidget@getNew') @@ -14,7 +14,7 @@ Route::group(['namespace' => 'Widgets'], function () { Route::post('widgets/new/{widgetType}', 'CreateNewWidget@postNew') ->name('widgets.postNew') - ->middleware('can:createf,' . \App\Models\Widgets\Widget::class); + ->middleware('can:create,' . \App\Models\Widgets\Widget::class); // edit widget settings Route::get('widgets/edit/{widget}', 'EditWidget@getEdit')