IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:22.2.2019 9:42

Ahopj, mám asi hloupej dotaz ale řeším oprávnění v nette aplikaci. Oprávnění potřebuju tahat z DB, jdu posle manuálu kde je popsáno toto:

<?php
namespace App\Model;

class AuthorizatorFactory
{
    /**
     * @return Nette\Security\Permission
     */
    public static function create()
    {
        $acl = new Nette\Security\Permission;

        // pokud chceme, můžeme role a zdroje načíst z databáze
        $acl->addRole('admin');
        $acl->addRole('guest');

        $acl->addResource('backend');

        $acl->allow('admin', 'backend');
        $acl->deny('guest', 'backend');

        // případ A: role admin má menší váhu než role guest
        $acl->addRole('john', ['admin', 'guest']);
        $acl->isAllowed('john', 'backend'); // false

        // případ B: role admin má větší váhu než guest
        $acl->addRole('mary', ['guest', 'admin']);
        $acl->isAllowed('mary', 'backend'); // true

        return $acl;
    }
}

A následně to mám zaregistrovat jako službu:

services:
    # třídu Permission vytvoříme metodou create třídy AuthorizatorFactory
    - App\Model\AuthorizatorFactory::create

A můj dotaz zní. Jak to zaregistrovat když nebudu chtít funkci create jako static? Protože potřebuju přistupovat k DI databázi a pod. a potřebuju použít $this->database ... což ve static funkci pochopitelně nejde.

 
Odpovědět
22.2.2019 9:42
Avatar
Odpovídá na Ondřej Pech
Honza Prosecký:22.2.2019 14:48

Bez ::create a pak klasicky vyzadani pres treba constructor, DI to vyresolvuje. Samozrejme musis zmenit z public static function na public function

 
Nahoru Odpovědět
22.2.2019 14:48
Avatar
Roman Havránek:17.3.2019 20:41

Proč je tato metoda static, když potřebuješ jiný objekt?

Pokud chceš ve Factorce přistupovat k objektu Nette/Context ($this->database), musíš si jí vytáhnout a vykonstruovat v konstruktoru této factory, nebo předat z volaného namespace.

Nahoru Odpovědět
17.3.2019 20:41
sleep();
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.