Časovo obmedzené členstvo
Parametrom expiresAt udelíte dočasný prístup — externistom či na skúšobné obdobie. Po jeho uplynutí člen nemá žiadnu rolu, a teda ani oprávnenia, takže každá kontrola oprávnení cez Gate aj Blade prístup zamietne:
use RoundlyConsulting\Teams\Facades\Teams;
use RoundlyConsulting\Teams\Models\Member;
Teams::for($team)->members()->add($contractor, 'editor', expiresAt: now()->addDays(30));
$member = Teams::for($team)->members()->find($contractor);
$member->isExpired(); // true once expires_at has passed
$member->role(); // null once expired — no role, no permissions
Member::query()->active(); // expires_at null or in the future
Member::query()->expired(); // expires_at set and in the past
Member::query()->expiringWithin(7); // active, lapsing within 7 daysPo expirácii zlyhajú can('teams.…'), @teamPermission, @teamRole, memberHasRole(), hasTeamRole(), teamsWithRole() aj teamRole(). Samotný riadok zostáva kvôli auditu až do odstránenia, takže hasMember() a belongsToTeam() ho stále nájdu — prístup preto strážte rolou či oprávnením, nie holým členstvom.
Predĺženie
// While the membership is active, a new expiresAt extends it in place.
Teams::for($team)->members()->add($contractor, 'editor', expiresAt: now()->addDays(30));
// Re-adding an active member without expiresAt keeps the current expiry.
Teams::for($team)->members()->add($contractor, 'editor');
// Once it has expired, re-adding revives it as a fresh membership: role, meta and
// expiry come from this call (no expiresAt = permanent), and TeamMemberAdded fires.
Teams::for($team)->members()->add($contractor, 'editor', expiresAt: now()->addDays(30));Komu čoskoro vyprší
teams:members:expiring vypíše aktívne členstvá, ktoré vypršia v danom okne, aby ste mohli poslať pripomienku ešte pred stratou prístupu. Predvolene iba číta — MembershipExpiringSoon spustí len s --notify. Už expirované a neobmedzené členstvá vynechá:
php artisan teams:members:expiring # read-only table, window from config
php artisan teams:members:expiring --days=3 # narrow the window
php artisan teams:members:expiring --days=3 --notify # fire MembershipExpiringSoon per memberTo isté zvládnete z vlastného plánovaného jobu — bez Artisanu — alebo sa dopytujte priamo; udalosť potom premeňte na notifikáciu:
use RoundlyConsulting\Teams\Facades\Teams;
use RoundlyConsulting\Teams\Models\Member;
Teams::members()->expiring(days: 7); // Collection<Member> — read-only
Teams::members()->notifyExpiring(days: 7); // fires MembershipExpiringSoon per member
// or query directly:
Member::query()->expiringWithin(7)->get();use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Teams\Events\MembershipExpiringSoon;
Event::listen(function (MembershipExpiringSoon $event): void {
// $event->member->member — whose access lapses
// $event->member->expires_at — when
});Odstránenie expirovaných členstiev
teams:members:prune (alebo Teams::members()->prune()) natrvalo zmaže členstvá, ktorých expirácia uplynula pred viac ako members.prune_after (30 dní), a pre každý riadok spustí MembershipExpired. Member je aj Prunable s rovnakým oknom, takže php artisan model:prune odstráni tie isté riadky tou istou cestou — MembershipExpired sa spustí v oboch prípadoch:
use Illuminate\Support\Facades\Schedule;
// routes/console.php
Schedule::command('teams:members:expiring --notify')->daily(); // renewal reminders
Schedule::command('teams:members:prune')->daily(); // force-delete + MembershipExpired
// or from your own job:
Teams::members()->prune(); // int — the same force-delete + MembershipExpired
// php artisan model:prune collects the same rows and fires MembershipExpired too.Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.