252 lines
8.4 KiB
PHP
252 lines
8.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Repositories\AccessControlRepositoryInterface;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class AccessControlController extends Controller
|
|
{
|
|
public function __construct(
|
|
private readonly AccessControlRepositoryInterface $accessControlRepository
|
|
) {
|
|
}
|
|
|
|
public function index(): JsonResponse
|
|
{
|
|
try {
|
|
return response()->json([
|
|
'data' => $this->accessControlRepository->index(),
|
|
'message' => 'Roles et permissions recuperes avec succes.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error fetching access control data: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la recuperation des roles et permissions.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function storeRole(Request $request): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => ['required', 'string', 'max:100', 'unique:roles,name'],
|
|
'guard_name' => ['nullable', 'string', 'max:50'],
|
|
'permissions' => ['nullable', 'array'],
|
|
'permissions.*' => ['string', 'max:150'],
|
|
]);
|
|
|
|
try {
|
|
$role = $this->accessControlRepository->createRole($validated);
|
|
|
|
return response()->json([
|
|
'data' => $role,
|
|
'message' => 'Role cree avec succes.',
|
|
], 201);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error creating role: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'data' => $validated,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la creation du role.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function updateRole(Request $request, string $id): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => ['sometimes', 'string', 'max:100', 'unique:roles,name,' . $id],
|
|
'guard_name' => ['nullable', 'string', 'max:50'],
|
|
'permissions' => ['nullable', 'array'],
|
|
'permissions.*' => ['string', 'max:150'],
|
|
]);
|
|
|
|
try {
|
|
$role = $this->accessControlRepository->updateRole((int) $id, $validated);
|
|
|
|
if (! $role) {
|
|
return response()->json([
|
|
'message' => 'Role non trouve.',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'data' => $role,
|
|
'message' => 'Role mis a jour avec succes.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error updating role: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'role_id' => $id,
|
|
'data' => $validated,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la mise a jour du role.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function destroyRole(string $id): JsonResponse
|
|
{
|
|
try {
|
|
$deleted = $this->accessControlRepository->deleteRole((int) $id);
|
|
|
|
if (! $deleted) {
|
|
return response()->json([
|
|
'message' => 'Role non trouve.',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Role supprime avec succes.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error deleting role: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'role_id' => $id,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la suppression du role.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function syncRolePermissions(Request $request, string $id): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'permissions' => ['required', 'array'],
|
|
'permissions.*' => ['string', 'max:150'],
|
|
]);
|
|
|
|
try {
|
|
$role = $this->accessControlRepository->syncRolePermissions((int) $id, $validated['permissions']);
|
|
|
|
if (! $role) {
|
|
return response()->json([
|
|
'message' => 'Role non trouve.',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'data' => $role,
|
|
'message' => 'Permissions du role synchronisees avec succes.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error syncing role permissions: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'role_id' => $id,
|
|
'data' => $validated,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la synchronisation des permissions du role.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function storePermission(Request $request): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => ['required', 'string', 'max:150', 'unique:permissions,name'],
|
|
'guard_name' => ['nullable', 'string', 'max:50'],
|
|
]);
|
|
|
|
try {
|
|
$permission = $this->accessControlRepository->createPermission($validated);
|
|
|
|
return response()->json([
|
|
'data' => $permission,
|
|
'message' => 'Permission creee avec succes.',
|
|
], 201);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error creating permission: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'data' => $validated,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la creation de la permission.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function updatePermission(Request $request, string $id): JsonResponse
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => ['sometimes', 'string', 'max:150', 'unique:permissions,name,' . $id],
|
|
'guard_name' => ['nullable', 'string', 'max:50'],
|
|
]);
|
|
|
|
try {
|
|
$permission = $this->accessControlRepository->updatePermission((int) $id, $validated);
|
|
|
|
if (! $permission) {
|
|
return response()->json([
|
|
'message' => 'Permission non trouvee.',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'data' => $permission,
|
|
'message' => 'Permission mise a jour avec succes.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error updating permission: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'permission_id' => $id,
|
|
'data' => $validated,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la mise a jour de la permission.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function destroyPermission(string $id): JsonResponse
|
|
{
|
|
try {
|
|
$deleted = $this->accessControlRepository->deletePermission((int) $id);
|
|
|
|
if (! $deleted) {
|
|
return response()->json([
|
|
'message' => 'Permission non trouvee.',
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Permission supprimee avec succes.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('Error deleting permission: ' . $e->getMessage(), [
|
|
'exception' => $e,
|
|
'permission_id' => $id,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Une erreur est survenue lors de la suppression de la permission.',
|
|
'error' => config('app.debug') ? $e->getMessage() : null,
|
|
], 500);
|
|
}
|
|
}
|
|
} |