Zend framework 站点管理部分的Zend Framework ACL

Zend framework 站点管理部分的Zend Framework ACL,zend-framework,zend-acl,Zend Framework,Zend Acl,好的,我有一个zf应用程序,它带有一个用户登录系统,如果凭证在数据库中,它会将用户引导到一个受限区域。但是,我希望使用相同的登录表单来检查用户角色是否为admin(在DB中),以及是否将其指向admin部分。。。我正在努力弄清楚如何使用Zend_Acl实现这一点。另外,ACL的唯一用途是允许具有admin角色的用户进入admin部分,我对ZF是相当陌生的,所以我不确定最好的方法是什么。。这是我当前的AuthController代码 谢谢您可以创建一个控制器插件,该插件将根据用户的角色决定用户是

好的,我有一个zf应用程序,它带有一个用户登录系统,如果凭证在数据库中,它会将用户引导到一个受限区域。但是,我希望使用相同的登录表单来检查用户角色是否为admin(在DB中),以及是否将其指向admin部分。。。我正在努力弄清楚如何使用Zend_Acl实现这一点。另外,ACL的唯一用途是允许具有admin角色的用户进入admin部分,我对ZF是相当陌生的,所以我不确定最好的方法是什么。。这是我当前的AuthController代码


谢谢

您可以创建一个控制器插件,该插件将根据用户的角色决定用户是否具有访问控制器/视图的权限。比如:

class My_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $auth = Zend_Registry::getInstance()->get('auth');
        $acl = new Zend_Acl();

        // for default module
        if ($request->getModuleName() == 'default') {

            // access resources (controllers)
            // usually there will be more access resources
            $acl->add(new Zend_Acl_Resource('index'));
            $acl->add(new Zend_Acl_Resource('error'));

            // access roles
            $acl->addRole(new Zend_Acl_Role('guest'));
            $acl->addRole(new Zend_Acl_Role('user'));
            $acl->addRole(new Zend_Acl_Role('administrator'));

            // access rules
            $acl->allow('guest'); // allow guests everywhere
            $acl->allow('user'); // allow users everywhere
            $acl->allow('administrator'); // allow administrators everywhere

            $role = ($auth->getIdentity() && $auth->getIdentity()->status = 'approved')
            ? $auth->getIdentity()->role : 'guest';
            $controller = $request->getControllerName();
            $action = $request->getActionName();

            if (!$acl->isAllowed($role, $controller, $action)) {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
                $redirector->gotoUrlAndExit('error/denied');
            }

        }
        // for member module
        else if ($request->getModuleName() == 'member') {

            // access resources (controllers)
            // usually there will be more access resources
            $acl->add(new Zend_Acl_Resource('index'));
            $acl->add(new Zend_Acl_Resource('error'));

            // access roles
            $acl->addRole(new Zend_Acl_Role('guest'));
            $acl->addRole(new Zend_Acl_Role('user'));
            $acl->addRole(new Zend_Acl_Role('administrator'));

            // access rules
            $acl->allow('user'); // allow users everywhere
            $acl->allow('administrator'); // allow administrators everywhere

            $role = ($auth->getIdentity() && $auth->getIdentity()->status = 'approved')
            ? $auth->getIdentity()->role : 'guest';
            $controller = $request->getControllerName();
            $action = $request->getActionName();

            if (!$acl->isAllowed($role, $controller, $action)) {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
                $redirector->gotoUrlAndExit('error/denied');
            }

        }
        // for admin module
        else if ($request->getModuleName() == 'admin') {

            // access resources (controllers)
            // usually there will be more access resources
            $acl->add(new Zend_Acl_Resource('index'));
            $acl->add(new Zend_Acl_Resource('error'));

            // access roles
            $acl->addRole(new Zend_Acl_Role('guest'));
            $acl->addRole(new Zend_Acl_Role('user'));
            $acl->addRole(new Zend_Acl_Role('administrator'));

            // access rules
            $acl->allow('administrator'); // allow administrators everywhere

            $role = ($auth->getIdentity() && $auth->getIdentity()->status = 'approved')
            ? $auth->getIdentity()->role : 'guest';
            $controller = $request->getControllerName();
            $action = $request->getActionName();

            if (!$acl->isAllowed($role, $controller, $action)) {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
                $redirector->gotoUrlAndExit('error/denied');
            }

        }
    }
}
您可以在此处查看分步教程:

阅读上的文档,了解如何授予权限并按用户类型继承权限。那么公平地检查一下这个

基本上,您只需执行以下操作:

  • 在引导程序中的某个位置设置ACL规则
  • 板条箱
    错误/拒绝。phtml
    (或您正在使用的任何ext)
  • 让Zend\u Controller\u Plugin\u Acl为你做些肮脏的工作

  • 我看过这篇博文,但我对框架的了解太少,无法理解每个文件的去向。我还需要一些视图控制器以及更深入的解释。请查看
    Zend\u Controller\u Plugin\u Acl