diff --git a/app/Http/Controllers/RolesController.php b/app/Http/Controllers/RolesController.php index 93fd8ff..c7964b5 100644 --- a/app/Http/Controllers/RolesController.php +++ b/app/Http/Controllers/RolesController.php @@ -10,6 +10,7 @@ use Modules\Usermanagement\Http\Requests\RoleRequest; use Modules\Usermanagement\Models\Permission; use Modules\Usermanagement\Models\PermissionGroup; + use Modules\Usermanagement\Models\Position; use Modules\Usermanagement\Models\Role; /** @@ -48,7 +49,7 @@ public function index() { // Check if the authenticated user has the required permission to view roles - if (is_null($this->user) || !$this->user->can('roles.view')) { + if (is_null($this->user) || !$this->user->can('roles.read')) { //abort(403, 'Sorry! You are not allowed to view roles.'); } @@ -70,7 +71,7 @@ public function store(RoleRequest $request) { // Check if the authenticated user has the required permission to store roles - if (is_null($this->user) || !$this->user->can('roles.store')) { + if (is_null($this->user) || !$this->user->can('roles.create')) { //abort(403, 'Sorry! You are not allowed to store roles.'); } @@ -115,8 +116,9 @@ } $permissiongroups = PermissionGroup::all(); + $positions = Position::all(); // Return the view for creating a new role - return view('usermanagement::roles.create',compact('permissiongroups')); + return view('usermanagement::roles.create', compact('permissiongroups', 'positions')); } /** @@ -130,7 +132,7 @@ public function show($id) { // Check if the authenticated user has the required permission to view roles - if (is_null($this->user) || !$this->user->can('roles.view')) { + if (is_null($this->user) || !$this->user->can('roles.read')) { abort(403, 'Sorry! You are not allowed to view roles.'); } @@ -154,7 +156,7 @@ public function edit($id) { // Check if the authenticated user has the required permission to edit roles - if (is_null($this->user) || !$this->user->can('roles.edit')) { + if (is_null($this->user) || !$this->user->can('roles.update')) { //abort(403, 'Sorry! You are not allowed to edit roles.'); } @@ -162,8 +164,9 @@ $role = Role::find($id); $permissions = Permission::all(); $permissiongroups = PermissionGroup::all(); + $positions = Position::all(); // Return the view for editing the role - return view('usermanagement::roles.create', compact('role','permissions','permissiongroups')); + return view('usermanagement::roles.create', compact('role', 'permissions', 'permissiongroups', 'positions')); } @@ -272,7 +275,7 @@ */ public function dataForDatatables(Request $request) { - if (is_null($this->user) || !$this->user->can('roles.view')) { + if (is_null($this->user) || !$this->user->can('roles.read')) { //abort(403, 'Sorry! You are not allowed to view users.'); } @@ -283,7 +286,7 @@ if ($request->has('search') && !empty($request->get('search'))) { $search = $request->get('search'); $query->where(function ($q) use ($search) { - $q->where('name', 'LIKE', "%$search%"); + $q->whereRaw('LOWER(name) LIKE ?', ['%' . strtolower($search) . '%']); }); } diff --git a/app/Http/Requests/RoleRequest.php b/app/Http/Requests/RoleRequest.php index e803972..5367c5a 100644 --- a/app/Http/Requests/RoleRequest.php +++ b/app/Http/Requests/RoleRequest.php @@ -23,6 +23,7 @@ $rules = [ 'guard_names' => 'required|string|in:web,api', + 'position_id' => 'nullable|exists:positions,id', ]; if ($this->method() === 'PUT') { @@ -41,6 +42,3 @@ ]); } } - - - diff --git a/app/Models/Role.php b/app/Models/Role.php index d54c527..a6d22c3 100644 --- a/app/Models/Role.php +++ b/app/Models/Role.php @@ -11,6 +11,17 @@ { use softDeletes, LogsActivity; + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'name', + 'guard_name', + 'position_id', + ]; + /** * Retrieve the activity log options for this role. * @@ -22,4 +33,11 @@ return LogOptions::defaults()->logAll()->useLogName('User Management|Roles : '); } + /** + * Get the position that owns the role. + */ + public function position() + { + return $this->belongsTo(Position::class); + } } diff --git a/database/migrations/2024_10_01_000001_add_position_id_to_roles_table.php b/database/migrations/2024_10_01_000001_add_position_id_to_roles_table.php new file mode 100644 index 0000000..28b04c0 --- /dev/null +++ b/database/migrations/2024_10_01_000001_add_position_id_to_roles_table.php @@ -0,0 +1,45 @@ +unsignedBigInteger('position_id')->nullable()->after('guard_name'); + $table->foreign('position_id') + ->references('id') + ->on('positions') + ->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $tableNames = config('permission.table_names'); + + if (empty($tableNames)) { + throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); + } + + Schema::table($tableNames['roles'], function (Blueprint $table) { + $table->dropForeign(['position_id']); + $table->dropColumn('position_id'); + }); + } +}; diff --git a/resources/views/roles/create.blade.php b/resources/views/roles/create.blade.php index c9f0879..d1489de 100644 --- a/resources/views/roles/create.blade.php +++ b/resources/views/roles/create.blade.php @@ -6,81 +6,97 @@ @section('content')