ACL a ověření zda je uživatel vlastníkem zdroje
- hancs
- Člen | 57
Jan Tvrdík napsal(a):
Možná pomůže přednáška od Davida Matějky
Díky moc Honzo. Zkoušel jsem napasovat ten example na mojí aplikaci, ale zasekl jsem se na téhle chybě:
Accessing methods as properties via $obj->create is deprecated
je to vyvolané tímhle v configu:
<?php
- App\Model\Autorizace\PermissionFactory
- App\Model\Autorizace\Authorizator(@App\Model\Autorizace\PermissionFactory::create)
?>
V DI zatím trochu plavu, tak bych potřeboval poradit.
- David Matějka
- Moderator | 6445
zkus
- App\Model\Autorizace\Authorizator(@App\Model\Autorizace\PermissionFactory::create())
- David Matějka
- Moderator | 6445
@hancs mame na to specialni makro ifAllowed, takze v latte pak jen
{ifAllowed $organization, ApiKey, create}
{control apiKeyForm}
{/ifAllowed}
- hancs
- Člen | 57
David Matějka napsal(a):
@hancs mame na to specialni makro ifAllowed, takze v latte pak jen
{ifAllowed $organization, ApiKey, create} {control apiKeyForm} {/ifAllowed}
Děkuji za vytrvalost. A můžu se přes tohle makro nějak dotázat jestli daný uživatel, má právo na nějaký zdroj? Jde mi o to, že v latte vypisuji nějaké položky a chci zobrazit editační tlačítko, jen u té položky, kde je přihlášený uživatel vlastníkem.
- David Matějka
- Moderator | 6445
@hancs vyuziva to tu metodu isAllowed z presenteru, kde se to opravneni kontroluje prave proti tomu aktualne prihlasenemu uzivateli
- hancs
- Člen | 57
@DavidMatějka Moc děkuji, funguje to parádně! Jen ještě takový malý dotaz. Potřebuji aby se mi role kombinovala ještě se stavem v kterém se objekt, který chci kontrolovat nachází. Konkrétně mám například zakázku a u ní určitá práva pro uživatele, ale pokud je zakázka dokončená, chci mu práva oříznout. Pokud to chápu správně, tak si vytvořím nějaké dynamické role u zakázky, které budu přiřazovat ve funkci:
<?php
public function getIdentityRoles(Identity $identity)
{
$roles = [];
A tady porovnám jak identitu, tak můj stav a přiřadím příslušnou roli.
}
?>
A nakonec už jen v PermissionFactory nastavím příslušná práva?
Chápu to používání správně?
Ještě jednou díky!
- David Matějka
- Moderator | 6445
@hancs oba pristupy by mely byt OK. kde jsem to potreboval, tak jsem prave mel vlastni action. ale pro komplexnejsi budou asi lepsi ruzne role
- hancs
- Člen | 57
@DavidMatějka Mohu se ještě zeptat jak je to s tím latte makrem,
pokud chci kontrolovat jen nějaká globální práva? Například jestli
uživatel má právo přidat nějaký příspěvek.
Chtěl jsem použít:
{ifAllowed article, add}
tlačítko
{/ifAllowed}
Narážím na:
Class ‚App\Model\GlobalScope‘ not found
Mockrát díky.
- David Matějka
- Moderator | 6445
@hancs jo vidis, global scope jsem do toho prikladu zapomnel dat. je to jen dummy implementace authorization scope:
<?php declare(strict_types = 1);
namespace App\Model;
use Nette\Security\Permission;
use App\Core\Security\Identity;
class GlobalScope implements IAuthorizationScope
{
public function getIdentityRoles(Identity $identity): array
{
return [];
}
}
(pripadne vratis jen nejake globalni role z Identity)