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