2013-01-23 62 views
1

问题


嗨,我是新来的Zend框架1(我知道有一个版本2,但我们需要的版本1的携手合作,这个项目)所以不知道这是否是一个愚蠢的问题。除此之外,我发现很难找到关于注册和登录的好文档,我设法使用ACL和Auth的系统工作正常。Zend框架1个ACL:允许所有和拒绝一些

我只是想知道我的ACL是否正确。 这是我的课是什么样子现在:

类bckstg_Acl扩展Zend_Acl里{ 公共职能__construct() {

$this->addRole(new Zend_Acl_Role('guest')); 
    $this->addRole(new Zend_Acl_Role('user'), 'guest'); 
    $this->addRole(new Zend_Acl_Role('admin'), 'user'); 

    $this->add(new Zend_Acl_Resource('error::error')); 
    $this->add(new Zend_Acl_Resource('auth::login')); 
    $this->add(new Zend_Acl_Resource('auth::register')); 
    $this->add(new Zend_Acl_Resource('auth::logout')); 
    $this->add(new Zend_Acl_Resource('data::render')); 
    $this->add(new Zend_Acl_Resource('index::index')); 
    $this->add(new Zend_Acl_Resource('admin::index')); 
    $this->add(new Zend_Acl_Resource('auth::noauth')); 

    //$this->allow('guest', 'error', 'error'); 
    $this->allow('guest', 'auth::noauth'); 
    $this->allow('guest', 'auth::login'); 
    $this->allow('guest', 'data::render'); 
    $this->allow('guest', 'index::index'); 
    $this->allow('guest', 'auth::register'); 
    $this->allow('user', 'auth::logout'); 
    $this->allow('admin', 'admin::index'); 
} } 


问题


我注意到,如果我不向资源添加新的控制器,则3种用户类型(访客,用户或管理员)都不能看到该页面。但我想知道是否有方法可以说所有用户都能看到一切?因为基本上我只需要拒绝客人喜欢我的应用程序和用户和访客的管理面板系统,除此之外他们可以看到所有页面。

回答

2

如果您发现特定的控制器(S)或模块(S)就可以初始化你ACL

我对这种方式是要求在前端控制器插件,如果我需要设置ACL,所以:

// Register ACL plugin if is admin module 
if($request->getModuleName() == 'admin'){ 
    $auth = Zend_Auth::getInstance(); 
    $acl  = new My_Acl_Acl(); 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new My_Plugin_AclControl($auth, $acl)); 
} 

对于其他网站(默认模块)ACL永远不会被要求获得权限,只能用于管理模块。

你在互联网上大量的文献,但这个博客已经帮了我很多在一开始http://www.amazium.com/blog/label/zend_acl/page/1

+0

谢谢你,以后我会试试这个。不知道你可以这样做!感谢文献,已经看到了一些有趣的事情! –

+0

这工作辉煌顺便!如果有人需要这个:我使用getControllerName指向控制器。再次感谢! –

+0

我建议你为ZF开启自动完成功能,像NetBeans这样的IDE有这个选项。 http://stackoverflow.com/q/7487737/949273 – tasmaniski

相关问题