FEATURE: add another permissions
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
@@ -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?)
|
||||
*
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user