diff --git a/app/CMS/Handlers/BaseHandler.php b/app/CMS/Handlers/BaseHandler.php index 7bca4c1f..a2c82693 100644 --- a/app/CMS/Handlers/BaseHandler.php +++ b/app/CMS/Handlers/BaseHandler.php @@ -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']); }); diff --git a/app/CMS/ModuleManager/Providers/ModuleManager.php b/app/CMS/ModuleManager/Providers/ModuleManager.php index b0977f4a..ee74629d 100644 --- a/app/CMS/ModuleManager/Providers/ModuleManager.php +++ b/app/CMS/ModuleManager/Providers/ModuleManager.php @@ -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) { diff --git a/app/Listeners/SetDefaultPermissions.php b/app/Listeners/SetDefaultPermissions.php new file mode 100644 index 00000000..66f3e5c1 --- /dev/null +++ b/app/Listeners/SetDefaultPermissions.php @@ -0,0 +1,27 @@ +get(); + + foreach ($permissions as $permission) { + $event->user->permissions() + ->attach($permission); + } + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 748535a8..b0db4a04 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -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]); } } diff --git a/app/Policies/BasicPolicy.php b/app/Policies/BasicPolicy.php index 85be276d..8788f819 100644 --- a/app/Policies/BasicPolicy.php +++ b/app/Policies/BasicPolicy.php @@ -28,6 +28,13 @@ abstract class BasicPolicy * @return bool */ public function manage(User $user) { + if (!$user->hasAbility($this->entity.'-management')) { +// echo "
";
+//            debug_print_backtrace();
+//            echo "
"; +// die(); + } + return $user->hasAbility($this->entity.'-management'); } diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php index ba32a24c..eb6dd2b7 100644 --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -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?) * diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 47403ba2..da038506 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -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, diff --git a/resources/lang/cs/admin/permissions.php b/resources/lang/cs/admin/permissions.php index 93aba574..61a87f02 100644 --- a/resources/lang/cs/admin/permissions.php +++ b/resources/lang/cs/admin/permissions.php @@ -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ů', diff --git a/resources/views/admin/content/formParts/publicationSetup.blade.php b/resources/views/admin/content/formParts/publicationSetup.blade.php index 62725948..479a07ff 100644 --- a/resources/views/admin/content/formParts/publicationSetup.blade.php +++ b/resources/views/admin/content/formParts/publicationSetup.blade.php @@ -5,7 +5,7 @@ + placeholder="@lang('admin/contents.field_published_from')" /> @include('admin.snippets.hasError', ['field' => 'publishedFrom']) @@ -16,7 +16,7 @@ + placeholder="@lang('admin/contents.field_published_to')" /> @include('admin.snippets.hasError', ['field' => 'publishedTo']) \ No newline at end of file diff --git a/resources/views/admin/fileManager/overview.blade.php b/resources/views/admin/fileManager/overview.blade.php index a71969ed..12959ca6 100644 --- a/resources/views/admin/fileManager/overview.blade.php +++ b/resources/views/admin/fileManager/overview.blade.php @@ -36,20 +36,22 @@ @if (!$directory->is_root) -
- + @endcan @endif @can('create', \App\Models\FileManager\Directory::class) diff --git a/resources/views/admin/userManagement/detail.blade.php b/resources/views/admin/userManagement/detail.blade.php index 2e930cd2..c7890824 100644 --- a/resources/views/admin/userManagement/detail.blade.php +++ b/resources/views/admin/userManagement/detail.blade.php @@ -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) + @endcan @endsection @section('content') diff --git a/resources/views/admin/userManagement/overview.blade.php b/resources/views/admin/userManagement/overview.blade.php index feed3740..ae789f92 100644 --- a/resources/views/admin/userManagement/overview.blade.php +++ b/resources/views/admin/userManagement/overview.blade.php @@ -3,6 +3,11 @@ @section('pageHeading', @trans('admin/userManagement.overview')) @section('headerButtons') + + + + + @foreach($statuses as $status => $translation) {{$translation}} diff --git a/routes/admin/users.php b/routes/admin/users.php index 8bd602c9..5528e7d0 100644 --- a/routes/admin/users.php +++ b/routes/admin/users.php @@ -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')