0

大家好,我从 Zend 开始,并试图了解它的工作方式(到达那里),并且使用 Acl 类,人们似乎在一个文件中声明了所有角色和资源。现在对我来说,如果该人仅以基本用户身份登录,甚至只是网站的访客/访客,这似乎有点浪费系统资源。所以我在想是否有可能有不同的类来设置角色取决于当前用户的角色/资源。

我目前的想法是在引导程序中对角色使用 switch/case,并根据角色名称加载单个 Acl 类(例如,'visitor' => 'Model_VisitorAcl'、'users' => 'Model_UserAcl' 和 ' admin' => 'Model_AdminAcl'),每个都有一个对应的类文件。然后在类文件中为每个文件做一些事情。这是可行的,目前我可以将我的所有“管理员”acls 定义为一个(通过 admin-user-visitor 的权限层次结构回溯),然后在“用户”中具有“用户”-“访问者”角色和资源。

但是,这似乎不是最好的方法,好像我想更改“用户”的角色权限,我需要为“用户”和“管理员”更改它。这显然不是 2 个角色的问题,但在更大的系统上显然是。

所以我尝试了类似的东西

类 Model_AdminAcl 扩展 Zend_Acl{
  函数 __construct(){
    $d = new Model_UserAcl();

    //定义管理员角色和权限,从角色继承
    //在Model_UserAcl中设置
  }
}

尝试运行 Model_UserAcl 构造函数,从而设置角色 'user',但这似乎不起作用,抛出“未捕获的异常 'Zend_Acl_Role_Registry_Exception' 和消息 'Parent Role id 'users' 不存在'”错误。

那么下一步是什么?每个模块都有单独的包含文件,并且需要的类是否根据需要包含它们?

还是我只是在这个问题上大发雷霆?

谢谢,心理学

4

1 回答 1

0

好的,解决了这个问题,不知道为什么我一开始没想尝试这个(我认为是星期五大脑疲劳)

我只是把构造函数的内容放到自己的函数中,然后在构造函数中调用那个函数,让类继承自它下面的类。

//模型/VisitorAcl.php
类 Model_VisitorAcl 扩展 Zend_Acl{
  函数 __construct(){
    $this->addVisitorRules();
  }

  函数 addVisitorRules(){
    //添加角色和权限
  }
}

//模型/UserAcl.php
类 Model_UserAcl 扩展 Model_VisitorAcl{
  函数 __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
  }

  函数 addUserRules(){
    //添加角色和权限
  }
}

//模型/AdminAcl.php
类 Model_AdminAcl 扩展 Model_AdminAcl{
  函数 __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
    $this->addAdminRules();
  }

  函数 addAdminRules(){
    //添加角色和权限
  }
}

如果这不是我应该采取的方式,那么请务必让我知道。

心理学

于 2010-01-11T09:00:24.790 回答