FEATURE: add another permissions

This commit is contained in:
Michal Kváček
2017-08-22 23:27:23 +02:00
parent 1050271915
commit 0aaa626124
13 changed files with 93 additions and 25 deletions
+2 -2
View File
@@ -131,8 +131,8 @@ abstract class BaseHandler implements BaseModuleHandler
});
// create menu with user profile
\Menu::create('profileMenu', function ($menu) {
$menu->route('users.detail', trans('admin/userManagement.profile'), [], 10, ['icon' => 'fa fa-fw fa-user icon']);
\Menu::create('profileMenu', function ($menu) use ($user) {
$menu->route('users.detail', trans('admin/userManagement.profile'), ['user' => $user], 10, ['icon' => 'fa fa-fw fa-user icon']);
$menu->addDivider(999);
$menu->route('logout', trans('admin/common.logout'), [], 1000, ['icon' => 'fa fa-fw fa-power-off icon']);
});
@@ -16,7 +16,6 @@ class ModuleManager extends ServiceProvider
// this service provider needs published config - config is merged right after this service provider
$modules = app(ModuleRepository::class)->getOnlyModules();
// dd($modules);
// iterate over all modules and enable or disable them
foreach ($modules as $module) {
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace App\Listeners;
use App\Events\CreateNewUser;
use App\Models\Permissions\Permission;
class SetDefaultPermissions
{
/**
* Handle the event.
*
* @param CreateNewUser $event
*
* @return void
*/
public function handle(CreateNewUser $event)
{
$permissions = Permission::where('default', true)
->get();
foreach ($permissions as $permission) {
$event->user->permissions()
->attach($permission);
}
}
}
+3 -3
View File
@@ -77,10 +77,10 @@ class User extends Model implements AuthenticableInterface, CanResetPassword
*/
public function hasAbility($ability)
{
if (empty(self::$abilities)) {
self::$abilities = $this->permissions->pluck('string_id')->toArray();
if (!isset(self::$abilities[$this->id])) {
self::$abilities[$this->id] = $this->permissions->pluck('string_id')->toArray();
}
return in_array($ability, self::$abilities);
return in_array($ability, self::$abilities[$this->id]);
}
}
+7
View File
@@ -28,6 +28,13 @@ abstract class BasicPolicy
* @return bool
*/
public function manage(User $user) {
if (!$user->hasAbility($this->entity.'-management')) {
// echo "<pre>";
// debug_print_backtrace();
// echo "</pre>";
// die();
}
return $user->hasAbility($this->entity.'-management');
}
+24
View File
@@ -10,6 +10,30 @@ class UserPolicy extends BasicPolicy
use HandlesAuthorization;
protected $entity = 'users';
public function before(User $user, $ability)
{
if ($ability === 'view')
return null;
return parent::before($user, $ability);
}
/**
* Can user see other users?
*
* @param User $currentUser
* @param User $user
*
* @return bool
*/
public function view(User $currentUser, User $user) {
// user can se himself
if ($currentUser->id == $user->id)
return true;
return $this->manage($currentUser);
}
/**
* Can current user updates other users (or himself?)
*
+2 -2
View File
@@ -43,21 +43,21 @@ use App\Listeners\Loggers\LogPublishContent;
use App\Listeners\Loggers\LogRemoveWidgetFromArea;
use App\Listeners\Loggers\LogSetHomepage;
use App\Listeners\Loggers\LogUploadFile;
use App\Listeners\SetDefaultPermissions;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Logout;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
CreateNewUser::class => [
LogCreatedUser::class,
SetDefaultPermissions::class,
],
EditUser::class => [
LogEditUser::class,
+1
View File
@@ -11,6 +11,7 @@ return [
'publish' => 'Publikovat',
'protect' => 'Publikovat jen pro přihlášené',
'draft' => 'Skrýt publikovanou stránku',
'view-history' => 'Zobrazit historii',
],
'users' => [
'management' => 'Správa uživatelů',
@@ -5,7 +5,7 @@
</label>
<input type="datetime" class="form-control" name="publishedFrom" value="{{old('publishedFrom', $page->publishedFrom)}}"
placeholder="@lang('admin/contents.field_publishedFrom')" />
placeholder="@lang('admin/contents.field_published_from')" />
@include('admin.snippets.hasError', ['field' => 'publishedFrom'])
</div>
@@ -16,7 +16,7 @@
</label>
<input type="datetime" class="form-control" name="publishedTo" value="{{old('publishedTo', $page->publishedTo)}}"
placeholder="@lang('admin/contents.field_publishedTo')" />
placeholder="@lang('admin/contents.field_published_to')" />
@include('admin.snippets.hasError', ['field' => 'publishedTo'])
</div>
</div>
@@ -36,20 +36,22 @@
@if (!$directory->is_root)
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="edit-dir-title">
<h5 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#file-manager-controls"
href="#edit-dir" aria-expanded="false" aria-controls="edit-dir">
@lang('admin/fileManager.editDirectory')
</a>
</h5>
@can('update', \App\Models\FileManager\Directory::class)
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="edit-dir-title">
<h5 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#file-manager-controls"
href="#edit-dir" aria-expanded="false" aria-controls="edit-dir">
@lang('admin/fileManager.editDirectory')
</a>
</h5>
</div>
<div id="edit-dir" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="edit-file-title">
@include('admin.fileManager.directories.form', ['action' => route('upload.postEditDirectory', ['id' => $directory->id])])
</div>
</div>
<div id="edit-dir" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="edit-file-title">
@include('admin.fileManager.directories.form', ['action' => route('upload.postEditDirectory', ['id' => $directory->id])])
</div>
</div>
@endcan
@endif
@can('create', \App\Models\FileManager\Directory::class)
@@ -3,10 +3,13 @@
@section('pageHeading', trans('admin/userManagement.profile'))
@section('pageDescription', @trans('admin/userManagement.detail', ['name' => $user->name, 'email' => $user->email]))
@section('headerButtons')
@can('manage', \App\Models\User::class)
<a href="{{route('users.overview')}}" class="btn btn-secondary btn-sm rounded"
title="@lang('admin/userManagement.overview')">
<i class="fa fa-list"></i>
</a>
@endcan
@endsection
@section('content')
@@ -3,6 +3,11 @@
@section('pageHeading', @trans('admin/userManagement.overview'))
@section('headerButtons')
<a class="btn rounded btn-primary" href="{{route('users.new')}}">
<i class="fa fa-plus"></i>
</a>
@foreach($statuses as $status => $translation)
<a class="btn rounded @if($status != $currentStatus) btn-secondary @else btn-primary @endif"
href="{{route('users.overview', ['status' => $status])}}">{{$translation}}</a>
+2 -2
View File
@@ -17,9 +17,9 @@ Route::group(['namespace' => 'Users'], function () {
->middleware('can:update,user');
// display user detail in admin
Route::get('users/detail/{user?}', 'UserDetail@getDetail')
Route::get('users/detail/{user}', 'UserDetail@getDetail')
->name('users.detail')
->middleware('can:manage,' . \App\Models\User::class);
->middleware('can:view,user');
// method for saving edited data of user
Route::post('users/edit/{user}', 'EditUser@postEdit')