ACL – přístup do sekce bez přihlášení

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

Používám nastavení ACL z návodu v tutorialu. Potřeboval bych aby na jednu akci z presenteru Newsletter (konkrétně akce ‚dokoncit‘) měl přístup i host. Resp. cron, který bude automaticky spouštěn.
Díky za radu

<?php

	// roles
        $this->addRole('host');
        $this->addRole('uzivatel', 'host');
        $this->addRole('admin', 'uzivatel');

        // resources
        $this->addResource('UvodniPresenter');
        $this->addResource('AdresyPresenter');
        $this->addResource('NewsletterPresenter');

        // privileges
        $this->allow('admin', 'UvodniPresenter', NPermission::ALL);
        $this->allow('admin', 'AdresyPresenter', NPermission::ALL);
        $this->allow('admin', 'NewsletterPresenter', NPermission::ALL);

?>
Aurielle
Člen | 1281
+
0
-

$acl->allow('guest', 'NewsletterPresenter', 'dokoncit');, tedy pokud se privilege jmenuje dokoncit. Nic složitého.

Ladis-s
Člen | 53
+
0
-

To mi právě nefunguje. Mám to definované v konstruktoru třídy Acl:
<?php $this->allow(‚guest‘, ‚NewsletterPresenter‘, ‚dokoncit‘);?>

Nemusím někde definovat hosta jako quest? nebo je tak defaultně v Nette nastavený?

nanuqcz
Člen | 822
+
0
-

Nepřihlášený uživatel má v Nette automaticky roli guest (pozor, je tam na začátku G, ne Q). Takže

<?php

        // roles
        $this->addRole('guest');              //zde je změna
        $this->addRole('uzivatel', 'guest');  //zde je změna
        $this->addRole('admin', 'uzivatel');

        // resources
        $this->addResource('UvodniPresenter');
        $this->addResource('AdresyPresenter');
        $this->addResource('NewsletterPresenter');

        // privileges
        $this->allow('guest', 'NewsletterPresenter', 'dokoncit');  //a tohle tam přidat, viz to co psal gmvasek
        $this->allow('admin', 'UvodniPresenter', NPermission::ALL);
        $this->allow('admin', 'AdresyPresenter', NPermission::ALL);
        $this->allow('admin', 'NewsletterPresenter', NPermission::ALL);

?>
Ladis-s
Člen | 53
+
0
-

Nějak to pořád nechodí. Zkoušel jsem to konkrétně na akci „dokoncit“ i na všechny akce. Vždy mě to přesměruje na stránku s přihlášením.
Kde by ještě mohl být problém?
Díky

<?php
        $this->addRole('guest');
        $this->addRole('uzivatel', 'guest');
        $this->addRole('admin', 'uzivatel');

        // resources
        $this->addResource('UvodniPresenter');
        $this->addResource('AdresyPresenter');
        $this->addResource('NewsletterPresenter');

        // privileges
        $this->allow('guest', 'NewsletterPresenter', NPermission::ALL);
        $this->allow('admin', 'UvodniPresenter', NPermission::ALL);
        $this->allow('admin', 'AdresyPresenter', NPermission::ALL);
        $this->allow('admin', 'NewsletterPresenter', NPermission::ALL);

?>
Ladis-s
Člen | 53
+
0
-

Nemáte někdo ještě nějaký nápad?

Jan Tvrdík
Nette guru | 2595
+
0
-

Ladis-s wrote:

Vždy mě to přesměruje na stránku s přihlášením.

Jak vypadá ten kód, který vyvolá přesměrování?

Ladis-s
Člen | 53
+
0
-

Nějak nechápu jak to myslíš. Používám ACL jak bylo popsáno v tutoriálu. Tzn. v bootstrapu mám : Nette\Security\IAuthorizator: Acl , a pak třídu Acl jak jsem ji popisoval.
Strukturu controlleru mam rozdělenou na Base presenter a Secured presenter taktéž dle tutoriálu.

vranacik
Člen | 9
+
0
-

Ja len strielam od boku a predpokladam, že to máš nakodené dobre, takže skús premazať temp a odstrániť cookies. Viac sa nedá určiť, keďže ACL máš zapísané dobre, len ty vieš ako to máš implementované ;)

Ladis-s
Člen | 53
+
0
-

Vše jsem x-krát prošel a nedaří se. Nakonec jsem, tedy né moc čistě, nastavil přímo výjimku pro tuto akci v SecuredPresenter. Ale stejně by mě zajímalo jak to má být správně :o)