如何在ZendFramework 2中限制访问模块的某些部分(即只有管理员才能执行某些操作)

时间:2014-04-28 18:57:34

标签: authentication zend-framework2

所以!

我有一个问题:例如,如何仅为adminisitrator访问模块的某些部分。

例如,我有模块相册。它具有控制器索引,删除,添加,编辑,完整。我希望所有角色都可以使用完整的索引控制器,但只能为管理员编辑,删除和添加操作。

我必须使用哪个模块才能做到这一点?我找到了Zend \ Authentification。

表格为:usernamepasswordrole

如何验证用户?:

// do the authentication
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
    // success: store database row to auth's storage
    // system. (Not the password though!)
    $data = $authAdapter->getResultRowObject(null, 'password');
    $auth->getStorage()->write($data);
    $this->_redirect('/');
} else {
    // failure: clear database row from session
    $this->view->message = 'Login failed.';
}

之后我将访问用户数据,例如:

Zend_Auth::getInstance()->getIdentity()->username;

因此,在行动中,我想要限制访问,我只需要使用:

if(Zend_Auth::getInstance()->getIdentity()->role == admin) {
   redirect("auth/login");
}

右?

问题:

  1. 我的建议是如何正确检查每个控制器中的用户角色?

  2. 我是否正确理解如何使用Zend \ Authentification并限制对某些操作的访问?所以将来我会对每个动作使用相同的,对吧?

  3. 其他问题:Acl模块是否用于管理权限?所以需要Acl来帮助Zend_Auth获得权限,对吧?

1 个答案:

答案 0 :(得分:1)

为了能够这样做,您必须构建或实现ACL(访问控制列表)。您还可以将第三方解决方案与前面提到的Zend_Auth(或任何其他身份验证模块)结合使用。您可以在此处阅读有关Zend ACL的更多信息:Zend ACL introduction

例如,您也可以查看BjyAuthorize。此ACL模块为您的应用程序提供完整的授权解决方案,但依赖于ZfcUser进行用户身份验证和注册。这可能是一个很好的入门方式。

如果您已完成构建或实施BjyAuthorize,则可以轻松地将访问权限检查与您的路由绑定(但还有许多其他方法)。您可以在此处查看其工作原理on the BjyAuthorize GitHub page

这些模块将教会您如何在Zend Framework 2应用程序中构建身份验证和授权。