首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不存在的资源上抛出异常

在不存在的资源上抛出异常
EN

Stack Overflow用户
提问于 2014-01-04 00:12:17
回答 1查看 1.8K关注 0票数 0

我试图让Zend ACL启动并运行,但我似乎遇到了以下问题:

代码语言:javascript
复制
PHP Fatal error:  Uncaught exception 'Zend\Permissions\Acl\Exception\InvalidArgumentException' with message 'Resource 'article-2' not found' in vendor/zendframework/zend-permissions-acl/Zend/Permissions/Acl/Acl.php:292

我得到的印象是,当资源没有添加到资源列表时,Zend抛出和异常。举一个例子:

代码语言:javascript
复制
$user1 = 'user-1';
$user2 = 'user-2';

$article1 = 'article-1';
$article2 = 'article-2';

$acl = new Acl();

$acl->addRole( new Role('user') );
$acl->addRole( new Role('user-1'), 'user' );
$acl->addRole( new Role('user-2'), 'user' );

$acl->addResource( $article1 );

$acl->allow( $user1, $article1 );

echo $acl->isAllowed( $user1, $article2 ) ? 'allowed' : 'denied';

如您所见,我正在创建3个角色,一个是一般用户角色,另一个是特定于用户的角色。然后我创建了两篇文章,我允许用户1访问第1条。但是,当我现在测试用户1是否可以访问第2条时,砰,异常!

“`isAllowed”显然应该返回false,而不是抛出异常。假设我有1000个用户和1000篇文章,这意味着除了指定哪些用户可以访问哪一篇文章之外,我还需要指定每个用户不能访问哪些文章。这显然会导致荒谬的长ACL和内存消耗,而且更重要的是,文章不是我唯一的资源类型!

除了将isAllowed封装在try/catch中(显然很笨拙)之外,应对这种奇怪行为的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-08 01:32:03

我不确定你的合唱是否意味着你已经没事了。无论如何,在这种情况下,在检查某个isAllowed之前,您可以做的是:

代码语言:javascript
复制
 if(!$acl ->hasResource($resource))
                $acl -> addResource(new \Zend\Permissions\Acl\Resource\GenericResource($resource));

或者甚至花点时间来扩展默认的类,因此isAllowed方法首先包括上面的代码。这将是一个简单的波卡-轭实践,并将允许您在必须创建资源的地方维护原始模型,同时促进在通用或大多数用例中的易用性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20915054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档