Použití isAllowed v latte template?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Joacim
Člen | 229
+
0
-

Chtěl bych použít isAllowed v main template pro generování položek menu, je nějaká možnost isAllowed použít (zavolat) v Template ? nebo je jiný způsob jak generovat efektivě menu dle povolených přístupů ? nechci generovat menu podle rolí. Např v template mohu použít $user->inInRole, ale k isAllowed se mi nedaří dostat

Editoval Joacim (27. 5. 2015 15:10)

David Matějka
Moderator | 6445
+
0
-

isAllowed je ve stejne tride jako isInRole – Nette\Security\User, takze $user->isAllowed(...)

newPOPE
Člen | 648
+
0
-

Mozes si na to napisat vlastne makro.
Pokial nepotrebujes nejaku velku flexibilitu a dynamiku tak by ti to malo stacit. V sablone mas premennu $user automaticky tak len do makra das nieco ako:

# macro start
if($user->isAllowed(%node.<sem neviem ktory modifikator>)) {
 ...

# macro end
}

Keby si potreboval viac dynamicky system. Dajme tomu zo sikovnejsimi permissions tak to take jednoduche uz nie je :) (aspon mne sa pred casom nepodarilo najst riesenie okamzite)

Joacim
Člen | 229
+
0
-

Mě to bylo divné že to nefunguje, vyzkouším to, chyby byla asi v něčem jiném

Joacim
Člen | 229
+
0
-

Tak jsem to vyzkoušel a problém bude asi nakonec v Authorization Factory

namespace App\Model;

use Nette\Security\Permission;

/**
 * Description of AuthorizatorFactory
 *
 * @author srsenj
 */
class AuthorizatorFactory {

    /**
     * @return \Nette\Security\IAuthorizator
     */
    public function create() {
        $permission = new Permission();

        /* seznam uživatelských rolí */
        $permission->addRole('guest'); // Defaulr user for cleared session exception
        $permission->addRole('user');
        $permission->addRole('admin');

        /* seznam zdrojů */
        $permission->addResource('Homepage');
        $permission->addResource('Setup');

        /* seznam pravidel oprávnění */
        $permission->allow('user', array('Homepage'), 'list');
        //...

        /* admin má práva na všechno */
        $permission->allow('admin', Permission::ALL, Permission::ALL);

        return $permission;
    }
}

Nefunguje mě

$permission->allow

pokud přidávám pole Rousources a nevim proč, např array(‚Homepage‘, ‚Setup‘). Práva pro admina mě fungují ok

Editoval Joacim (8. 6. 2015 9:42)

enumag
Člen | 2118
+
0
-

Definuj „nefunguje“. A jak vypadá tvé volání isAllowed v šabloně?

Editoval enumag (8. 6. 2015 9:44)

Joacim
Člen | 229
+
0
-

Pomocí oprávnění a fce isAllowed si generuji menu v base temlate.latte

{if $user->isAllowed('Homepage')}
     <li {ifCurrent Homepage:} class="active" {/ifCurrent}>
          <a href="{$basePath}/"><i class="fa fa-fw fa-home"></i> Homepage</a>
     </li>
{/if}

bohužel pokud se přihlásím jako uživatel s rolí user nevidím nic a proto si myslím že problém bude v zápisu budto isAllowed nebo naplnění pole které posílám do allow v AFactory

enumag
Člen | 2118
+
0
-

V AuthorizatorFactory máš $permission->allow('user', array('Homepage'), 'list');, tzn. v šabloně bys musel mít {if $user->isAllowed('Homepage', 'list')}. V podstatě uživateli přidělíš jen právo „list“ na homepage ale pak se ptáš zda má všechna práva na homepage – což nemá.

Joacim
Člen | 229
+
0
-

Ok takže jsem blbej a myslel jsem si, že se dá použít isAllowed jen s vyplněným prvním parametrem, vyzkouším to – díky moc

enumag
Člen | 2118
+
0
-

Samozřejmě že dá, jenom bys v AuthorizatorFactory musel povolit všechna práva a nejen list. Takhle isAllowed naprosto korektně vrátí false.