0

プロジェクトでは、さまざまな種類のロールに ACL メニューを使用していますが、いくつかのロールに対して同じメニューを作成しようとすると問題に直面しましたが、一部のロールではいくつかのポイントを非表示にしたいと考えています。ドキュメントには、配列で「リソース」パラメーターを使用してそれを行うように記載されていますが、親メニュー全体でのみ機能します。

array(
    'label'      => 'Community',
    'module'     => 'community',
    'controller' => 'index',
    'action'     => 'index',
    'resource'   => 'mvc:community'
    'pages'      => array(
        array(
            'label'      => 'My Account',
            'module'     => 'community',
            'controller' => 'account',
            'action'     => 'index',
        ),
        array(
            'label' => 'Forums',
            'uri'   => 'http://forums.example.com/',
            'class' => 'external' // class
        )
    )
)

しかし、現在のメニューからいくつかの要素を非表示にしたい場合はそうではありません:

    array(
    'label'      => 'Community',
    'module'     => 'community',
    'controller' => 'index',
    'action'     => 'index',
    'pages'      => array(
        array(
            'label'      => 'My Account',
            'module'     => 'community',
            'controller' => 'account',
            'action'     => 'index',
            'resource'   => 'mvc:community.account'
        ),
        array(
            'label' => 'Forums',
            'uri'   => 'http://forums.example.com/',
            'class' => 'external'
        )
    )
)

メニュー ACL ビルド コード:

$acl = new \Zend\Permissions\Acl\Acl();
$acl->addRole(new \Zend\Permissions\Acl\Role\GenericRole('root'));
$acl->addRole(new \Zend\Permissions\Acl\Role\GenericRole('guest'));

$acl->addResource(new \Zend\Permissions\Acl\Resource\GenericResource('mvc:community.account'));

$acl->allow('root', null);
$acl->allow('guest', null);
$acl->deny('guest', 'mvc:community.account');

したがって、メニュー全体に「リソース」キーを使用すると、子で使用すると機能しますが、機能しません。現時点では、役割ごとにいくつかのほぼ同様の配列を作成し、その配列へのアクセスを許可/拒否しますが、それを行う正しい方法を見つけたいと考えています。

4

1 に答える 1

0

実際、私はそれがバグだと思います。

問題は、メニューのレンダリング時に、サブメニューの「リソース」エントリがなくなっていることです。独自のパーシャルを使用して問題を解決し、サブページの「リソース」エントリを再度追加します。-もちろん、かなり汚い解決策です。

于 2014-02-14T17:23:09.610 に答える