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

Máte tri rovnocenné vstupné body a výber je na vás. Fasáda je najkratšia a odporúčaná predvoľba. Manažér — RoundlyConsulting\Permissions\PermissionsManager, koreň fasády — ponúka to isté API ako explicitnú závislosť v konštruktore, bez statických volaní. Akcie sú jednoúčelové triedy s metódou execute(), vhodné na skladanie do vašich vlastných akcií, jobov a príkazov.

Injektovanie manažéra

use RoundlyConsulting\Permissions\PermissionsManager;

final class OnboardEditor
{
    public function __construct(private PermissionsManager $permissions) {}

    public function handle(User $user): void
    {
        $this->permissions->for($user)->assignRole($this->permissions->role('editor'));
    }
}

Permissions::fake() zaregistruje fake aj v kontajneri, takže manažér injektovaný po jeho vytvorení je práve fake — jeho zápisy sa zaznamenajú rovnako ako volania fasády.

Volanie akcie

Každý zápis do katalógu či priradení si z kontajnera vyžiada jednu akciu, takže prepísanie akcie v kontajneri platí pre fasádu, manažér aj traity. Všetky akcie nájdete v RoundlyConsulting\Permissions\Actions:

use RoundlyConsulting\Permissions\Actions\GrantRoles;
use RoundlyConsulting\Permissions\Actions\SyncFromEnum;
use RoundlyConsulting\Permissions\Enums\GrantMode;
use RoundlyConsulting\Permissions\Facades\Permissions;

app(GrantRoles::class)->execute($user, ['editor'], GrantMode::Additive);
app(SyncFromEnum::class)->execute(PostPermission::class, Permissions::permissionModel());

Metóda fasády → akcia

Metóda fasádyAkciaexecute()
role()FindOrCreateRole(string|BackedEnum $name): Role
permission()FindOrCreatePermission(string|BackedEnum $name): Permission
for()->assignRole() / syncRoles()GrantRoles(Model $holder, iterable $roles, GrantMode $mode): void
for()->removeRole()RemoveRoles(Model $holder, iterable $roles): void
for()->givePermissionTo() / syncPermissions()GrantPermissions(Model $holder, iterable $permissions, GrantMode $mode): void
for()->revokePermissionTo()RevokePermissions(Model $holder, iterable $permissions): void
for()->forgetAllAuthorization()ForgetAuthorization(Model $holder): void
syncFrom() / syncRolesFrom() / owner()->syncRolesFrom()SyncFromEnum(string $enum, string $model, ?Model $owner = null): SyncResult
pruneOrphans()PruneOrphans(): int
for()->in() / until()->assignRole() / syncRoles()GrantAssignedRoles(Model $holder, iterable $roles, GrantMode $mode, AssignmentContext $context): void
for()->in() / until()->givePermissionTo() / syncPermissions()GrantAssignedPermissions(Model $holder, iterable $permissions, GrantMode $mode, AssignmentContext $context): void
for()->in()->removeRole()RemoveAssignedRoles(Model $holder, iterable $roles, Model $scope): void
for()->in()->revokePermissionTo()RevokeAssignedPermissions(Model $holder, iterable $permissions, Model $scope): void
for()->in()->forgetAllAuthorization()ForgetAssignedAuthorization(Model $holder, Model $scope): void
owner()->role()FindOrCreateOwnedRole(Model $owner, string|BackedEnum $name): Role
forgetScope()ForgetScope(Model $scope): int
pruneExpired()PruneExpired(?DateTimeInterface $endedBefore = null): int

GrantMode::Additive nikdy neodpojí existujúce priradenia; GrantMode::Authoritative zo zadanej množiny spraví úplnú množinu. SyncFromEnum dostane triedu modelu, ako ktorý má riadky vytvárať — odovzdajte Permissions::permissionModel() alebo Permissions::roleModel() — a vráti SyncResult s created, existing a changed(). Priame volanie akcie obíde manažér, preto ho fake nezaznamená.

Zápisy s rozsahom a časovým oknom majú vlastné akcie, ktoré dostanú kde a kedy ako AssignmentContext — jeden model rozsahu (null bez rozsahu) a voliteľné okno v UTC, validFrom vrátane a validUntil bez neho:

use Carbon\CarbonImmutable;
use RoundlyConsulting\Permissions\Actions\GrantAssignedRoles;
use RoundlyConsulting\Permissions\DataTransferObjects\AssignmentContext;
use RoundlyConsulting\Permissions\Enums\GrantMode;

// The same as Permissions::for($user)->in($project)->until($friday)->assignRole('editor')
app(GrantAssignedRoles::class)->execute($user, ['editor'], GrantMode::Additive, new AssignmentContext(
    scope: $project,
    validUntil: CarbonImmutable::parse('friday', 'UTC'),
));

Resolvery konfigurácie

Statické resolvery na RoundlyConsulting\Permissions\Support\PermissionRegistrar — rolesTable(), permissionsTable(), permissionRoleTable(), modelRolesTable(), modelPermissionsTable(), roleAssignmentsTable(), permissionAssignmentsTable(), keyType(), scopeKeyType(), assignmentsEnabled(), globalAppliesInScope(), roleModel() a permissionModel() — sú tiež verejné: volajú ich publikované migrácie a môžu ich volať aj vaše migrácie či vlastné dopyty. Pozri Vlastné modely a tabuľky.

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.