【问题标题】:Zend Framework ACL Roles and ModulesZend Framework ACL 角色和模块
【发布时间】:2012-01-31 17:12:15
【问题描述】:

我要疯了,试图区分我的管理模块中的索引控制器和索引操作以及使用 ACL 的默认模块中的索引控制器和索引操作。

我希望登录的用户能够访问默认模块的索引控制器,但根本不能访问管理模块。无论我尝试什么,如果我允许访问默认模块的索引,管理模块索引也可用。

任何建议将不胜感激。谢谢

【问题讨论】:

    标签: zend-framework acl


    【解决方案1】:

    将您的资源定义为module-controller 并将权限定义为action 然后您就可以拥有这样的东西

    ...
    
    // Default module, index controller
    $this->addResource(new Zend_Acl_Resource('default-index')); 
    // Admin module, index controller
    $this->addResource(new Zend_Acl_Resource('admin-index'));
    
    // Allow user to access default module, index controller, index and about actions
    $this->allow('user', 'default-index', array('index', 'about'));
    // Allow admin to access admin module, index controller, all actions
    $this->allow('admin', 'admin-index');
    
    ...
    

    [编辑] 在你的控制器插件预调度中

        ...
    
        $module = $request->getModuleName();
        $controller = $request->getControllerName();
        $action = $request->getActionName();
        $resource = "{$module}-{$controller}";
        if ($acl->has($resource)) {
            if (!$acl->isAllowed($role, $resource, $action)) {
            }
        }
        ...
    

    【讨论】:

    • 我一直在尝试...下面的代码给了我以下错误...` $acl->add(new Zend_Acl_Resource('admin-index')); $acl->add(new Zend_Acl_Resource('default-index')); $acl->拒绝(); $acl->allow('guest', 'default-index', array('index')); ` ` 致命错误:在 /Users/drewfulton/Dropbox/Websites/Parulidae/library/Zend/Acl.php:365 中未捕获异常 'Zend_Acl_Exception' 并带有消息 'Resource 'index' not found''
    • 我为 ACL 添加了控制器插件部分。在这里,您需要先使用模块名称和控制器名称构造资源,然后再检查是否允许用户。
    • 做到了。我遇到的问题出现在第二个 if 语句中,因为我使用的是 $controller 而不是您提供的 $resource 定义。感谢所有的帮助。节省大量资金!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多