v1.6.0
v1.6.0
This release adds email notifications to administrators when users are created or deleted, erases profile photos together with the rest of a deleted user's personal data, and enables HTTPS for Octane by default.
Added
- Added admin email notifications for user creation and deletion, sent by the new
App\Notifications\AdminUsersChangednotification to the comma-separated addresses inI_S_ADMIN_NOTIFICATIONS_RECIPIENTS. Notifications are disabled when no recipients are set. - Added
I_S_ADMIN_NOTIFICATIONS_DELIVERYto choose how notifications are delivered:immediate: sent synchronously during the request.queued(default): sent by a queue worker.digest: changes are grouped and sent in a single "User activity digest" email every day at 18:00 by the new scheduledApp\Jobs\SendAdminDigestjob. Pending changes are stored in the newadmin_notification_digeststable.
- Added
I_S_ADMIN_NOTIFICATIONS_QUEUEto send queued notifications and the digest job on a specific queue. Leave it empty to use the default queue. - Added the
admin_notificationssection toconfig/inertia-start.php, and theApp\Services\AdminNotificationServicethat builds and dispatches the notifications.
Changed
OCTANE_HTTPSnow defaults totrueinconfig/octane.phpand.env.example.- The profile photo of a deleted user is now removed by
User::nullify(), together with the rest of their personal data, instead of byUserObserver::deleted(). The file is deleted only once the database transaction commits, since file deletion cannot be rolled back. HasAvatar::deleteAvatar()now clears the wholeavatarmedia collection, removing any leftover avatars and resetting the loaded media relation. It no longer callssave()on the model, avoiding a useless extra query.- Inertia Table header render functions now receive the TanStack header context (
column,header,table) as props, matching how cell render functions already work. - To address vulnerabilities that have been discovered in certain npm dependencies, ESLint now uses
typescript-eslintandvue-eslint-parserdirectly, with type-aware linting throughprojectService, instead of@vue/eslint-config-typescript.<script>blocks in Vue components must uselang="ts".
Fixed
- The "magic link sent" toast no longer reappears after logging in with a magic link.
Removed
- Removed the unused
resources/views/mail/admin/user_added.blade.phpmail template, replaced byresources/views/mail/admin/users_changed.blade.php. - Removed the unused
is_adminproperty from the frontendUsertype inresources/js/types/auth.ts.
Dependencies
- Updated minor and patch Composer and npm dependencies.
Upgrade Guide
- Run
composer install. - Run
npm install. - Run
php artisan migrateto create theadmin_notification_digeststable. - Rebuild frontend assets with
npm run buildor your normal frontend workflow. - To receive admin notifications, set
I_S_ADMIN_NOTIFICATIONS_RECIPIENTSto a comma-separated list of email addresses, and optionallyI_S_ADMIN_NOTIFICATIONS_DELIVERYandI_S_ADMIN_NOTIFICATIONS_QUEUE. The defaultqueueddelivery requires a running queue worker, anddigestdelivery requires the scheduler and a queue worker. - If you serve the application with Octane without HTTPS and
OCTANE_HTTPSis not set in your.envfile, setOCTANE_HTTPS=false. - If your code relied on
deleteAvatar()saving the model, callsave()explicitly after it. - If your code used
is_adminfrom the frontendUsertype, or themail.admin.user_addedview, add them back in your application or migrate to the new notification.