代码之家  ›  专栏  ›  技术社区  ›  Psytronic

Zend_ACL模块化类系统

  •  0
  • Psytronic  · 技术社区  · 15 年前

    嘿,伙计们,我从Zend开始,试图理解它的工作方式(到达那里),对于ACL类,人们似乎在一个文件中声明了所有的角色和资源。现在对我来说,如果这个人只是作为一个基本用户登录,甚至只是一个访客/访客登录,那么这似乎有点浪费系统资源。所以我在想,是否可能有不同的类,它们根据当前用户的角色/资源来设置角色。

    我目前的想法是在引导程序中的角色上使用switch/case,并基于角色名称加载各个ACL类(例如,“visitor”=>“model”=>“users”=>“model”=>“useracl”和“admin”=>“model”=&u admin acl”),每个类都有相应的类文件。然后在类文件中为每个类做一些事情。这是可行的,目前我可以一个定义我的所有“管理员”ACL(通过管理员用户访问者的权限继承关系进行回溯),然后在“用户”中具有“用户”-“访问者”角色和资源。

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

    所以我尝试了

    class Model_AdminAcl extends Zend_Acl{
      function __construct(){
        $d = new Model_UserAcl();
    
        //defining the admin role and permissions, with inheritance from the roles 
        //set in Model_UserAcl
      }
    }
    

    若要尝试运行模型“user acl construct”函数,从而设置角色“user”,但这似乎不起作用,将引发“未捕获异常”zend“acl”role“registry”exception,并显示消息“parent role id”users“不存在”。 错误。

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

    或者我只是在利用这个问题来制造麻烦?

    谢谢, PSY

    1 回复  |  直到 14 年前
        1
  •  0
  •   Psytronic    15 年前

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

    我只是将构造函数的内容放入它自己的函数中,然后在构造函数中调用该函数,并使类从它下面的类继承。

    //Model/VisitorAcl.php
    class Model_VisitorAcl extends Zend_Acl{
      function __construct(){
        $this->addVisitorRules();
      }
    
      function addVisitorRules(){
        //adding the role and permissions
      }
    }
    
    //Model/UserAcl.php
    class Model_UserAcl extends Model_VisitorAcl{
      function __construct(){
        $this->addVisitorRules();
        $this->addUserRules();
      }
    
      function addUserRules(){
        //adding the role and permissions
      }
    }
    
    //Model/AdminAcl.php
    class Model_AdminAcl extends Model_AdminAcl{
      function __construct(){
        $this->addVisitorRules();
        $this->addUserRules();
        $this->addAdminRules();
      }
    
      function addAdminRules(){
        //adding the role and permissions
      }
    }
    

    如果这不是我应该做的事,那么请无论如何告诉我。

    PSY