【问题标题】:Zend framework ACL questionZend 框架 ACL 问题
【发布时间】:2011-03-07 16:40:56
【问题描述】:

我是 Zend 框架的新手,目前正在研究 Zend_Acl 。 网上有很多例子。在很多这样的例子中,你会看到这样的代码:

class My_Acl extends Zend_Acl {
  public function __construct() {
    //Add a new role called "guest"
    $this->addRole(new Zend_Acl_Role('guest'));

    //Add a role called user, which inherits from guest
    $this->addRole(new Zend_Acl_Role('user'), 'guest');

    //Add a resource called page
    $this->add(new Zend_Acl_Resource('page'));

    //Add a resource called news, which inherits page
    $this->add(new Zend_Acl_Resource('news'), 'page');

    //Finally, we want to allow guests to view pages
    $this->allow('guest', 'page', 'view');

    //and users can comment news
    $this->allow('user', 'news', 'comment');
  }
}

所以基本上 - 我们扩展 Zend_Acl 类来定义角色和资源。我有点不明白为什么我们要创建单独的类而不是在引导程序中的资源方法中做同样的事情,然后将结果推送到注册表中?

例如:

protected function _initAcl()
{
    $myacl = new Zend_Acl();
    $myacl->addRole(new Zend_Acl_Role('guest'));
    $myacl->addRole(new Zend_Acl_Role('user'), 'guest');
    $myacl->add(new Zend_Acl_Resource('page'));
    $myacl->add(new Zend_Acl_Resource('news'), 'page');
    $myacl->allow('guest', 'page', 'view');
    $myacl->allow('user', 'news', 'comment');

    Zend_Registry::set('acl', $myacl);
}

我是否认为这些方法会给我们带来相同的结果?

谢谢! p.s.该死的zend很复杂

【问题讨论】:

    标签: zend-framework zend-auth zend-acl


    【解决方案1】:

    一般来说,将这种东西——不仅仅是 ACL——放在它自己的类中会带来很多好处,包括:

    1. 可测试性:您现在拥有一个可以应用单元测试的组件。
    2. 可扩展性:如有必要,您可以对其进行扩展和修改
    3. 可移植性:只需将其放入其他项目中即可使用。

    在这种特殊情况下,这些可能看起来并不那么明显。在更复杂的情况下,这些好处变得更加明显。但与大多数事情一样,YMMV。

    顺便说一句,我还发现 - 有时还会发现 - 学习 ZF 是一种攀登。但我意识到我不仅在学习框架,还学习了许多最佳实践,如依赖注入、单元测试、DRY、SRP、设计模式等。我建议你坚持下去;这很值得。祝你好运!

    【讨论】:

    • 我同意@David,因为通过“扩展类”,您可以创建特定的方法来使用您的 ACL:获取角色或权限,添加特定的测试“hasAccess”等。
    • @Akarun:我什至没有想到这些。谢谢!
    • 我没有想到可测试性,因为我还没有涉足单元测试。
    • 我已经从 Codeigniter 切换了,因为我经常碰壁,而且我对 Zend Framework 的感觉和 David 一样。是的——它很复杂——但这只是因为它打开了许多其他框架抽象掉的概念。例如,在 Ci 手册中的任何地方都没有讨论调度、请求和响应。我正在使用 zf 进行我的 mini cms 实施。会看到它是怎么回事:)
    【解决方案2】:

    我认为它做同样的事情 - 第一个只是从“外部”更清洁:)

    编辑:不,它不干净 - 它只是分开......我认为你可以选择你将如何做......我个人投票支持引导解决方案:)

    【讨论】:

    • 好吧。这就是我想要理解的 - 像这样创建单独的类会是更好的做法吗?
    • 对不起老兄,我也不熟练……刚开始用ZF。我认为只有当你想添加一些功能时,扩展类才是好的。这就是我理解和使用它的方式。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多