00001 <?php
00002
00003
00004
00005
00006
00007 class AccessControl {
00008
00009
00010
00011
00012
00013 private static $implementation = null;
00014
00015
00016
00017
00018
00019 private static $current_aro = null;
00020
00021
00022
00023
00024
00025
00026
00027 public static function set_implementation(IAccessControl $implementation, $keep_old = false) {
00028
00029 if (!empty(self::$implementation)) {
00030 if ($keep_old) {
00031 return;
00032 }
00033 $implementation->set_old_implementation(self::$implementation);
00034 }
00035 self::$implementation = $implementation;
00036 }
00037
00038
00039
00040
00041
00042
00043 public static function set_current_aro($aro) {
00044 self::$current_aro = $aro;
00045 }
00046
00047
00048
00049
00050
00051
00052 public static function get_current_aro() {
00053 return self::$current_aro;
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 public static function is_allowed($action, $item, $params = false, $user = false) {
00067 if (empty($user)) {
00068 $user = self::get_current_aro();
00069 }
00070 if (self::$implementation) {
00071 return self::$implementation->is_allowed($action, $item, $user, $params);
00072 }
00073 return false;
00074 }
00075
00076
00077
00078
00079 public static function load() {
00080 $dirs = Load::get_base_directories(Load::ORDER_DECORATORS);
00081 foreach($dirs as $dir) {
00082 foreach (gyro_glob($dir . 'behaviour/accesscontrol/*.access.php') as $inc) {
00083 include_once($inc);
00084
00085
00086
00087 $clsname = Load::filename_to_classname($inc, 'Control');
00088 if (class_exists($clsname)) {
00089 self::set_implementation(new $clsname());
00090 }
00091 else {
00092 throw new Exception(tr('AccessControl %c not found', 'core', array('%c' => $clsname)));
00093 }
00094 }
00095 }
00096 }
00097 }