【问题标题】:Using ZfcUser and BjyAuthorize to show or hide views使用 ZfcUser 和 BjyAuthorize 显示或隐藏视图
【发布时间】:2026-01-01 12:05:03
【问题描述】:

我最近安装了 ZfcUser 和 BjyAuthorize,并希望使用它们来显示或隐藏 layout.phtml 文件的各个部分。

我知道 BjyAuthorize 是一种防火墙,来自 git hub 的流程图表明应该可以获取当前权限状态并使用它来隐藏或显示特定代码部分。

例如:

<ul>
    <li>Admin Menu item</li>
    <li>Affiliate menu item</li>
    <li>Guest Menu item</li>
</ul>

如果管理员用户已登录,他将查看所有三个项目,会员只能看到 Affiliate 和访客,而访客只能看到访客。

我当时的想法是这样的:

<?php
    //Get array of permissions for current user *not certain how to do this*
    $permissionArray = $this->GetBjyPermissions($current->user);
?>
<ul>
    <?php if in_array('admin',$permissionArray) {?>
        <li>Admin Menu item</li>
    <?php } ?>

    <?php if in_array('affiliate',$permissionArray) {?>
        <li>Affiliate Menu item</li>
    <?php } ?>

    <li>Guest Menu item</li>
</ul>

基本上这将允许我隐藏不允许用户使用的代码部分。

如果无法通过 Bjy 或 Zfc 获得权限,我想我的选择是简单地查询数据库并直接从中构建权限数组。

有没有其他人不得不做这样的事情?这种方法是一种好方法还是有其他方法可以实现?

非常感谢您的任何意见。

【问题讨论】:

    标签: zend-framework2


    【解决方案1】:

    您可以使用 BjyAuthorizeIsAllowed 视图助手。它知道当前用户的身份,因此您只需检查规则即可。它的工作原理是:

    $isMenuAdmin = $this->isAllowed( 'menu', 'menu_admin' );
    $isMenuAffiliate = $this->isAllowed( 'menu', 'menu_affiliate' );
    $isMenuGuest = $this->isAllowed( 'menu', 'menu_guest' );
    

    menu 是资源,menu_* 是规则。您必须在 bjyauthorize.global.php 中定义它们。我会这样做:

    (...)
    'resource_providers' => array(
        'BjyAuthorize\Provider\Resource\Config' => array(
            'menu' => array(),
        ),
    ),
    'rule_providers' => array(
        'BjyAuthorize\Provider\Rule\Config' => array(
            'allow' => array(
                /*
                [0] -> role
                [1] -> resource
                [2] -> rule
                */
                array( array( 'admin' ), 'menu', array( 'menu_admin' ) ),
                array( array( 'affiliate' ), 'menu', array( 'menu_affiliate' ) ),
                array( array( 'guest' ), 'menu', array( 'menu_guest' ) ),
            ),
        ),
    ),
    (...)
    

    顺便说一句,您似乎正在尝试构建菜单。关于 Zend Navigation 与 BjyAutorize 的集成,我建议您 check this post

    【讨论】:

    • 谢谢,这真的很清楚如何使用帮助程序。非常感谢!