[ Index ] |
PHP Cross Reference of ACL Module |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * This implements an extended Access Control Filter for integration with ACL 5 * 6 * @package acl.base 7 * @author dispy<dispyfree@googlemail.com> 8 * @license LGPLv2 9 */ 10 11 class ExtAccessControlFilter extends CAccessControlFilter{ 12 13 /** 14 * @param array $rules list of access rules. 15 */ 16 public function setRules($rules) { 17 foreach ($rules as $rule) { 18 if (is_array($rule) && isset($rule[0])) { 19 $r = new ExtAccessRule; 20 $r->allow = $rule[0] === 'allow'; 21 foreach (array_slice($rule, 1) as $name => $value) { 22 if ($name === 'expression' || $name === 'roles' || $name === 'message') 23 $r->$name = $value; 24 else 25 $r->$name = array_map('strtolower', $value); 26 } 27 $this->_rules[] = $r; 28 } 29 } 30 } 31 } 32 33 class ExtAccessRule extends CAccessRule{ 34 /** 35 * @param IWebUser $user the user object 36 * @return boolean whether the rule applies to the role 37 */ 38 protected function isRoleMatched($user) { 39 if (empty($this->roles)) 40 return true; 41 42 //retrieve Collection 43 $class = Strategy::getClass('Aro'); 44 $aro = $class::model()->find('foreign_key = :id AND model = :model', 45 array(':id' => $user->id, ':model' => RestrictedActiveRecord::$model) 46 ); 47 48 if(!$aro) 49 return false; 50 51 foreach ($this->roles as $role) { 52 if($aro->is($role)) 53 return true; 54 } 55 return false; 56 } 57 } 58 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Jul 1 19:24:45 2012 | Cross-referenced by PHPXref 0.7.1 |