我正在尝试在我的应用程序中使用Zend_acl.我遵循了"Zend Framework in action"一书.我添加了这个助手:
<?php
/**
* Zend Framework
*
* LICENSE "removed for clarity"
*
/** Zend_Controller_Action_Helper_Abstract */
require_once 'Zend/Controller/Action/Helper/Abstract.php';
class Bravo_Controller_Action_Helper_Acl extends Zend_Controller_Action_Helper_Abstract
{
protected $_action;
protected $_auth;
protected $_acl;
protected $_controllerName;
public function __construct(Zend_View_Interface $view = null, array $options = array())
{
$this->_auth = Zend_Auth::getInstance();
$this->_acl = $options['acl'];
//var_dump($this->_acl);die();
}
public function init()
{
$this->_action = $this->getActionController();
// add resource for this controller
$controller = $this->_action->getRequest()->getControllerName();
if(!$this->_acl->has($controller)) {
$this->_acl->add(new Zend_Acl_Resource($controller));
}
}
public function preDispatch()
{
$role …
Run Code Online (Sandbox Code Playgroud) 我知道如何使用Zend_Acl允许某些用户组的某些资源,但我如何使用它只允许显示页面的特定部分?例如
我有一个按钮,可以通过页面上的AJAX删除帖子,但我只想向管理员显示按钮.我可以使用Zend_Acl来阻止对控制器发布/删除的访问,但是我不能用它来阻止按钮显示.
无论何时调用控制器,如果它没有在zend acl中注册,那么我们通常会得到这样的错误
Fatal error: Uncaught exception 'Zend_Acl_Exception' with message
'Resource 'hsfasfdadsf' not found' in /usr/share/php/libzend-framework-php/Zend/Acl.php:365
Stack trace:
#0 /var/www/update/library/Management/Access.php(55): Zend_Acl->get('hsfasfdadsf')
#1 /usr/share/php/libzend-framework-php/Zend/Controller/Plugin/Broker.php(309): Management_Access->preDispatch(Object(Zend_Controller_Request_Http))
#2 /usr/share/php/libzend-framework-php/Zend/Controller/Front.php(941):
Run Code Online (Sandbox Code Playgroud)
是没有办法检查控制器和操作是否在zend acl中注册,我试过
if(!$acl->get($controller))
{
$request->setControllerName('error');
$request->setActionName('notfound');
}
Run Code Online (Sandbox Code Playgroud)
但没有奏效
我正在创建一个简单的网站,用户可以在其中注册,然后登录并添加文本文章.如果没有登录,访问者将拥有访客的角色,并且只能查看文章.我这样做是作为Zend框架1中的练习,因为我刚开始学习Zend.我将创建一个控制器AuthController用于登录,但我想知道如何从IndexController中的indexAction重定向到该控制器中的登录操作.另外,如何使用自定义插件来实现这种访问控制?我该如何调用它?
我花了一天时间寻找有关如何在SO处实现Zend_Acl的教程和答案,就像在其他站点一样.我很头疼.:X
我看到有人使用它来允许或禁止访问某些控制器/操作,而其他人则说这种方式不正确,并且应该允许或禁止基于模型的访问.嗯,第二个似乎可行,但是,这意味着对于每个控制器我需要一个模型?因为看起来,在第二种选择之后,我只能阻止用户访问,例如编辑帖子.但我想阻止访问编辑帖子的控制器的操作.
如果我想阻止对角色X的用户访问控制器Z的动作Y,如果我遵循第二种选择,我该怎么做?
一个真正的应用程序的例子将非常受欢迎.
这些信息可以改善您的答案: 我使用Doctrine 2作为ORM,我有一个模块Admin.我的应用程序的实际结构是这样的:
application
- MYAPP
- configs
- controllers
- layouts
- views
- library
- MYAPP ;This folder is in the include path
- modules
- admin
Run Code Online (Sandbox Code Playgroud) php model-view-controller zend-framework zend-acl doctrine-orm
我应该使用Zeel_Acl的白名单或黑名单方法吗?我的意思是拒绝向每个人提供任何和所有资源,并为每个角色[黑名单]编写每个单独的允许案例或者允许所有资源并为每个角色写下每个拒绝照顾[白名单]
根据随机性将无处不在.Ryan的博客 Zend Framework的动作堆栈组件是不需要的,并且部分视图可以与Zend_Acl和Zend_Auth结合用于验证和控制资源.
我还没有在谷歌上找到任何合适的例子来说明它是如何完成的.很高兴有人会善意地告诉我如何实现这一点.谢谢
我想在我的应用程序中合并访问控制的组件,我看到ZF2提供了:Zend /permissions/Acl
而且Zend /permissions/RBAC
,我想知道哪个更有效,更安全,又如何Zfc-RBAC
?谢谢 。