| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | <?phpclass LtRbac {	public $configHandle;	protected $acl; 	public function __construct()	{		if (! $this->configHandle instanceof LtConfig)		{			if (class_exists("LtObjectUtil", false))			{				$this->configHandle = LtObjectUtil::singleton("LtConfig");			}			else			{				$this->configHandle = new LtConfig;			}		}	}	public function init()	{		$this->acl = $this->configHandle->get('rbac.acl');	}	public function checkAcl($roles, $resource)	{		$allow = false;		// deny priority		foreach (array("allow", "deny") as $operation) 		{			foreach($roles as $role) 			{				if (isset($this->acl[$operation][$role])) 				{					// everyone *					if (in_array($resource, $this->acl[$operation]['*'])) 					{						$allow = "allow" == $operation ? true : false;						break;					} 					if (in_array($resource, $this->acl[$operation][$role])) 					{						$allow = "allow" == $operation ? true : false;						break;					}					else 					{						$res = explode('/', trim($resource, '/'));						for ($i = count($res)-1; $i >= 0; $i--) 						{							$res[$i] = '*';							$tmp = implode('/', $res);							if (in_array($tmp, $this->acl[$operation][$role])) 							{								$allow = "allow" == $operation ? true : false;								break;							}							unset($res[$i]);						}					}				}			}		}		return $allow;	}/*	private function __set($p,$v)	{		$this->$p = $v;	}	private function __get($p)	{		if(isset($this->$p))		{			return($this->$p);		}		else		{			return(NULL);		}	}*/}
 |