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

Riadenie prístupu

Autorizácia jednotlivých nastavení je voliteľná a predvolene vypnutá, takže existujúce nastavenia sa nikdy neobmedzia. Zapnite ju:

OPTIONS_AUTHORIZATION=true
OPTIONS_AUTHORIZATION_GATE=true   # optional: also consult option.read / option.write

Potom na nastavení deklarujte pravidlá. authorizeRead() aj authorizeWrite() predvolene vracajú true:

use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Options\BaseOption;

final class MaintenanceModeOption extends BaseOption
{
    public function authorizeWrite(?Authenticatable $user, ?Model $owner): bool
    {
        return (bool) $user?->is_admin;
    }
}
Options::set(MaintenanceModeOption::class, true);   // throws UnauthorizedOption for non-admins

// Act on behalf of a user, or bypass entirely (e.g. system jobs):
Options::actingAs($user, fn () => Options::set(MaintenanceModeOption::class, true));
Options::withoutAuthorization(fn () => Options::set(MaintenanceModeOption::class, true));

Čo sa vynucuje

  • Čítania — get(), has(), many(), fluent API, helpery, HasOptions, skupiny a direktíva @option — overujú authorizeRead().
  • Zápisy — set(), setMany(), set() skupiny, remember() pri ukladaní, forget() a reset() — overujú authorizeWrite().
  • Zamietnutie vyhodí UnauthorizedOption s kľúčom nastavenia.
  • Options::all() výnimku nevyhodí: vynechá každé nastavenie, ktoré aktuálny používateľ čítať nesmie — a keďže overiť vie len nastavenie, ktoré pozná, aj každý uložený kľúč, ktorý nie je v registri textových kľúčov.
  • Options::export() a exportJson() čítajú tabuľku priamo a autorizáciou neprechádzajú — ich výstup neukazujte používateľom, ktorým by ste prístup zamietli.
  • Testovací fake pri zapnutej autorizácii vynucuje tie isté pravidlá.

Aktuálny používateľ

Hooky dostanú prihláseného používateľa (Auth::user(), pre hosťa null) a vlastníka rozsahu, ku ktorému sa pristupuje. actingAs() počas callbacku podstrčí iného používateľa a withoutAuthorization() vynucovanie úplne vynechá — obe potom obnovia predchádzajúci stav, aj keď callback vyhodí výnimku.

Gate abilities

Pri zapnutom authorization.use_gate sa overujú aj Gate abilities option.read a option.write — ale iba ak ich definujete. Dostanú inštanciu nastavenia a vlastníka a povoliť musí hook aj ability:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Gate;
use RoundlyConsulting\Options\BaseOption;

Gate::define('option.write', function (?User $user, BaseOption $option, ?Model $owner): bool {
    // a user may change their own settings; only admins change global ones
    return $owner !== null
        ? $owner->is($user)
        : (bool) $user?->is_admin;
});

Systémový kód a konzola

Systémový kód autorizáciu obchádza: prepojenie s konfiguráciou číta svoje nastavenia bez kontroly (beží pri štarte, keď ešte žiadny používateľ neexistuje) a rovnako aj konzolové príkazy options:list, options:get a options:set. S --as=<userKey> bežia options:get a options:set podľa pravidiel daného používateľa; ten sa načíta cez user provider predvoleného guardu:

# maintenance-mode is a registered key
php artisan options:set maintenance-mode 1 --as=1   # authorize as the user with key 1
php artisan options:get maintenance-mode            # default: authorization bypassed

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.