Phalcon PhP - 如何使用$ this-> acl-> isAllowed in .volt view

时间:2016-11-02 15:44:56

标签: php phalcon

我正在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 }}

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这是我要解决的问题。我的权限系统位于数据库中,因为管理员可以为角色,用户组或特定用户设置权限。

  1. 当用户登录系统时,我会将所有权限保留在会话
  2. 我没有使用acl(我以前这样做),而是创建了一个函数来检查用户是否拥有控制器/操作的权限(我的权限基于控制器和操作,如ACL)。
  3. 我创建了一个在.volt视图中使用的自定义函数:

        $compiler = $volt->getCompiler();
    
        //Custom volt functions
        $compiler->addFunction('has_permission', function($resolvedArgs, $exprArgs) {
            return '\HelperFunctions::UserHasPermission(' . $resolvedArgs . ')';
        });
    
  4. 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的选项比数据库要多得多,无论如何都要快。