Add Role API
This commit is contained in:
parent
4be15459a7
commit
55ba120a1d
111
Http/Controllers/Users/Api/RoleController.php
Normal file
111
Http/Controllers/Users/Api/RoleController.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\UserManager\Http\Controllers\Users\Api;
|
||||
|
||||
use App\Http\Controllers\ApiController;
|
||||
use Exception;
|
||||
use Modules\UserManager\Http\Requests\Role\StoreRoleRequest;
|
||||
use Modules\UserManager\Http\Requests\Role\UpdateRoleRequest;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class RoleController extends ApiController
|
||||
{
|
||||
public function index()
|
||||
: JsonResponse
|
||||
{
|
||||
$roles = Role::with(['permissions'])->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());
|
||||
}
|
||||
}
|
||||
}
|
@ -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');
|
||||
|
||||
@ -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');
|
||||
$validated = $request->validated();
|
||||
if ($validated) {
|
||||
try {
|
||||
$role->update($validated);
|
||||
$permissions = $request->input('permissions');
|
||||
|
||||
$role->name = $request->name;
|
||||
$role->save();
|
||||
|
||||
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!!');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
67
Http/Requests/Role/StoreRoleRequest.php
Normal file
67
Http/Requests/Role/StoreRoleRequest.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\UserManager\Http\Requests\Role;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Validation\Validator;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class StoreRoleRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize()
|
||||
: bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
|
||||
*/
|
||||
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));
|
||||
}
|
||||
}
|
65
Http/Requests/Role/UpdateRoleRequest.php
Normal file
65
Http/Requests/Role/UpdateRoleRequest.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\UserManager\Http\Requests\Role;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
class UpdateRoleRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize()
|
||||
: bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
|
||||
*/
|
||||
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));
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\UserManager\Http\Controllers\Users\Api\RoleController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@ -13,6 +13,6 @@ use Illuminate\Http\Request;
|
||||
|
|
||||
*/
|
||||
|
||||
Route::middleware('auth:api')->get('/usermanager', function (Request $request) {
|
||||
return $request->user();
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::resource('roles', RoleController::class);
|
||||
});
|
Loading…
Reference in New Issue
Block a user