Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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 如何设置模块特定的ACL资源?_Zend Framework_Zend Acl - Fatal编程技术网

Zend framework 如何设置模块特定的ACL资源?

Zend framework 如何设置模块特定的ACL资源?,zend-framework,zend-acl,Zend Framework,Zend Acl,Zend的Acl只允许在controller中创建资源 但是,控制器可能位于任何模块上,而不仅仅是默认模块。因此,我在网上读了一些文章,我找到了一篇,并尝试了以下方法: $acl -> addResource(new Zend_Acl_Resource("admin")); $acl -> addResource(new Zend_Acl_Resource("admin:page"), "admin"); $acl -> addResource(new Zend_Acl_Res

Zend的Acl只允许在controller中创建资源

但是,控制器可能位于任何模块上,而不仅仅是默认模块。因此,我在网上读了一些文章,我找到了一篇,并尝试了以下方法:

$acl -> addResource(new Zend_Acl_Resource("admin"));
$acl -> addResource(new Zend_Acl_Resource("admin:page"), "admin");
$acl -> addResource(new Zend_Acl_Resource("admin:posts"), "admin");
但是,尽管如此,当我浏览到相应的页面时,我仍然会发现关于资源
页面
未找到或
帖子
未找到的错误

如何设置模块特定的ACL资源

更新:
我猜你发布的代码是某种伪代码,因为它是无效的。尽管如此,这个答案仍然可以很好地发挥作用

$acl->addrole(new Zend_Acl_Role('guest'))
    ->addrole(new Zend_Acl_Role('admin'), 'guest');

$acl->addResource(new Zend_Acl_Resource("page"));
$acl->addResource(new Zend_Acl_Resource("admin"));
$acl->addResource(new Zend_Acl_Resource("admin:page"), "admin");
$acl->addResource(new Zend_Acl_Resource("admin:posts"), "admin");

$acl->deny();
$acl->allow('guest', 'page', 'view');
$acl->allow('admin');

// Lets run some quick tests...
var_dump($acl->isAllowed('guest', 'page', 'view')); // true
var_dump($acl->isAllowed('guest', 'page', 'edit')); // false
var_dump($acl->isAllowed('guest', 'admin:page', 'view')); // false

var_dump($acl->isAllowed('admin', 'page', 'view')); // true
var_dump($acl->isAllowed('admin', 'page', 'edit')); // false
var_dump($acl->isAllowed('admin', 'admin:page', 'view')); // true

我猜你发布的代码是某种伪代码,因为它是无效的。尽管如此,这个答案仍然可以很好地发挥作用

$acl->addrole(new Zend_Acl_Role('guest'))
    ->addrole(new Zend_Acl_Role('admin'), 'guest');

$acl->addResource(new Zend_Acl_Resource("page"));
$acl->addResource(new Zend_Acl_Resource("admin"));
$acl->addResource(new Zend_Acl_Resource("admin:page"), "admin");
$acl->addResource(new Zend_Acl_Resource("admin:posts"), "admin");

$acl->deny();
$acl->allow('guest', 'page', 'view');
$acl->allow('admin');

// Lets run some quick tests...
var_dump($acl->isAllowed('guest', 'page', 'view')); // true
var_dump($acl->isAllowed('guest', 'page', 'edit')); // false
var_dump($acl->isAllowed('guest', 'admin:page', 'view')); // false

var_dump($acl->isAllowed('admin', 'page', 'view')); // true
var_dump($acl->isAllowed('admin', 'page', 'edit')); // false
var_dump($acl->isAllowed('admin', 'admin:page', 'view')); // true


这里提交的代码是正确的。你得到的错误来自其他地方;无论在何处,您都可以检查当前角色是否可以访问
页面
资源(应该改为检查
管理员:页面
)。您的错误很可能是因为您向角色添加了权限(
allow
deny
)。@adlawson,恐怕这不是角色的情况,因为只有两种类型的错误,guest和admin,并且允许使用
$acl->allow(“admin”),对所有内容都使用admin在这种情况下,您需要发布更多代码。错误不在上面的代码段中。@adlawson,好的,检查更新部分这里提交的代码是正确的。你得到的错误来自其他地方;无论在何处,您都可以检查当前角色是否可以访问
页面
资源(应该改为检查
管理员:页面
)。您的错误很可能是因为您向角色添加了权限(
allow
deny
)。@adlawson,恐怕这不是角色的情况,因为只有两种类型的错误,guest和admin,并且允许使用
$acl->allow(“admin”),对所有内容都使用admin在这种情况下,您需要发布更多代码。错误不在上面的代码段中。@adlawson,好的,请查看更新部分Why when I comment line
$acl->addResource(new Zend_acl_Resource(“页面”)
并浏览到
/admin/page
,它表示找不到resource
page
。不会
admin:page
将页面定义为admin.No内的资源。使用的资源名称与您给定的名称完全相同。所以对于
admin:page
你必须像那样使用它。调用子资源
admin:page
是一种命名约定。如果你想的话,你可以叫它
my_Total::unique resourceName
,但从那时起你必须像那样使用它。那么,我将如何区分默认模块的页面资源和管理模块的页面资源。你已经做到了一半。您有
admin:page
。现在您需要
默认值:page
。就这样。两个完全不同的资源名称。在您的示例中,哪个资源将
$acl->allow('guest'、'page'、'view')地址。我尝试了您的默认值:和admin:way以及allowed guest,到管理模块的索引控制器的索引控制器,
$acl->allowed('guest','admin:index')但来宾仍然可以浏览/admin页面为什么当我评论行
$acl->addResource(新的Zend_acl_资源(“页面”)
并浏览到
/admin/page
,它表示找不到resource
page
。不会
admin:page
将页面定义为admin.No内的资源。使用的资源名称与您给定的名称完全相同。所以对于
admin:page
你必须像那样使用它。调用子资源
admin:page
是一种命名约定。如果你想的话,你可以叫它
my_Total::unique resourceName
,但从那时起你必须像那样使用它。那么,我将如何区分默认模块的页面资源和管理模块的页面资源。你已经做到了一半。您有
admin:page
。现在您需要
默认值:page
。就这样。两个完全不同的资源名称。在您的示例中,哪个资源将
$acl->allow('guest'、'page'、'view')地址。我尝试了您的默认值:和admin:way以及allowed guest,到管理模块的索引控制器的索引控制器,
$acl->allowed('guest','admin:index')但来宾仍可以浏览/管理页面