我现在有一个应用程序使用Zend_Auth进行用户访问。该站点有一个管理部分,我希望在他使用其凭据时允许一个在我的数据库中具有admin角色的用户访问。 Zend_Acl是唯一的方法吗?对于我想做的事情似乎有点复杂,或者我的问题会有更简单的解决方案吗?
我已经考虑过这个了,我现在想知道是否可以为用户设置两个auth控制器,为管理员部分设置一个?
由于
答案 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更容易实现。