diff --git a/Http/Controllers/Users/Api/RoleController.php b/Http/Controllers/Users/Api/RoleController.php new file mode 100644 index 0000000..79b1183 --- /dev/null +++ b/Http/Controllers/Users/Api/RoleController.php @@ -0,0 +1,111 @@ +get(); + + return $this->sendResponse($roles, 'Roles retrieved successfully.'); + } + + public function show($role) + : JsonResponse + { + $role = Role::with(['permissions'])->find($role); + if (is_null($role)) { + return $this->sendError('Role not found.'); + } + + return $this->sendResponse($role, 'Role retrieved successfully.'); + } + + public function store(StoreRoleRequest $request) + : JsonResponse + { + // Validate the request... + $validated = $request->validated(); + + // Store the Role... + if ($validated) { + try { + if(!isset($validated['guard_name'])){ + $validated['guard_name'] = 'default'; + } + + $role = Role::create($validated); + + $permissions = $request->input('permissions'); + + if (!empty($permissions)) { + $role = Role::find($role->id); + $role->syncPermissions($permissions); + } + + + + return $this->sendResponse($role, 'Role created successfully.'); + } catch (Exception $e) { + return $this->sendError($e->getMessage(), $e->getCode()); + } + } + + return $this->sendError('Role created failed.', 400); + } + + public function update(UpdateRoleRequest $request, Role $role) + : JsonResponse + { + // Validate the request... + $validated = $request->validated(); + + // Store the Role... + if ($validated) { + try { + if(!isset($validated['guard_name'])){ + $validated['guard_name'] = 'default'; + } + + $role->update($validated); + + $permissions = $request->input('permissions'); + if (!empty($permissions)) { + $role->syncPermissions($permissions); + } + + return $this->sendResponse($role, 'Role updated successfully.'); + } catch (Exception $e) { + return $this->sendError($e->getMessage(), $e->getCode()); + } + } + + return $this->sendError('Role updated failed.', 400); + } + + public function destroy($id) + : JsonResponse + { + $role = Role::find($id); + if (is_null($role)) { + return $this->sendError('Role not found.'); + } + + try { + $role->delete(); + + return $this->sendResponse($role, 'Role deleted successfully.'); + } catch (Exception $e) { + return $this->sendError($e->getMessage(), $e->getCode()); + } + } + } diff --git a/Http/Controllers/Users/RolesController.php b/Http/Controllers/Users/RolesController.php index af8de08..ac2f65a 100644 --- a/Http/Controllers/Users/RolesController.php +++ b/Http/Controllers/Users/RolesController.php @@ -10,6 +10,8 @@ use Modules\UserManager\DataTables\RolesDataTable; use Modules\UserManager\Entities\Permission; use Modules\UserManager\Entities\PermissionGroup; + use Modules\UserManager\Http\Requests\Role\StoreRoleRequest; + use Modules\UserManager\Http\Requests\Role\UpdateRoleRequest; use Spatie\Permission\Models\Role; class RolesController extends Controller @@ -46,24 +48,22 @@ * * @return Response */ - public function store(Request $request) + public function store(StoreRoleRequest $request) { if (is_null($this->user) || !$this->user->can('role.create')) { abort(403, 'Sorry !! You are Unauthorized to create any role !'); } // Validation Data - $validated = $request->validate([ - 'name' => 'required|max:100|unique:roles' - ], [ - 'name.requried' => 'Please give a role name' - ]); + $validated = $request->validated(); if ($validated) { try { // Process Data - $role = Role::create(['name' => $request->name, 'guard_name' => 'web']); + $validated['guard_name'] = 'web'; + + $role = Role::create($validated); $permissions = $request->input('permissions'); @@ -111,9 +111,9 @@ */ public function edit($id) { - if (is_null($this->user) || !$this->user->can('role.update')) { - abort(403, 'Sorry !! You are Unauthorized to edit any role !'); - } + if (is_null($this->user) || !$this->user->can('role.update')) { + abort(403, 'Sorry !! You are Unauthorized to edit any role !'); + } $role = Role::findById($id, 'web'); $permissions = Permission::all(); @@ -136,31 +136,30 @@ * * @return Response */ - public function update(Request $request, $id) + public function update(UpdateRoleRequest $request, Role $role) { - if (is_null($this->user) || !$this->user->can('role.update')) { - abort(403, 'Sorry !! You are Unauthorized to edit any role !'); - } - - // Validation Data - $request->validate([ - 'name' => 'required|max:100|unique:roles,name,' . $id - ], [ - 'name.requried' => 'Please give a role name' - ]); - - $role = Role::findById($id, 'web'); - $permissions = $request->input('permissions'); - - $role->name = $request->name; - $role->save(); - - if (!empty($permissions)) { - $role->syncPermissions($permissions); + if (is_null($this->user) || !$this->user->can('role.update')) { + abort(403, 'Sorry !! You are Unauthorized to edit any role !'); } - session()->flash('success', 'Role has been updated !!'); - return redirect()->route('user.roles.index'); + // Validation Data + $validated = $request->validated(); + if ($validated) { + try { + $role->update($validated); + $permissions = $request->input('permissions'); + if (!empty($permissions)) { + $role->syncPermissions($permissions); + } + + session()->flash('success', 'Role has been updated !!'); + return redirect()->route('user.roles.index'); + + } catch (Exception $e) { + session()->flash('error', 'Role updated failed!!'); + } + + } } /** diff --git a/Http/Requests/Role/StoreRoleRequest.php b/Http/Requests/Role/StoreRoleRequest.php new file mode 100644 index 0000000..f3ae8a8 --- /dev/null +++ b/Http/Requests/Role/StoreRoleRequest.php @@ -0,0 +1,67 @@ + + */ + public function rules() + : array + { + return [ + 'name' => 'required|max:100|unique:roles,name', + 'guard_name' => 'nullable|max:100|string' + ]; + } + + /** + * Configure the validator instance. + */ + public function withValidator(Validator $validator) + : void + { + $validator->after(function (Validator $validator) { + if ($validator->errors()->any()) { + $errors = json_decode($validator->errors()->toJson(), true); + + + foreach ($errors as $key => $value) { + flash($value[0]); + } + return redirect()->route('user.roles.index')->with('error', 'Role created failed.'); + } + + }); + } + + protected function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) + : JsonResponse + { + $errors = (new ValidationException($validator))->errors(); + + throw new HttpResponseException(response()->json([ + 'success' => false, + 'errors' => $errors, + 'messages' => 'Role created failed.' + ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)); + } + } diff --git a/Http/Requests/Role/UpdateRoleRequest.php b/Http/Requests/Role/UpdateRoleRequest.php new file mode 100644 index 0000000..cf90f58 --- /dev/null +++ b/Http/Requests/Role/UpdateRoleRequest.php @@ -0,0 +1,65 @@ + + */ + public function rules() + : array + { + return [ + 'name' => 'required|max:100|unique:roles,name,' . $this->role->id, + 'guard_name' => 'nullable|max:100|string' + ]; + } + + /** + * Configure the validator instance. + */ + public function withValidator(Validator $validator) + : void + { + $validator->after(function (Validator $validator) { + if ($validator->errors()->any()) { + $error = json_decode($validator->errors()->toJson(), true); + foreach ($error as $key => $value) { + flash($value[0]); + } + + return redirect()->route('user.roles.index')->with('error', 'Role updated failed.'); + } + }); + } + + protected function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) + : JsonResponse + { + $errors = (new ValidationException($validator))->errors(); + + throw new HttpResponseException(response()->json([ + 'success' => false, + 'errors' => $errors, + 'messages' => 'Role updated failed.' + ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)); + } + } diff --git a/Routes/api.php b/Routes/api.php index 2ebed69..f2be2e7 100644 --- a/Routes/api.php +++ b/Routes/api.php @@ -1,18 +1,18 @@ get('/usermanager', function (Request $request) { - return $request->user(); -}); \ No newline at end of file + Route::middleware('auth:sanctum')->group(function () { + Route::resource('roles', RoleController::class); + });