---
title: "Oprávnenia — Connections for Laravel | Roundly"
description: "Udeľujte, odoberajte, synchronizujte a mažte oprávnenia prepojenia; overujte jedno, niektoré alebo všetky, aj so zástupnými znakmi."
url: https://roundly-consulting.com/sk/open-source/navody/connections-for-laravel/opravnenia
language: sk
---

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

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

# Oprávnenia

Každé prepojenie nesie vlastnú sadu reťazcov oprávnení — ľubovoľné názvy, ktoré vaša aplikácia používa, napríklad view, edit alebo publish. Tie isté dva modely tak môžu mať v rôznych kontextoch rôzne práva. Duplicity sa odstraňujú automaticky.

## Zmena oprávnení

```php
use RoundlyConsulting\Connections\Facades\Connections;

$permissions = Connections::between($user, $team)->permissions();

$permissions->grant('publish');          // Connection — creates the connection if absent
$permissions->revoke('publish');         // Connection — throws ConnectionNotFound if absent
$permissions->sync('view', 'edit');      // Connection — exact set, creates if absent
$permissions->clear();                   // Connection — remove every permission; throws ConnectionNotFound if absent

$permissions->all();                     // Collection<int, string> — what is stored
$permissions->has('edit');               // bool
$permissions->hasAny('view', 'edit');    // bool
$permissions->hasAll('view', 'edit');    // bool
```

- grant() pridá oprávnenia do sady a chýbajúce prepojenie vytvorí.
- revoke() oprávnenia odoberie; ak prepojenie neexistuje, vyhodí ConnectionNotFound.
- sync() nahradí sadu presne zadanými oprávneniami a chýbajúce prepojenie vytvorí.
- clear() sadu vyprázdni a na rozdiel od sync() prepojenie nikdy nevytvorí — ak neexistuje, vyhodí ConnectionNotFound.
- Oprávnenia zadávajte explicitne — grant() a sync() nepoužijú oprávnenia pripravené cez withPermissions().
- ConnectionPermissionsChanged sa spustí, len keď sa sada naozaj zmení, a nesie predošlý aj aktuálny zoznam.
- Každý zápis je jedna transakcia, ktorá zamkne riadok dvojice, takže súbežné zápisy do jednej dvojice prebehnú po sebe: revoke nemôže zvrátiť grant bežiaci v tom istom čase a grant, ktorý prehrá preteky o vytvorenie prepojenia, oprávnenia pridá k tým, ktoré zapísal víťaz.

Trait ponúka tie isté úpravy ako metódy modelu — skratky, ktoré idú cez ten istý manažér:

```php
$user->grantThroughConnection($team, 'publish', 'archive');
$user->revokeThroughConnection($team, 'archive');
$user->syncConnectionPermissions($team, ['view', 'edit']);
$user->clearConnectionPermissions($team);

$user->permissionsThroughConnection($team);   // Collection<int, string> of the stored set
```

## Overovanie oprávnení

```php
use RoundlyConsulting\Connections\Facades\Connections;

Connections::between($user, $team)->permissions()->has('edit');              // bool
Connections::between($user, $team)->permissions()->hasAny('view', 'edit');   // bool
Connections::between($user, $team)->permissions()->hasAll('view', 'edit');   // bool

// Trait shorthand — the same checks from the connector's side.
$user->hasPermissionThroughConnection($team, 'edit');             // bool
$user->hasPermissionThroughConnection($team, 'edit', force: true);// bypass the cache
$user->hasAnyPermissionThroughConnection($team, 'view', 'edit');  // bool
$user->hasAllPermissionsThroughConnection($team, 'view', 'edit'); // bool

// On a Connection row you already hold.
$connection->hasPermission('edit');             // bool
$connection->hasAnyPermission('view', 'edit');  // bool
$connection->hasAllPermissions('view', 'edit'); // bool
```

Kontroly idú od connectora ku connectable a permissions()->has() je tá istá kontrola ako hasPermissionThroughConnection() v traite. Kým je zapnuté enforce\_active\_on\_check (predvolene áno), prepojenie v stave pending, blocked alebo po expirácii neudelí nič. Kontroly sa v rámci requestu pamätajú pre každú dvojicu — cache obídete, keď metóde traitu odovzdáte force: true (pozrite Kešovanie).

permissions()->all() aj permissionsThroughConnection() z traitu vrátia uloženú sadu bez ohľadu na stav či expiráciu — na rozhodovanie o prístupe používajte metódy kontroly.

## Zástupné znaky

Prepojenie, ktorého sada obsahuje \*, prejde akoukoľvek kontrolou oprávnenia, a segmentový zástupný znak ako posts.\* zodpovedá posts.edit. Sady bez zástupného znaku sa správajú presne ako doteraz — ide čisto o voľbu podľa uložených dát:

```php
Connections::between($user, $team)->withPermissions('posts.*')->connect();
$user->hasPermissionThroughConnection($team, 'posts.edit');  // true
$user->hasPermissionThroughConnection($team, 'users.edit');  // false

Connections::between($admin, $team)->withPermissions('*')->connect();
$admin->hasPermissionThroughConnection($team, 'anything');   // true
```

Zástupné znaky rešpektujú aj scope withPermission() a connectionsWithPermission(): zodpovedá im presné oprávnenie, \* aj koncové segmentové zástupné znaky ako posts.\* či posts.comments.\*. Iný tvar vzoru — napríklad posts.\*.edit — rešpektujú len hasPermission() a hasPermissionThroughConnection().

## 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/connections-for-laravel.md)
