ZendFramework应用程序中的Admin部分

时间:2012-04-24 13:53:46

标签: zend-framework zend-auth zend-acl

我现在有一个应用程序使用Zend_Auth进行用户访问。该站点有一个管理部分,我希望在他使用其凭据时允许一个在我的数据库中具有admin角色的用户访问。 Zend_Acl是唯一的方法吗?对于我想做的事情似乎有点复杂,或者我的问题会有更简单的解决方案吗?

我已经考虑过这个了,我现在想知道是否可以为用户设置两个auth控制器,为管理员部分设置一个?

由于

2 个答案:

答案 0 :(得分:2)

我最近做了类似的事情。为管理模块创建一个检查用户凭据的前端控制器插件。类似的东西:

class Admin_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{    
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if ($request->getModuleName() != 'admin'){
            return;
        }
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()){
            // send him to login
        }
        $user = $auth->getIdentity();
        if (!$user->isAdmin()){ // or however you check
            // send him to a fail page
        }
    }    
}

答案 1 :(得分:0)

我决定使用在我的数据库中设置“is_admin”字段的方法,如果设置为1,则用户是管理员。然后我使用这段代码:

public function init()
{
    $this->auth=Zend_Auth::getInstance();
    if ($this->auth->getStorage()->read()->is_admin) {
    $route = array('controller'=>'admin', 'action'=>'index');
    } else {
        $route = array('controller'=>'index', 'action'=>'index');
    $this->_helper->redirector->gotoRoute($route);
    }
}

如果用户不是管理员,则会将用户从管理区域重定向,如果他们是管理员,则允许他们访问。为了在我的应用程序中简单使用,比ACL更容易实现。