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,