Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework Zend Framework带模块的双Acl资源_Zend Framework_Acl - Fatal编程技术网

Zend framework Zend Framework带模块的双Acl资源

Zend framework Zend Framework带模块的双Acl资源,zend-framework,acl,Zend Framework,Acl,我设置了一个新的模块admin,因此我可以通过www.example.com/admin完美地访问此模块,但我当然希望仅允许管理员访问此模块。现在,控制器显然是“索引”和动作。但由于我希望每个人都能访问www.example.com,它也有控制器和操作“索引”,我的Acl插件中有以下几行代码: $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('admin:index')); $ac

我设置了一个新的模块admin,因此我可以通过www.example.com/admin完美地访问此模块,但我当然希望仅允许管理员访问此模块。现在,控制器显然是“索引”和动作。但由于我希望每个人都能访问www.example.com,它也有控制器和操作“索引”,我的Acl插件中有以下几行代码:

$acl->add(new Zend_Acl_Resource('index'));
$acl->add(new Zend_Acl_Resource('admin:index'));

$acl->allow(null, array('index'));

// admins can do anything
$acl->allow('administrator', null);
但这似乎也适用于管理模块。如何限制管理模块中的普通用户?我已经试过了

$acl->deny('guest', 'admin:index', 'index');
但这似乎不起作用。非常感谢你的帮助。谢谢你,很抱歉我的英语不好


致以最诚挚的问候。

我经常为我的管理员和用户前端以及单独的ACL使用单独的会话名称空间

通过为“我的管理”面板设置单独的会话,登录的用户仍然无法访问管理部分,无论ACL如何,因为管理员的Zend_Auth会话与用户会话完全隔离

下面是一个我用于admin的类,它扩展了Zend_Auth。请注意,在getInstance中,它如何将存储设置为默认Zend_验证的不同会话命名空间

<?php

class My_Admin_Auth extends Zend_Auth
{
    protected function __construct()
    {}

    protected function __clone()
    {}

    public static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
            self::$_instance->setStorage(new Zend_Auth_Storage_Session('Zend_Auth_admin'));
        }

        return self::$_instance;
    }

    /**
     * Get an auth adapater instance suitable for authenticating agains
     * the administrator database.
     * @param string $username
     * @param string $password
     * @return Zend_Auth_Adapter_DbTable Adapter used to call $auth->authenticate($adapter);
     */
    public static function getAdapter($username, $password, $usersalt)
    {
        $db = Zend_Controller_Front::getInstance()
                                     ->getParam('bootstrap')
                                     ->getResource('db');

        $authAdapter = new Zend_Auth_Adapter_DbTable($db,
                                                     'administrators',
                                                     'username',
                                                     'password');

        $authAdapter->setIdentity($username)
                    ->setCredential($password)
                    ->setCredentialTreatment(
                        'SHA1(CONCAT(?,"' . $usersalt . '"))'
                    );

        return $authAdapter;
    }

    /**
     * Return a SHA-1 hashed and salted version of the entered password
     * @param string $plaintext  Password to hash, a static salt is also applied
     * @return string the hashed password
     */
    public static function hashAdminPassword($plaintext, $usersalt)
    {
        return sha1($plaintext . $usersalt);
    }
}

您是否在任何地方定义了角色?ie:来宾和管理员