Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PHP: Zend_Acl resurtsi majandus märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
kpihus
Kreisi kasutaja
kpihus

liitunud: 14.04.2003




sõnum 29.12.2011 15:27:52 PHP: Zend_Acl resurtsi majandus vasta tsitaadiga

Vaatamata tutorialitele on Zendi ACL majandus jäänud veidi segaseks.

Oletame et me defineerime ACL'i lihtsuse huvides käsitsi:


class Model_ExamplerAcl extends Zend_Acl {
    public function __construct() {
    //Lisame ressursi
    $this->add(new Zend_Acl_Resource('index'));
    //Lisame rolli
    $this->addRole(new Zend_Acl_Role('user'));
    // ja anname rollile õiguse kasutada ressurssi
    $this->allow('user', 'index');
}


ressurss 'index' siinkohal tähendab index kontrollerit, õigus ?
Aga kui meil index kontrolleri sees on erinevad actionid, ning erinevatele rollidele tahame anda erinevad õigused erinevatele actionitele, kuidas siis toimida ?
Kommentaarid: 26 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 29.12.2011 15:38:22 vasta tsitaadiga

"Index" peaks siiski tähendama actionit. Vähemalt loogika ütleb, et kusagil peaks Zendil olema mingi option mille järgi sa sätid mille peale õigused säetakse.
_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
kpihus
Kreisi kasutaja
kpihus

liitunud: 14.04.2003




sõnum 30.12.2011 02:33:27 vasta tsitaadiga

madedog kirjutas:
"Index" peaks siiski tähendama actionit. Vähemalt loogika ütleb, et kusagil peaks Zendil olema mingi option mille järgi sa sätid mille peale õigused säetakse.


Katse meetod tõestas, et see index seal on siiski kontroller. Seega küsimus endiselt õhus.
Kommentaarid: 26 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mirko27
HV veteran
mirko27

liitunud: 29.06.2002




sõnum 30.12.2011 02:42:06 vasta tsitaadiga

Vaata dokumentatsiooni, siis vaata API dokumentatsiooni, kenasti kõikides näidetes näha, et deny/allow võtab lisaks ka kolmanda parameetri, mis on siis action.

Mis konkreetselt ressursse puudutab, siis nede puhul kehtib hierarhia:
$acl->addResource(new Zend_Acl_Resource('announcement'), 'news');
Kommentaarid: 12 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 11
tagasi üles
vaata kasutaja infot saada privaatsõnum
kpihus
Kreisi kasutaja
kpihus

liitunud: 14.04.2003




sõnum 30.12.2011 11:58:57 vasta tsitaadiga

mirko27 kirjutas:
Vaata dokumentatsiooni, siis vaata API dokumentatsiooni, kenasti kõikides näidetes näha, et deny/allow võtab lisaks ka kolmanda parameetri, mis on siis action.

Mis konkreetselt ressursse puudutab, siis nede puhul kehtib hierarhia:
$acl->addResource(new Zend_Acl_Resource('announcement'), 'news');


Ok, seega mõistliku lahenduse puhul peaksime lubama sedasi:


class Model_ExamplerAcl extends Zend_Acl {
    public function __construct() {
    //Lisame ressursi
    $this->add(new Zend_Acl_Resource('controller'));
    $this->add(new Zend_Acl_Resource('action'));
    //Lisame rolli
    $this->addRole(new Zend_Acl_Role('user'));
    // ja anname rollile õiguse kasutada ressurssi
    $this->allow('user', 'controller','action');
}

[/code]
Kommentaarid: 26 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
EagerFish
HV vaatleja
EagerFish

liitunud: 08.11.2011




sõnum 30.12.2011 14:40:41 vasta tsitaadiga

Ise olen ka kasutanud sellist varianti mis annab kontroller/tegevus "paaridena" õigusi. Aga tundub, et natuke teistmoodi vist kui ülemine näide- ma ei tekita resursse action'itest. Ma ei oska kommenteerida kui õige see on, aga enda vajadused viimati kattis. Postitan kogu õiguste süsteemi ülesehituse mida kasutanud olen.
Oodatud kõik kommentaarid.

class Application_Acl extends Zend_Acl {
    public function __construct() {

        //Lisame rollid, user pärib guest'i ja admin pärib user'i õigused
        $this->addRole(new Zend_Acl_Role('guest'));
        $this->addRole(new Zend_Acl_Role('user'), 'guest');
        $this->addRole(new Zend_Acl_Role('admin'), 'user');

        //Moodustame ressursid kontrolleri nimede põhjal
        $this->add(new Zend_Acl_Resource('users'));
        $this->add(new Zend_Acl_Resource('profile'));
        $this->add(new Zend_Acl_Resource('error'));
        $this->add(new Zend_Acl_Resource('index'));

        //lubame guest'il profile kontrolleris login ja register actionit, samuti avalehte võiks näha
        $this->allow('guest', 'profile', array('login', 'register'));
        $this->allow('guest', 'index');

        //sisse loginud kasutaja saab välja logida ja ka oma profiili näha
        $this->allow('user', 'profile', array('index', 'logout', 'settings'));

        //admin saab kõigele ligi
        $this->allow('admin');
    }
}


Siis vaja ka pluginat kus saadakse kätte kasutaja roll ning siis vaadatakse kas on õigust saada ligi
päritavale kontrolleri/tegevuse'i paarile.


class Application_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
    private $_acl = null;

    public function __construct(Zend_Acl $acl) {
        $this->_acl = $acl;
    }

    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        //eeldan, et kasutajal on olemas roll
        if(Zend_Auth::getInstance()->hasIdentity()){
            $user = Zend_Auth::getInstance()->getIdentity();
            $role = $user->role;
        } else {
            $role = 'guest';
        }

        //saame kontrolleri ja tegevuse nime ning kontrollime ligipääsu õigust
        $controller = $request->getControllerName();
        $action = $request->getActionName();

        //Kui ligipääsu pole suuname logimise lehele
        if(!$this->_acl->isAllowed($role, $controller, $action)) {
            $request->setControllerName('profile')->setActionName('login');
        }
    }
}


Ja nüüd lihtsalt Application_Acl põhjal objekt luua ning see plugina parameetriks anda.
Kogu kupatus lisada front kontrollerile.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    public function _initMain()
    {
        //lisame ligipääsu kontrolli
        $acl = new Application_Acl();
        $front = Zend_Controller_Front::getInstance();
        $front->registerPlugin(new Application_Controller_Plugin_Acl($acl));
    }
}



Kogu nodi mul demona ka githubis brausitav. https://github.com/janar/zfw-basic-example
Ehk kellelegi abiks.

_________________
give.ee - klientidele, kes hindavad disaini
tagasi üles
vaata kasutaja infot saada privaatsõnum
kpihus
Kreisi kasutaja
kpihus

liitunud: 14.04.2003




sõnum 30.12.2011 15:40:26 vasta tsitaadiga

EagerFish kirjutas:
. Postitan kogu õiguste süsteemi ülesehituse mida kasutanud olen.


Aitäh, oli abiks icon_smile.gif Katsetan järgi, aga heetkel tundub asi selge olevat.
Kommentaarid: 26 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 25
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PHP: Zend_Acl resurtsi majandus
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.