NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Teams for Laravel

Č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 days

Po 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 member

To 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 kryptomien

Odoslaní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.