我正在Phalcon 2.0.13项目中使用ACL来控制权限。我的问题是:我有办法在.volt视图中使用isAllowed吗?
我的目标是根据用户的权限控制我在.volt视图中显示的一些选项。
只是澄清我的意思是:
if( !$this->acl->isAllowed( $userRole, ucfirst( $this->dispatcher->getControllerName() ), $this->dispatcher->getActionName() ) ){
$this->response->redirect( $this->url->get(['for' => 'admin-index-login']) );
}
这是我在基本控制器中运行的一段代码,我想检查.volt视图中的权限,例如{{ if isAllowed("User", "New") }} xxxx {{ endif }}
感谢您的帮助
答案 0 :(得分:0)
这是我要解决的问题。我的权限系统位于数据库中,因为管理员可以为角色,用户组或特定用户设置权限。
我创建了一个在.volt视图中使用的自定义函数:
$compiler = $volt->getCompiler();
//Custom volt functions
$compiler->addFunction('has_permission', function($resolvedArgs, $exprArgs) {
return '\HelperFunctions::UserHasPermission(' . $resolvedArgs . ')';
});
UserHasPermission
接收控制器和操作名称以检查用户是否具有权限。我正在使用它:
{% if has_permission("user", "*") %}
<li>
<a href="#" title="Users"><i class="fa fa-lg fa-fw fa-user"></i> <span class="menu-item-parent">Users</span></a>
<ul>
<li>
<a href="{{ url(['for': 'admin-user-index']) }} " title="Users"><span class="menu-item-parent">Users</span></a>
</li>
</ul>
</li>
{% endif %}
操作名称中的 *
表示用户是否具有任何UserController操作的权限。
到目前为止,我对解决方案感到满意,如果在某些时候我想切换回Phalcon的ACL,那就很容易了。
答案 1 :(得分:0)
如果将acl添加为服务,则执行:
{% if acl.isAllowed("User", "New") %}
{% endif %}
无需自定义功能伏特。基于Phalcon ACL Memory的选项比数据库要多得多,无论如何都要快。