feat: update AcademicAdvisingLogController and AcademicAdvisingLogService to accept User parameter for improved access control; enhance query scoping based on user roles

This commit is contained in:
Yoga Pangestu 2026-09-03 14:44:05 +07:00
parent 80997b97b4
commit 51e943572a
2 changed files with 11 additions and 10 deletions

View File

@ -25,6 +25,7 @@ public function index(PaginatedRequest $request): Response
{
return Inertia::render('admin/services/academic-advising-logs/index', [
'logs' => $this->service->paginated(
$request->user(),
...$request->validatedWithDefaults(),
lecturerId: $request->validated('lecturer_id'),
),

View File

@ -2,17 +2,16 @@
namespace App\Services\Admin\Services;
use App\Enums\UserRole;
use App\Models\AcademicAdvisingLog;
use App\Models\User;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
class AcademicAdvisingLogService
{
public function paginated(int $perPage = 25, string $search = '', ?int $lecturerId = null): LengthAwarePaginator
public function paginated(User $user, int $perPage = 25, string $search = '', ?int $lecturerId = null): LengthAwarePaginator
{
$user = auth()->user();
return AcademicAdvisingLog::query()
->select(['id', 'lecturer_id', 'topic', 'notes', 'created_at'])
->with([
'students.user.profile',
'students.department',
@ -23,9 +22,9 @@ public function paginated(int $perPage = 25, string $search = '', ?int $lecturer
->orWhereHas('students', fn ($q) => $q->where('student_number', 'like', "%{$search}%")
->orWhereHas('user.profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))))
->when($lecturerId, fn ($q) => $q->where('lecturer_id', $lecturerId))
->when($user->hasRole('dosen'), fn ($q) => $q->where('lecturer_id', $user->lecturer?->id))
->when($user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('lecturer_id', $user->lecturer?->id))
->latest()
->paginate($perPage);
->paginate($perPage, ['id', 'lecturer_id', 'topic', 'notes', 'created_at']);
}
public function create(array $data): AcademicAdvisingLog
@ -43,10 +42,11 @@ public function create(array $data): AcademicAdvisingLog
public function update(AcademicAdvisingLog $log, array $data): AcademicAdvisingLog
{
$log->lecturer_id = $data['lecturer_id'];
$log->topic = $data['topic'] ?? null;
$log->notes = $data['notes'] ?? null;
$log->update();
$log->update([
'lecturer_id' => $data['lecturer_id'],
'topic' => $data['topic'] ?? null,
'notes' => $data['notes'] ?? null,
]);
$log->students()->sync($data['student_ids']);