orderBy('name')->get(); return response()->json($roles); } public function store(Request $request): JsonResponse { $validated = $request->validate([ 'name' => 'required|string|unique:roles,name', 'permissions' => 'sometimes|array', 'permissions.*' => 'exists:permissions,name', ]); $role = Role::create(['name' => $validated['name'], 'guard_name' => 'web']); if ($request->permissions) { $role->syncPermissions($validated['permissions']); } ActivityLogger::log('role_created', "Role {$role->name} created"); return response()->json($role->load('permissions'), 201); } public function show(Role $role): JsonResponse { return response()->json($role->load('permissions')); } public function update(Request $request, Role $role): JsonResponse { $validated = $request->validate([ 'name' => 'sometimes|string|unique:roles,name,'.$role->id, 'permissions' => 'sometimes|array', 'permissions.*' => 'exists:permissions,name', ]); if (isset($validated['name'])) { $role->update(['name' => $validated['name']]); } if ($request->has('permissions')) { $role->syncPermissions($validated['permissions']); } ActivityLogger::log('role_updated', "Role {$role->name} updated"); return response()->json($role->load('permissions')); } public function destroy(Role $role): JsonResponse { if ($role->name === 'admin') { return response()->json(['message' => 'نقش ادمین قابل حذف نیست'], 422); } $role->delete(); ActivityLogger::log('role_deleted', "Role {$role->name} deleted"); return response()->json(['message' => 'نقش حذف شد']); } public function syncPermissions(Request $request, Role $role): JsonResponse { $request->validate(['permissions' => 'required|array', 'permissions.*' => 'exists:permissions,name']); $role->syncPermissions($request->permissions); return response()->json($role->load('permissions')); } public function permissions(): JsonResponse { return response()->json(Permission::orderBy('name')->get()); } }