tenant_id === session('tenant_id') && ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasRole('accountant') || $user->hasPermissionTo('view expenses')); } /** * Determine whether the user can view the expense. */ public function view(User $user, Expense $expense): bool { if ($user->tenant_id !== $expense->tenant_id) { return false; } if ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasRole('accountant')) { return true; } // Users can view their own expenses return $expense->requested_by === $user->id; } /** * Determine whether the user can create expenses. */ public function create(User $user): bool { return $user->tenant_id === session('tenant_id') && ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasRole('accountant') || $user->hasPermissionTo('create expenses')); } /** * Determine whether the user can update the expense. */ public function update(User $user, Expense $expense): bool { if ($user->tenant_id !== $expense->tenant_id) { return false; } // Only pending expenses can be updated if ($expense->status !== 'pending') { return false; } if ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasRole('accountant')) { return true; } return $expense->requested_by === $user->id; } /** * Determine whether the user can delete the expense. */ public function delete(User $user, Expense $expense): bool { return $user->tenant_id === $expense->tenant_id && ($user->hasRole('admin') || $user->hasPermissionTo('delete expenses')); } /** * Determine whether the user can approve/reject expenses. */ public function approve(User $user, Expense $expense): bool { return $user->tenant_id === $expense->tenant_id && ($user->hasRole('admin') || $user->hasRole('manager') || $user->hasPermissionTo('approve expenses')); } }