public function __construct() { $resourcesModel = new Z_Model_Resources(); $resources = $resourcesModel->fetchAll()->toArray(); $resourceById = array(); foreach ($resources as $resource) { $resourceById[$resource['id']] = $resource['resourceId']; } $res_added = false; while (!$res_added) { $res_added = true; foreach ($resources as $resource) { $parentResourceId = array_key_exists($resource['parentid'], $resourceById) ? $resourceById[$resource['parentid']] : NULL; if ($parentResourceId == NULL || $this->has($parentResourceId)) { if (!$this->has($resource['resourceId'])) { $this->addResource($resource['resourceId'], $parentResourceId); } } else { $res_added = false; } } } $rolesModel = new Z_Model_Roles(); $roles = $rolesModel->fetchAll()->toArray(); // !!! foreach ($roles as $role) { $this->addRoleParents($role); // !!! if (!$this->_getRoleRegistry()->has($role['roleId'])) { $this->addRole($role['roleId'], $rolesModel->getParentsArray($role['id'])); } } $privilegesModel = new Z_Model_Privileges(); $rulesModel = new Z_Model_Rules(); $rules = $rulesModel->getAllRules(); foreach ($rules as $rule) { if (empty($rule['roleId'])) { $rule['roleId'] = null; } if (empty($rule['resourceId'])) { $rule['resourceId'] = null; } $privileges = $privilegesModel->getRulePrivileges($rule['id']); foreach ($privileges as $privilege) { if (empty($privilege)) { $privilege = null; } if ('allow' === $rule['rule']) { $this->allow($rule['roleId'], $rule['resourceId'], $privilege); } elseif ('deny' === $rule['rule']) { $this->deny($rule['roleId'], $rule['resourceId'], $privilege); } else { require_once 'Zend/Acl/Exception.php'; throw new Zend_Acl_Exception("Unsupported rule type; must be either '" . self::TYPE_ALLOW . "' or '" . self::TYPE_DENY . "'"); } } } }