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.writePotom 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 bypassedPrejavte 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.