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\DataTables\RolesDataTable;
|
||||||
use Modules\UserManager\Entities\Permission;
|
use Modules\UserManager\Entities\Permission;
|
||||||
use Modules\UserManager\Entities\PermissionGroup;
|
use Modules\UserManager\Entities\PermissionGroup;
|
||||||
|
use Modules\UserManager\Http\Requests\Role\StoreRoleRequest;
|
||||||
|
use Modules\UserManager\Http\Requests\Role\UpdateRoleRequest;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
class RolesController extends Controller
|
class RolesController extends Controller
|
||||||
@ -46,24 +48,22 @@
|
|||||||
*
|
*
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function store(Request $request)
|
public function store(StoreRoleRequest $request)
|
||||||
{
|
{
|
||||||
if (is_null($this->user) || !$this->user->can('role.create')) {
|
if (is_null($this->user) || !$this->user->can('role.create')) {
|
||||||
abort(403, 'Sorry !! You are Unauthorized to create any role !');
|
abort(403, 'Sorry !! You are Unauthorized to create any role !');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validation Data
|
// Validation Data
|
||||||
$validated = $request->validate([
|
$validated = $request->validated();
|
||||||
'name' => 'required|max:100|unique:roles'
|
|
||||||
], [
|
|
||||||
'name.requried' => 'Please give a role name'
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
if ($validated) {
|
if ($validated) {
|
||||||
try {
|
try {
|
||||||
// Process Data
|
// Process Data
|
||||||
$role = Role::create(['name' => $request->name, 'guard_name' => 'web']);
|
$validated['guard_name'] = 'web';
|
||||||
|
|
||||||
|
$role = Role::create($validated);
|
||||||
|
|
||||||
$permissions = $request->input('permissions');
|
$permissions = $request->input('permissions');
|
||||||
|
|
||||||
@ -111,9 +111,9 @@
|
|||||||
*/
|
*/
|
||||||
public function edit($id)
|
public function edit($id)
|
||||||
{
|
{
|
||||||
if (is_null($this->user) || !$this->user->can('role.update')) {
|
if (is_null($this->user) || !$this->user->can('role.update')) {
|
||||||
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
|
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
|
||||||
}
|
}
|
||||||
|
|
||||||
$role = Role::findById($id, 'web');
|
$role = Role::findById($id, 'web');
|
||||||
$permissions = Permission::all();
|
$permissions = Permission::all();
|
||||||
@ -136,31 +136,30 @@
|
|||||||
*
|
*
|
||||||
* @return Response
|
* @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')) {
|
if (is_null($this->user) || !$this->user->can('role.update')) {
|
||||||
abort(403, 'Sorry !! You are Unauthorized to edit any role !');
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
session()->flash('success', 'Role has been updated !!');
|
// Validation Data
|
||||||
return redirect()->route('user.roles.index');
|
$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!!');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
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,18 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Modules\UserManager\Http\Controllers\Users\Api\RoleController;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| API Routes
|
| API Routes
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| Here is where you can register API routes for your application. These
|
| Here is where you can register API routes for your application. These
|
||||||
| routes are loaded by the RouteServiceProvider within a group which
|
| routes are loaded by the RouteServiceProvider within a group which
|
||||||
| is assigned the "api" middleware group. Enjoy building your API!
|
| is assigned the "api" middleware group. Enjoy building your API!
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Route::middleware('auth:api')->get('/usermanager', function (Request $request) {
|
Route::middleware('auth:sanctum')->group(function () {
|
||||||
return $request->user();
|
Route::resource('roles', RoleController::class);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user