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) -