使用ZfcUser和BjyAuthorize显示或隐藏视图

时间:2014-04-25 18:04:37

标签: zend-framework2

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

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

例如:

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

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

我是怎么想这样做的:

<?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获取权限,我想我的选择就是简单地查询数据库并直接从中构建权限数组。

有没有其他人必须做这样的事情?这种方法是一种好的方法,还是有另一种方法来实现这一目标?

非常感谢任何意见。

1 个答案:

答案 0 :(得分:3)

您可以使用 BjyAuthorize IsAllowed 视图助手。它知道当前用户的身份,因此您只需检查规则即可。它的工作方式如下:

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

菜单 是一种资源, 菜单_ * 是一条规则。您必须在 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' ) ),
        ),
    ),
),
(...)
顺便说一下,您似乎正在尝试构建菜单。我建议你{Zeder Navigation与BjyAutorize集成check this post。{/ p>