123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- class 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);
- }
- }
- */
- }
|