2

次のコードを検討してください。

$acl = new Phalcon\Acl\Adapter\Memory();

$acl->setDefaultAction(Phalcon\Acl::DENY);

//Register roles
$acl->addRole(new Phalcon\Acl\Role('guest'));
$acl->addRole(new Phalcon\Acl\Role('member', 'guest'));
$acl->addRole(new Phalcon\Acl\Role('admin', 'user'));

$acl->addResource(new Phalcon\Acl\Resource('user'));
$acl->addResource(new Phalcon\Acl\Resource('index'));

$acl->allow('member', 'user', array());
$acl->allow('guest', 'index', array());

$acl->isAllowed('guest','index','index'); //returns false

コントローラーレベルでパーミッションを付与したい。ユーザーコントローラーのアクションのメンバーを付与します。ユーザーコントローラーのすべてのアクションを手動で追加したくありません。このアイデアをどのように実装できますか?

4

1 に答える 1

6

INVOと呼ばれるサンプル アプリケーションに Acl を実装する良い例があります。セキュリティプラグインは Acl リストを実装します。パブリック領域に関するリソースは、ワイルドカードとして「*」を使用して、コントローラーのすべてのアクションにルールを追加します。

<?php

$publicResources = array(
    'index' => array('index'),
    'about' => array('index'),
    'session' => array('index', 'register', 'start', 'end'),
    'contact' => array('index', 'send')
);
foreach($publicResources as $resource => $actions){
    $acl->addResource(new Phalcon\Acl\Resource($resource), $actions);
}

//Grant access to public areas to both users and guests
foreach($roles as $role){
    foreach($publicResources as $resource => $actions){
        $acl->allow($role->getName(), $resource, '*');
    }
}
于 2012-10-30T19:20:56.793 に答える