我最近安装了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获取权限,我想我的选择就是简单地查询数据库并直接从中构建权限数组。
有没有其他人必须做这样的事情?这种方法是一种好的方法,还是有另一种方法来实现这一目标?
非常感谢任何意见。
答案 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>