FEATURE #2048: prepare routes for ACL, add some more permissions

This commit is contained in:
Michal Kváček
2017-08-11 02:07:31 +02:00
parent cccdbda543
commit 335ec4a167
41 changed files with 836 additions and 489 deletions
+6 -3
View File
@@ -21,9 +21,12 @@
</div>
@if ($historySize > 0)
<div class="columns text-right col-lg-6">
<a class="btn btn-secondary" href="{{route('content.history', ['id' => $page->id])}}">@lang('admin/contents.showHistory', ['count' => $historySize])</a>
</div>
@can('viewHistory', $page)
<div class="columns text-right col-lg-6">
<a class="btn btn-secondary"
href="{{route('content.history', ['id' => $page->id])}}">@lang('admin/contents.showHistory', ['count' => $historySize])</a>
</div>
@endcan
@endif
</div>
</form>
@@ -4,9 +4,11 @@
@section('headerButtons')
@if($module->exists === true)
<a href="{{route('content.new', ['module' => $module])}}" class="btn btn-primary btn-sm rounded">
<i class="fa fa-plus"></i>
</a>
@can('create', $module)
<a href="{{route('content.new', ['module' => $module])}}" class="btn btn-primary btn-sm rounded">
<i class="fa fa-plus"></i>
</a>
@endcan
@endif
@endsection
@@ -36,26 +38,38 @@
@foreach($pages as $page)
<div class="row p-tb-15">
<div class="col-md-1 hidden-sm-down text-center with-placeholder">
<a href="{{route('content.edit', ['page' => $page])}}">
@if(!view()->exists(template_name($page->template, false)))
<i class="fa fa-2x text-warning fa-warning" data-toggle="tooltip"
title="@lang('admin/contents.invalidTemplateSelected')"></i>
@else
@if(!empty($page->titlePhoto))
<img src="@thumbnail($page->titlePhoto)" class="placeholder"
alt="{{$page->title}}" />
@can('update', $page)
<a href="{{route('content.edit', ['page' => $page])}}">
@if(!view()->exists(template_name($page->template, false)))
<i class="fa fa-2x text-warning fa-warning" data-toggle="tooltip"
title="@lang('admin/contents.invalidTemplateSelected')"></i>
@else
<img src="{{asset('resources/assets/admin/img/placeholder.png')}}"
class="placeholder"
alt="{{$page->title}}" />
@if(!empty($page->titlePhoto))
<img src="@thumbnail($page->titlePhoto)" class="placeholder"
alt="{{$page->title}}" />
@else
<img src="{{asset('resources/assets/admin/img/placeholder.png')}}"
class="placeholder"
alt="{{$page->title}}" />
@endif
@endif
</a>
@else
@if(!empty($page->titlePhoto))
<img src="@thumbnail($page->titlePhoto)" class="placeholder"
alt="{{$page->title}}" />
@endif
</a>
@endcannot
</div>
<div class="col-xs-10 col-md-3 col-lg-4">
<a href="{{route('content.edit', ['page' => $page])}}">
@can('update', $page)
<a href="{{route('content.edit', ['page' => $page])}}">
{{$page->title}}
</a>
@else
{{$page->title}}
</a>
@endcan
@if($page->isHomepage) <span
class="m-l-10 tag tag-primary">@lang('admin/contents.homepage')</span> @endif
@@ -85,38 +99,45 @@
<ul class="item-actions-list">
@if(!$page->isHomepage)
<li>
<a href="{{route('content.setHomepage', ['page' => $page])}}"
data-toggle="tooltip"
title="@lang('admin/contents.setHomepage')">
<i class="fa fa-home"></i>
</a>
</li>
@can('set-homepage', $page)
<li>
<a href="{{route('content.setHomepage', ['page' => $page])}}"
data-toggle="tooltip"
title="@lang('admin/contents.setHomepage')">
<i class="fa fa-home"></i>
</a>
</li>
@endcan
@endif
<li>
<a class="edit" href="{{route('content.edit', ['page' => $page])}}"
data-toggle="tooltip" title="@lang('admin/contents.editPlain')">
<i class="fa fa-pencil"></i>
</a>
</li>
@can('update', $page)
<li>
<a class="edit" href="{{route('content.edit', ['page' => $page])}}"
data-toggle="tooltip" title="@lang('admin/contents.editPlain')">
<i class="fa fa-pencil"></i>
</a>
</li>
@endcan
@if($page->isDraft())
<li>
<a href="{{route('content.changeStatus', ['page' => $page, 'status' => 'public'])}}"
class="confirm" data-toggle="tooltip"
title="@lang('admin/contents.makePublic')">
<i class="fa fa-eye"></i>
</a>
</li>
<li>
<a href="{{route('content.changeStatus', ['page' => $page, 'status' => 'protected'])}}"
class="confirm" data-toggle="tooltip"
title="@lang('admin/contents.makeProtected')">
<i class="fa fa-lock"></i>
</a>
</li>
@can('publish', $page)
<li>
<a href="{{route('content.changeStatus', ['page' => $page, 'status' => 'public'])}}"
class="confirm" data-toggle="tooltip"
title="@lang('admin/contents.makePublic')">
<i class="fa fa-eye"></i>
</a>
</li>
@endcan
@can('protect', $page)
<li>
<a href="{{route('content.changeStatus', ['page' => $page, 'status' => 'protected'])}}"
class="confirm" data-toggle="tooltip"
title="@lang('admin/contents.makeProtected')">
<i class="fa fa-lock"></i>
</a>
</li>
@endcan
@else
<li>
<a href="{{route('page.content', ['url' => $page->url])}}"
@@ -125,26 +146,30 @@
class="button tiny secondary"><i class="fa fa-globe"></i>
</a>
</li>
<li>
<a href="{{route('content.changeStatus', ['page' => $page, 'status' => 'draft'])}}"
class="button tiny warning confirm" data-toggle="tooltip"
title="@lang('admin/contents.makeDraft')">
<i class="fa fa-eye-slash"></i>
</a>
</li>
@can('draft', $page)
<li>
<a href="{{route('content.changeStatus', ['page' => $page, 'status' => 'draft'])}}"
class="button tiny warning confirm" data-toggle="tooltip"
title="@lang('admin/contents.makeDraft')">
<i class="fa fa-eye-slash"></i>
</a>
</li>
@endcan
@endif
<li>
<a href="{{route('content.delete', ['page' => $page])}}"
class="button tiny alert remove confirm" data-toggle="tooltip"
title="@lang('admin/contents.deletePage')"><i
class="fa fa-trash-o"></i>
</a>
</li>
@can('delete', $page)
<li>
<a href="{{route('content.delete', ['page' => $page])}}"
class="button tiny alert remove confirm" data-toggle="tooltip"
title="@lang('admin/contents.deletePage')"><i
class="fa fa-trash-o"></i>
</a>
</li>
@endcan
</ul>
</div>
</div>
</div>
</div>
@endforeach
@@ -2,10 +2,13 @@
@section('pageHeading', @trans('admin/fileManager.edit', ['name' => $file->original_filename]))
@section('headerButtons')
<a href="{{route('upload.delete', ['id' => $file->id])}}" class="btn btn-danger btn-sm confirm rounded" title="@lang('admin/fileManager.delete')">
<i class="fa fa-trash"></i>
</a>
@endsection
@can('delete', $file)
<a href="{{route('upload.delete', ['id' => $file->id])}}" class="btn btn-danger btn-sm confirm rounded"
title="@lang('admin/fileManager.delete')">
<i class="fa fa-trash"></i>
</a>
@endcan
@endsection
@section('content')
@@ -18,21 +21,24 @@
<div class="col-lg-4">
<div class="row callout secondary">
<h3>{{$file->original_filename}}</h3>
<h3>{{$file->original_filename}}</h3>
<ul>
<li>@lang('admin/fileManager.createdAt'): {{$file->created_at}}</li>
<li>@lang('admin/fileManager.updatedAt'): {{$file->updated_at}}</li>
<li>@lang('admin/fileManager.mime'): {{$file->mime_type}}</li>
<li>@lang('admin/fileManager.hash'): <span title="{{$file->file_hash}}">{{str_limit($file->file_hash, 10)}}</span></li>
<li>@lang('admin/fileManager.url'): <a href="{{config('app.upload_url')}}/{{$file->filename}}">{{$file->filename}}</a></li>
<li>@lang('admin/fileManager.fileSize'): {{\App\CMS\Helpers\FileManager::getFormattedSize($file)}}</li>
<ul>
<li>@lang('admin/fileManager.createdAt'): {{$file->created_at}}</li>
<li>@lang('admin/fileManager.updatedAt'): {{$file->updated_at}}</li>
<li>@lang('admin/fileManager.mime'): {{$file->mime_type}}</li>
<li>@lang('admin/fileManager.hash'): <span
title="{{$file->file_hash}}">{{str_limit($file->file_hash, 10)}}</span></li>
<li>@lang('admin/fileManager.url'): <a
href="{{config('app.upload_url')}}/{{$file->filename}}">{{$file->filename}}</a></li>
<li>@lang('admin/fileManager.fileSize')
: {{\App\CMS\Helpers\FileManager::getFormattedSize($file)}}</li>
@foreach($extraInfo as $column => $info)
<li>{{$column}}: {{$info}}</li>
@endforeach
@foreach($extraInfo as $column => $info)
<li>{{$column}}: {{$info}}</li>
@endforeach
</ul>
</ul>
</div>
<div class="row">
@@ -49,6 +55,6 @@
@section('javascripts')
<script type="text/javascript" src="{{asset('/resources/assets/js/vendor/highlightjs/highlight.min.js')}}"></script>
<script type="text/javascript">
hljs.initHighlightingOnLoad();
hljs.initHighlightingOnLoad ();
</script>
@stop
@@ -1,33 +1,34 @@
<form method="POST" action="{{route('upload.postEdit', ['id' => $file->id])}}" enctype="multipart/form-data">
{!! csrf_field() !!}
@can('update', $file)
<form method="POST" action="{{route('upload.postEdit', ['id' => $file->id])}}" enctype="multipart/form-data">
{!! csrf_field() !!}
<label class="control-label">
@lang('admin/fileManager.name')
</label>
<label class="control-label">
@lang('admin/fileManager.name')
</label>
<input class="form-control" type="text" name="name" id="name" value="{{$file->name}}" />
<input class="form-control" type="text" name="name" id="name" value="{{$file->name}}" />
<label class="control-label">
@lang('admin/fileManager.keywords')
</label>
<label class="control-label">
@lang('admin/fileManager.keywords')
</label>
<input class="form-control" type="text" name="keywords" id="keywords" value="{{$file->keywords}}" />
<input class="form-control" type="text" name="keywords" id="keywords" value="{{$file->keywords}}" />
<lavel class="control-label">
@lang('admin/fileManager.directory')
</lavel>
<lavel class="control-label">
@lang('admin/fileManager.directory')
</lavel>
<select name="directory_id" class="form-control">
@include('admin/fileManager.directories.subdirectoriesOptionList', ['directory' => $root, 'depth' => 0, 'file' => $file])
</select>
<select name="directory_id" class="form-control">
@include('admin/fileManager.directories.subdirectoriesOptionList', ['directory' => $root, 'depth' => 0, 'file' => $file])
</select>
<label class="control-label">
@lang('admin/fileManager.description')
</label>
<label class="control-label">
@lang('admin/fileManager.description')
</label>
<textarea class="form-control" rows="3" name="description" id="description">{{$file->description}}</textarea>
<button type="submit" class="btn btn-primary">@lang('admin/fileManager.editButton')</button>
</form>
<textarea class="form-control" rows="3" name="description" id="description">{{$file->description}}</textarea>
<button type="submit" class="btn btn-primary">@lang('admin/fileManager.editButton')</button>
</form>
@endcan
@@ -4,7 +4,7 @@
'body' => '<a href="'.route('upload.detail', ['id' => $file->id]).'">'.\App\CMS\Helpers\FileManager::getPreview($file).'</a>',
'footerClass' => 'text-right',
'cardClass' => 'file-preview',
'footer' => (!isset($hideDelete) || !$hideDelete) ? '<a href="'.route('upload.delete', ['id' => $file->id]).'" data-toggle="tooltip"
'footer' => \Auth::user()->can('delete', $file) && (!isset($hideDelete) || !$hideDelete) ? '<a href="'.route('upload.delete', ['id' => $file->id]).'" data-toggle="tooltip"
class="btn btn-sm btn-danger confirm"
title="'.trans('admin/fileManager.delete').'">
<i class="fa fa-trash"></i>
@@ -16,20 +16,24 @@
<div class="col-lg-4">
<div id="file-manager-controls" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="new-file-title">
<h5 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#file-manager-controls"
href="#new-file" aria-expanded="false" aria-controls="new-file">
@lang('admin/fileManager.newFile')
</a>
</h5>
@can('upload', \App\Models\FileManager\File::class)
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="new-file-title">
<h5 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#file-manager-controls"
href="#new-file" aria-expanded="false" aria-controls="new-file">
@lang('admin/fileManager.newFile')
</a>
</h5>
</div>
<div id="new-file" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="new-file-title">
@include('admin.fileManager.newFileForm')
</div>
</div>
<div id="new-file" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="new-file-title">
@include('admin.fileManager.newFileForm')
</div>
</div>
@endcan
@if (!$directory->is_root)
<div class="panel panel-default">
@@ -48,20 +52,22 @@
</div>
@endif
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="new-dir-title">
<h5 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#file-manager-controls"
href="#new-dir" aria-expanded="false" aria-controls="new-dir">
@lang('admin/fileManager.newDirectory')
</a>
</h5>
@can('create', \App\Models\FileManager\Directory::class)
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="new-dir-title">
<h5 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#file-manager-controls"
href="#new-dir" aria-expanded="false" aria-controls="new-dir">
@lang('admin/fileManager.newDirectory')
</a>
</h5>
</div>
<div id="new-dir" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="new-dir-title">
@include('admin.fileManager.directories.form', ['directory' => $newDirectory, 'action' => route('upload.postNewDirectory')])
</div>
</div>
<div id="new-dir" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="new-dir-title">
@include('admin.fileManager.directories.form', ['directory' => $newDirectory, 'action' => route('upload.postNewDirectory')])
</div>
</div>
@endcan
</div>
</div>
</div>
@@ -33,7 +33,9 @@
@endforeach
</ul>
<a href="{{route('content.edit', ['id' => $page->id])}}" class="btn btn-primary">
@lang('admin/history.backToEdit')
</a>
@can('update', $page)
<a href="{{route('content.edit', ['id' => $page->id])}}" class="btn btn-primary">
@lang('admin/history.backToEdit')
</a>
@endcan
@stop
@@ -32,12 +32,24 @@
</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#user-edit" role="tab" id="user-edit-tab"
aria-controls="user-edit">
@lang('admin/userManagement.edit')
</a>
</li>
@can('update', $user)
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#user-edit" role="tab" id="user-edit-tab"
aria-controls="user-edit">
@lang('admin/userManagement.edit')
</a>
</li>
@endcan
@can('set-permissions', $user)
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#user-permissions" role="tab"
id="user-permissions-tab"
aria-controls="user-edit">
@lang('admin/userManagement.permissions')
</a>
</li>
@endcan
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#user-actions" role="tab" id="user-actions-tab"
@@ -60,9 +72,17 @@
</div>
<div class="tab-pane" id="user-edit" role="tabpanel">
@include('admin.userManagement.editForm', ['states' => $statuses])
</div>
@can('update', $user)
<div class="tab-pane" id="user-edit" role="tabpanel">
@include('admin.userManagement.editForm', ['states' => $statuses])
</div>
@endcan
@can('set-permissions', $user)
<div class="tab-pane" id="user-permissions" role="tabpanel">
@include('admin.userManagement.permissions.form')
</div>
@endcan
<div class="tab-pane" id="user-actions" role="tabpanel">
@if (!empty($actions))
@@ -29,8 +29,9 @@
name="password"
value="">
@if (\Auth::user()->role == \App\Models\User::ROLE_ADMIN && \Auth::user()->id != $user->id)
<div class="row">
<div class="row">
@can('change-role', $user)
<div class="col-lg-6">
<label class="label-control">
@@ -43,7 +44,9 @@
@endforeach
</select>
</div>
@endcan
@can('change-status', $user)
<div class="col-lg-6">
<label class="label-control">
@lang('admin/userManagement.status')
@@ -55,8 +58,8 @@
@endforeach
</select>
</div>
</div>
@endif
@endcan
</div>
<button type="submit" class="btn btn-primary">@lang('admin/userManagement.update')</button>
</form>
@@ -0,0 +1,34 @@
<form action="{{route('permissions.update', ['user' => $user])}}" method="post">
{!! csrf_field() !!}
@foreach($permissions as $permission)
<div>
<label>
<input class="checkbox" data-id="{{$permission->id}}" value="1"
@if($user->hasAbility($permission->string_id))
checked
@endif name="permissions[{{$permission->string_id}}]" type="checkbox">
<span>{{trans($permission->name)}}</span>
</label>
</div>
@if($permission->subpermissions->count() > 0)
@foreach($permission->subpermissions as $subpermission)
<div>
<label>
<i class="fa fa-fw"></i>
<input class="checkbox child-{{$subpermission->parent_id}}" value="1"
@if($user->hasAbility($permission->string_id) && $user->hasAbility($subpermission->string_id))
checked
@endif name="permissions[{{$subpermission->string_id}}]" type="checkbox">
<span>{{trans($subpermission->name)}}</span>
</label>
</div>
@endforeach
@endif
@endforeach
<button class="btn btn-primary">Ulozit</button>
</form>