diff --git a/app/Http/Controllers/Admin/RoleController.php b/app/Http/Controllers/Admin/RoleController.php index 3850c180..9a521938 100644 --- a/app/Http/Controllers/Admin/RoleController.php +++ b/app/Http/Controllers/Admin/RoleController.php @@ -10,6 +10,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Spatie\Permission\Models\Permission; use Spatie\Permission\Models\Role; @@ -66,7 +67,8 @@ class RoleController extends Controller $role = Role::create([ 'name' => $request->name, - 'color' => $request->color + 'color' => $request->color, + 'power' => $request->power ]); if ($request->permissions) { @@ -96,6 +98,10 @@ class RoleController extends Controller { $this->checkPermission(self::EDIT_PERMISSION); + if(Auth::user()->roles[0]->power < $role->power){ + return back()->with("error","You dont have enough Power to edit that Role"); + } + $permissions = Permission::all(); return view('admin.roles.edit', compact('role', 'permissions')); @@ -111,6 +117,10 @@ class RoleController extends Controller { $this->checkPermission(self::EDIT_PERMISSION); + if(Auth::user()->roles[0]->power < $role->power){ + return back()->with("error","You dont have enough Power to edit that Role"); + } + if ($request->permissions) { if($role->id != 1){ //disable admin permissions change $role->syncPermissions($request->permissions); @@ -201,6 +211,9 @@ class RoleController extends Controller ->editColumn('permissionscount', function ($query){ return $query->permissions_count; }) + ->editColumn('power', function (Role $role){ + return $role->power; + }) ->rawColumns(['actions', 'name']) ->make(true); } diff --git a/database/migrations/2023_05_05_090127_role_power.php b/database/migrations/2023_05_05_090127_role_power.php new file mode 100644 index 00000000..9c8da51d --- /dev/null +++ b/database/migrations/2023_05_05_090127_role_power.php @@ -0,0 +1,32 @@ +integer('power')->after("color")->default(50); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('roles', function (Blueprint $table) { + $table->dropColumn('power'); + }); + } +}; diff --git a/database/seeders/PermissionsSeeder.php b/database/seeders/PermissionsSeeder.php index e688bdf0..e7738e70 100644 --- a/database/seeders/PermissionsSeeder.php +++ b/database/seeders/PermissionsSeeder.php @@ -66,10 +66,10 @@ class PermissionsSeeder extends Seeder 'user.referral', ]; /** @var Role $adminRole */ - $adminRole = Role::updateOrCreate(["name"=>"Admin","color"=>"#fa0000"]); - $supportRole = Role::updateOrCreate(["name"=>"Support-Team","color"=>"#00b0b3"]); - $clientRole = Role::updateOrCreate(["name"=>"Client","color"=>"#008009"]); - $userRole = Role::updateOrCreate(["name"=>"User","color"=>"#0052a3"]); + $adminRole = Role::updateOrCreate(["name"=>"Admin","color"=>"#fa0000", "power"=>100]); + $supportRole = Role::updateOrCreate(["name"=>"Support-Team","color"=>"#00b0b3","power"=>50]); + $clientRole = Role::updateOrCreate(["name"=>"Client","color"=>"#008009","power"=>10]); + $userRole = Role::updateOrCreate(["name"=>"User","color"=>"#0052a3","power"=>10]); $adminRole->givePermissionTo(Permission::findByName('*')); diff --git a/themes/default/views/admin/roles/edit.blade.php b/themes/default/views/admin/roles/edit.blade.php index 2abbe808..453233f6 100644 --- a/themes/default/views/admin/roles/edit.blade.php +++ b/themes/default/views/admin/roles/edit.blade.php @@ -25,6 +25,13 @@ name="color" value="{{ isset($role) ? $role->color : null}}"/> + +
diff --git a/themes/default/views/admin/roles/index.blade.php b/themes/default/views/admin/roles/index.blade.php index 0bc9d3a2..213a7724 100644 --- a/themes/default/views/admin/roles/index.blade.php +++ b/themes/default/views/admin/roles/index.blade.php @@ -22,6 +22,7 @@ {{__("Name")}} {{__("User count")}} {{__("Permissions count")}} + {{__("Power")}} {{__("Actions")}} @@ -49,6 +50,7 @@ {data: 'name'}, {data: 'usercount'}, {data: 'permissionscount'}, + {data: 'power'}, {data: 'actions' , sortable : false}, ], fnDrawCallback: function( oSettings ) {