---
title: "Policy a rozsah agentov — Tickets for Laravel | Roundly"
description: "TicketPolicy za API, Gate oprávnenia, ktoré definujete, manažéri s rozsahom a AgentScope, ktorý agentov obmedzí na tikety, na ktorých smú pracovať."
url: https://roundly-consulting.com/sk/open-source/navody/tickets-for-laravel/opravnenia
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Tickets for Laravel](https://roundly-consulting.com/sk/open-source/navody/tickets-for-laravel.md)

# Policy a rozsah agentov

Policies\\TicketPolicy je autoritou API — PHP API sa jej nikdy nepýta. Registruje sa pre nakonfigurovaný model tiketu (tickets.authorization.register\_policy) a dá sa vymeniť podtriedou cez tickets.authorization.policy. Jej oprávnenia stoja na Gate oprávneniach, ktoré definujete (tickets.agent, tickets.assign, tickets.manage; merge je predvolene tickets.agent); nedefinované zamieta:

| Oprávnenie | Kto |
| --- | --- |
| `viewAny` | Ktokoľvek prihlásený (zoznam je obmedzený). |
| `view` | Agent, ktorého povoľuje rozsah agentov, žiadateľ, sledujúci (watchers.can\_view); ktokoľvek iný dostane 404. |
| `create` | Ktokoľvek prihlásený (self\_service), agenti vždy. |
| `update` | Agenti; žiadateľ len subject / description (requester\_can\_edit) a polia, ktoré smie upravovať, kým tiket nie je vyriešený. |
| `delete, restore` | Oprávnenie manage u agenta, ktorému rozsah agentov povoľuje na tikete pracovať. |
| `manageCategories, manageFields, manageTags` | Oprávnenie manage. |
| `transition` | Agenti; žiadateľ (pri participants\_can\_transition aj sledujúci) len requester\_transitions. |
| `assign` | Agenti s oprávnením assign; ktorýkoľvek agent pre seba (claim). |
| `unassign` | Agenti s oprávnením assign, alebo agent, ktorý tiket drží. |
| `reply` | Ktokoľvek, kto smie tiket vidieť, kým nie je uzavretý (409 ticket\_closed). |
| `note, viewInternal, tag, link` | Agenti. |
| `updateComment, deleteComment` | Agenti; ktokoľvek iný len vlastnú verejnú odpoveď. |
| `manageWatchers` | Agenti; ktokoľvek, kto smie tiket vidieť, pre seba. |
| `merge` | Oprávnenie merge u agenta, ktorému rozsah agentov povoľuje na tikete pracovať (overuje sa pre oba tikety). |
| `viewTags` | Agenti. |

Keď sa update pýta bez atribútov (@can('update', $ticket)), odpovie, či používateľ smie upraviť čokoľvek: predmet a popis, alebo aktívne pole zo sady polí tiketu, ktoré smie žiadateľ upravovať.

Manažéri sú agenti s rozsahom. Mazanie či obnovenie tiketu vyžaduje tickets.manage a zároveň byť agentom pre daný tiket (tickets.agent v rámci AgentScope); manažér bez tickets.agent alebo mimo rozsahu dostane rovnaké 404 ako pri skrytom tikete. Ľuďom, ktorí tikety spravujú, udeľte obe oprávnenia.

Vypnuté register\_policy neznamená zamietnuť všetko: vyhľadávanie policy v Laraveli podľa názvu priradí RoundlyConsulting\\Tickets\\Models\\Ticket k RoundlyConsulting\\Tickets\\Policies\\TicketPolicy a policy z balíka nájde aj tak. Vlastnú zaregistrujte cez Gate::policy(Ticket::class, MyTicketPolicy::class), alebo jednoducho uveďte podtriedu v tickets.authorization.policy. Neplatná policy nezaregistruje nič a tickets:doctor to nahlási.

## Rozsah agentov

Predvolene každý agent pracuje na každom tikete. Zúžiť to môžete cez Contracts\\AgentScope:

```php
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Tickets\Contracts\AgentScope;
use RoundlyConsulting\Tickets\Models\Ticket;

final readonly class ProjectMembersOnly implements AgentScope
{
    public function allows(Model $agent, Ticket $ticket): bool
    {
        return $ticket->project_id === null
            || $agent->projects()->whereKey($ticket->project_id)->exists();
    }

    public function constrain(Builder $query, Model $agent): void
    {
        // where clauses only — they are grouped and OR-ed with the requester and watcher branches
        $query->where(fn (Builder $q) => $q
            ->whereNull('project_id')
            ->orWhereIn('project_id', $agent->projects()->select('projects.id')));
    }
}
```

```php
// config/tickets.php
'authorization' => ['agent_scope' => App\Tickets\ProjectMembersOnly::class, /* … */],
```

allows() rozhoduje o jednom tikete; constrain() zužuje zoznam (visibleTo, index). Musia sa zhodovať — otestujte to tak, ako balík testuje vlastnú implementáciu. constrain() beží aj vnútri poddopytu na kľúče pre filtre a radenie len pre agentov, preto v ňom používajte len podmienky where na tabuľke tiketov.

Rozsah je autoritou pre otázku agenta pre tento tiket všade — v API aj v PHP API: v policy a resources, notifikáciách a zmienkach, vhodnosti riešiteľa, role autora správy, interných poznámkach, poliach len pre agentov, filtroch indexu len pre agentov a radení podľa last\_activity\_at, pri zlučovaní (oba tikety), druhom konci prepojenia (len číslo tiketu) aj pri mazaní a obnovovaní. Agent mimo rozsahu stále vidí tiket, ktorý založil alebo sleduje — ako žiadateľ či účastník.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/tickets-for-laravel.md)
