我目前有一个应用程序使用 Zend_Auth 进行用户访问。该站点有一个管理部分,我希望一个在我的数据库中具有管理员角色的用户在使用他的凭据时被允许访问。Zend_Acl 是唯一的方法吗?因为我想做的事情似乎有点复杂,或者我的问题会有更简单的解决方案吗?
我已经考虑过这个问题,我现在想知道是否可以有两个身份验证控制器,一个用于用户,一个用于我的管理部分?
我目前有一个应用程序使用 Zend_Auth 进行用户访问。该站点有一个管理部分,我希望一个在我的数据库中具有管理员角色的用户在使用他的凭据时被允许访问。Zend_Acl 是唯一的方法吗?因为我想做的事情似乎有点复杂,或者我的问题会有更简单的解决方案吗?
我已经考虑过这个问题,我现在想知道是否可以有两个身份验证控制器,一个用于用户,一个用于我的管理部分?
我最近做了这样的事情。为检查用户凭据的管理模块创建一个前端控制器插件。就像是:
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
}
}
}
我决定采用在我的数据库中设置“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 更容易实现。