【问题标题】:Phalcon PhP - how to use $this->acl->isAllowed in .volt viewPhalcon PhP - 如何在 .volt 视图中使用 $this->acl->isAllowed
【发布时间】:2016-11-02 15:44:55
【问题描述】:

我正在使用 ACL 控制权限的 Phalcon 2.0.13 项目。我的问题是:有没有办法让我在 .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 }}

感谢您的帮助

【问题讨论】:

  • 如果您在 DI 中定义了 acl,您应该可以像 acl.isAllowed 一样调用它。

标签: php phalcon


【解决方案1】:

如果将 acl 添加为服务,那么只需执行以下操作:

{% if acl.isAllowed("User", "New") %}

{% endif %}

无需自定义伏特函数。 Phalcon ACL 基于内存的选项比数据库多得多,而且速度更快。

【讨论】:

  • 谢谢!我会试试的。我将根据我的数据库加载acl权限,然后像这样检查。
【解决方案2】:

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

  1. 当用户登录系统时,我将他的所有权限保留在会话中
  2. 我没有使用 acl(我以前这样做过),而是创建了一个函数来检查用户是否在控制器/操作中具有权限(我的权限基于控制器和操作,如 ACL)。
  3. 我创建了一个自定义函数以在 .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,这很容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多