【问题标题】:How to restrict access some part of module in ZendFramework 2 (i.e. only administrator can do some actions)如何限制 ZendFramework 2 中模块的某些部分的访问(即只有管理员可以执行某些操作)
【发布时间】:2014-04-28 18:57:34
【问题描述】:

所以!

我有一个问题:例如,如何只允许管理员访问模块的某些部分。

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

我必须使用什么模块来做到这一点?我找到了 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 并限制对某些操作的访问?所以以后我会为每个动作使用相同的,对吧?

附加问题:Aclmodule 是否用于管理权限?所以需要 Acl 来帮助 Zend_Auth 获得权限,对吧?

【问题讨论】:

  • Zend_Auth 是 Zend Framework 组件,而不是 Zend Framework 2,因为您已标记此主题。下一个注意事项是 Zend_Auth 用于身份验证而不是授权。身份验证确定一个实体是否真的是它声称的那样,而授权是您决定允许或拒绝访问资源的过程,并且是授权您可以使用 Zend_Acl
  • 所以我必须在 ZF2 中使用 Zend\Authentification(不是 Zend_Auth),对吗?谢谢。

标签: authentication zend-framework2


【解决方案1】:

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

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

如果您完成了 BjyAuthorize 的构建或实施,您可以轻松地将访问权限检查与您的路线联系起来(但还有很多其他方法)。你可以在这里看到它是如何工作的on the BjyAuthorize GitHub page

这些模块将教您很多关于如何将身份验证和授权构建到 Zend Framework 2 应用程序中的知识。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多