Usermanager/Http/Controllers/Users/Api/RoleController.php

111 lines
3.4 KiB
PHP

<?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());
}
}
}