Changeset 2458
- Timestamp:
- 09/08/08 21:53:43 (4 months ago)
- Location:
- branches/schema06/system/classes
- Files:
-
- 2 modified
-
acl.php (modified) (9 diffs)
-
usergroup.php (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/schema06/system/classes/acl.php
r2451 r2458 32 32 { 33 33 self::$permission_ids = DB::get_keyvalue( 'SELECT name, id FROM {permissions};' ); 34 if ( self::$permission_ids === FALSE ) { 34 35 if ( ! isset(self::$permission_ids) ) { 35 36 self::$permission_ids = array(); 36 37 } … … 66 67 $name= self::normalize_permission( $name ); 67 68 // first, make sure this isn't a duplicate 68 if ( ACL:: permission_exists( $name ) ) {69 if ( ACL::token_exists( $name ) ) { 69 70 return false; 70 71 } … … 161 162 public static function token_id( $name ) 162 163 { 163 if( is_ integer($name) ) {164 if( is_numeric($name) ) { 164 165 return $name; 165 166 } … … 238 239 group_id=? AND token_id=?;'; 239 240 240 $result = DB::get_value( $sql );241 if ( isset( $result ) && self::$permission_ids[$result] == $access) {241 $result = DB::get_value( $sql, array( $group, $permission) ); 242 if ( isset( $result ) && $result == self::$permission_ids[$access] ) { 242 243 // the permission has been granted to this group 243 244 return true; … … 289 290 $sql = <<<SQL 290 291 SELECT permission_id 291 FROM (292 (293 SELECT permission_id294 292 FROM {user_token_permissions} 295 293 WHERE user_id = :user_id 296 294 AND token_id = :token_id 297 ) AS up298 295 UNION ALL 299 ( 300 SELECT gp.permission_id 296 SELECT gp.permission_id 301 297 FROM {users_groups} ug 302 298 INNER JOIN {group_token_permissions} gp 303 299 ON ug.group_id = gp.group_id 304 300 AND ug.user_id = :user_id 305 AND gp.token_id = :token_id 306 ORDER BY permission_id ASC 307 LIMIT 1 308 ) 309 ) 310 LIMIT 1; 301 AND gp.token_id = :token_id; 311 302 SQL; 312 303 $result = DB::get_value( $sql, array( ':user_id' => $user_id, ':token_id' => $permission ) ); 313 304 314 if ( isset( $result ) && self::$permission_ids[$result] == $access) {305 if ( isset( $result ) && $result == self::$permission_ids[$access] ) { 315 306 return true; 316 307 } … … 332 323 // DB::update will insert if the token is not already in the group tokens table 333 324 $result = DB::update( 334 '{group_token s_permissions}',325 '{group_token_permissions}', 335 326 array( 'permission_id' => self::$permission_ids[$access] ), 336 327 array( 'group_id' => $group_id, 'token_id' => self::token_id( $token_id ) ) 337 328 ); 329 330 $ug = UserGroup::get_by_id( $group_id ); 331 $ug->clear_permissions_cache(); 338 332 339 333 return $result; … … 350 344 { 351 345 $result = DB::update( 352 '{user_token s_permissions}',346 '{user_token_permissions}', 353 347 array( 'permission_id' => self::$permission_ids[$access] ), 354 348 array( 'user_id' => $user_id, 'token_id' => self::token_id( $token_id ) ) … … 388 382 public static function revoke_group_permission( $group_id, $token_id ) 389 383 { 390 $result = DB::delete( '{group_token s_permissions}',384 $result = DB::delete( '{group_token_permissions}', 391 385 array( 'group_id' => $group_id, 'token_id' => $token_id ) ); 386 387 $ug = UserGroup::get_by_id( $group_id ); 388 $ug->clear_permissions_cache(); 392 389 393 390 return $result; … … 402 399 public static function revoke_user_permission( $user_id, $token_id ) 403 400 { 404 $result = DB::delete( '{user_token s_permissions}',401 $result = DB::delete( '{user_token_permissions}', 405 402 array( 'user_id' => $user_id, 'token_id' => $token_id ) ); 406 403 -
branches/schema06/system/classes/usergroup.php
r2451 r2458 40 40 $this->member_ids= $result; 41 41 } 42 43 if ( $results= DB::get_results( 'SELECT token_id, permission_id FROM {group_token_permissions} WHERE group_id=?', array( $this->id ) ) ) {44 foreach ( $results as $result ) {45 $this->permissions[$result->token_id] = $result->permission_id;46 }47 }48 42 } 49 43 … … 212 206 $permissions = array_map(array('ACL', 'token_id'), $permissions); 213 207 214 // Merge andgrant the new permissions208 // grant the new permissions 215 209 foreach ( $permissions as $permission ) { 216 $this->permissions[$permission] = $access;217 210 ACL::grant_group( $this->id, $permission, $access ); 218 211 } … … 236 229 $permissions = Utils::single_array( $permissions ); 237 230 $permissions = array_map(array('ACL', 'token_id'), $permissions); 231 if ( ! isset( $this->permissions ) ) { 232 $this->load_permissions_cache(); 233 } 238 234 // Remove permissions from the granted list 239 235 $this->permissions = array_diff_key( $this->permissions, $permissions ); … … 254 250 { 255 251 $permission= ACL::token_id( $permission ); 252 if ( ! isset( $this->permissions ) ) { 253 $this->load_permissions_cache(); 254 } 256 255 if ( isset( $this->permissions[$permission] ) && $this->permissions[$permission] == $access ) { 257 256 return true; 258 257 } 259 258 return false; 259 } 260 261 /** 262 * Clear permissions cache. 263 */ 264 public function clear_permissions_cache() 265 { 266 unset( $this->permissions ); 267 } 268 269 /** 270 * Load permissions cache. 271 */ 272 public function load_permissions_cache() 273 { 274 if ( $results= DB::get_results( 'SELECT token_id, permission_id FROM {group_token_permissions} WHERE group_id=?', array( $this->id ) ) ) { 275 foreach ( $results as $result ) { 276 $this->permissions[$result->token_id] = $result->permission_id; 277 } 278 } 260 279 } 261 280 … … 313 332 public static function name( $id ) 314 333 { 315 $check_field = is_ int( $id ) ? 'id' : 'name';334 $check_field = is_numeric( $id ) ? 'id' : 'name'; 316 335 $name = DB::get_value( "SELECT name FROM {groups} WHERE {$check_field}=?", array( $id ) ); 317 336 return $name; // get_value returns false if no record is returned … … 325 344 public static function id( $name ) 326 345 { 327 $check_field = is_int( $name ) ? 'id' : 'name'; 328 $id = DB::get_value( "SELECT id FROM {groups} WHERE {$check_field}=?", array( $name ) ); 346 if( is_numeric($name) ) { 347 return $name; 348 } 349 $id = DB::get_value( "SELECT id FROM {groups} WHERE name=?", array( $name ) ); 329 350 return $id; // get_value returns false if no record is returned 330 351 }
