【问题标题】:Zend - controller/action ACLZend - 控制器/动作 ACL
【发布时间】:2011-11-23 12:28:05
【问题描述】:

在我的管理模块中,我有一个名为 email 的控制器,我希望大多数操作只能由登录的管理员用户访问。但是,我希望任何人都可以访问一项操作。 (这是一个电子邮件功能,将通过 URL 远程触发。)。目前我正在使用 Zend_Auth 和 Zend_Acl,如下所示:

if ($request->getModuleName() == 'admin') {
    // access resources (controllers)
    $acl->addResource('index');
    $acl->addResource('reports');
    $acl->addResource('email');
    $acl->addResource('error');

    // access roles
    $acl->addRole(new Zend_Acl_Role('visitor'));
    $acl->addRole(new Zend_Acl_Role('user'));
    $acl->addRole(new Zend_Acl_Role('admin'));

    // access rules
    $acl->deny('visitor');
    $acl->deny('user');
    $acl->allow('admin');

    $resouce = $request->getControllerName();
    $action = $request->getActionName();
    $identity = $auth->getStorage()->read();
    if (is_object($identity)) {
        $role = $identity->role;
    } else {
        $role = 'visitor';
    }

    if (!$acl->isAllowed($role, $resouce, $action)) {
        $request->setModuleName('default')
                ->setControllerName('auth')
                ->setActionName('login');
    }
}

如何更改上面的代码以允许“访问者”执行 /admin/email/process 操作?

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    您可以使用Zend_Acl 创建一个角色层次结构,这将允许您设置访问页面的最低角色,任何具有 x 或更高角色的人都可以访问该页面。

    $acl->addRole(new Zend_Acl_Role('visitor'));
    $acl->addRole(new Zend_Acl_Role('user'), 'visitor');
    $acl->addRole(new Zend_Acl_Role('admin'), 'user');
    

    这样,任何具有管理员角色的人都可以访问visitoruser 可以访问的任何内容。

    您还可以传递arrayas 参数而不是字符串。

    更多信息可以参考 Zend 框架官方文档ACL

    【讨论】:

      【解决方案2】:

      这应该可以解决问题:

      $oAcl->allow('visitor','email','functionname');
      //or if you want to do both visitor and user
      $oAcl->allow(array('visitor','user'),'email','functionname');
      

      将此代码放在您已经编写的访问规则之后。

      【讨论】:

      • 另外,如果一个函数然后调用另一个未被明确允许的受保护函数,它会允许这个吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2011-03-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多