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

Autorizácia je predvolene vypnutá, takže existujúci kód sa nezmení. Zapnete ju cez comments.authorization (COMMENTS_AUTHORIZATION=true) a registráciou policy pre model Comment. Balík obsahuje povoľujúci základ — každá ability vracia true — ktorý rozšírite:

use Illuminate\Support\Facades\Gate;
use RoundlyConsulting\Comments\Models\Comment;
use RoundlyConsulting\Comments\Policies\CommentPolicy;

Gate::policy(Comment::class, CommentPolicy::class);

Abilities

AbilityKontroluje juArgument
createKaždý zápis — builder, write(), writeComment()Subjekt — pri odpovedi pôvodný subjekt, ku ktorému sa pripája
updateComments::update()Comment
deleteComments::delete(), deleteAll()Comment
restoreComments::restore()Comment
moderateComments::approve() / hide(), approveAll() / hideAll()Comment
lock / unlockComments::lock() / unlock(), lockThread() / unlockThread(), lockReplies() / unlockReplies()Subjekt, pri zámku vlákna Comment

Kontroly bežia voči aktuálne prihlásenému používateľovi (pri hosťovi je $user null) a zamietnutie vyhodí UnauthorizedCommentActionException. Policy zaregistrovaná pre Comment platí aj pre podtriedu nastavenú v comments.model; ak nie je zaregistrovaná žiadna, automatické vyhľadávanie v Laraveli použije pribalenú povoľujúcu CommentPolicy.

Vlastná policy

create dostane komentovaný subjekt — pri odpovedi pôvodný subjekt, ku ktorému sa pripája — takže môžete rozhodovať podľa subjektu; lock a unlock dostanú to, čo sa zamyká. Vlastná policy, ktorej niektorá z metód chýba, danú akciu zamietne, preto rozšírte pribalenú CommentPolicy:

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Comments\Policies\CommentPolicy;

class ProjectCommentPolicy extends CommentPolicy
{
    public function create(?Model $user, ?Model $commentable = null): bool
    {
        return $user !== null && $commentable instanceof Project && $commentable->hasMember($user);
    }

    public function lock(?Model $user, Model $lockable): bool
    {
        return $user?->isModerator() ?? false;
    }
}
namespace App\Policies;

use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Comments\Models\Comment;
use RoundlyConsulting\Comments\Policies\CommentPolicy as BaseCommentPolicy;

class CommentPolicy extends BaseCommentPolicy
{
    public function update(?Model $user, Comment $comment): bool
    {
        return $user !== null && $comment->actor?->is($user) === true;
    }

    public function delete(?Model $user, Comment $comment): bool
    {
        return $this->update($user, $comment);
    }
}

// AppServiceProvider::boot()
Gate::policy(\RoundlyConsulting\Comments\Models\Comment::class, \App\Policies\CommentPolicy::class);

Odpoveď 403

Balík nemá žiadne routy, preto výnimka nie je HTTP výnimkou. Ak chcete z vlastných controllerov odpovedať kódom 403, premapujte ju na AuthorizationException z Laravelu:

use Illuminate\Auth\Access\AuthorizationException;
use RoundlyConsulting\Comments\Exceptions\UnauthorizedCommentActionException;

// bootstrap/app.php
->withExceptions(function (Exceptions $exceptions): void {
    $exceptions->map(fn (UnauthorizedCommentActionException $e) => new AuthorizationException($e->getMessage()));
})

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.