All pastes #941604 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-03-13 20:30 UTC
rendered paste body
<?php

class My_Acl extends Zend_Acl {
	
	protected static $_instance = null;
	
	protected function _initialize()
	{
		
		$db = Zend_Db_Table::getDefaultAdapter();
		
		$roles = $db->fetchAll("SELECT
				acl_role_privilege.acl_role_id, 
				acl_resource.acl_resource_name,
				acl_privilege.acl_privilege_name
				FROM acl_role_privilege, acl_resource, acl_privilege WHERE 
				acl_role_privilege.acl_privilege_id = acl_privilege.acl_privilege_id AND
				acl_privilege.acl_resource_id = acl_resource.acl_resource_id");
		
		foreach ($roles as $role) {
			if (!$this->has($role['acl_resource_name'])) {
				$this->add(new Zend_Acl_Resource($role['acl_resource_name']));
			}
			if (!$this->hasRole($role['acl_role_id'])) {
				$this->addRole(new Zend_Acl_Role($role['acl_role_id']));
			}
		}
		
		$this->add(new Zend_Acl_Resource('error'));
		$this->deny();
		$this->allow(null, 'error');
		
		foreach ($roles as $role) {
			$this->allow($role['acl_role_id'], $role['acl_resource_name'], $role['acl_privilege_name']);
		}
		
	}
	
	public static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
            self::$_instance->_initialize();
        }

        return self::$_instance;
    }
	
}