00001 <?php
00011 class Access
00012 {
00013 var $logged_in;
00014 var $access_id;
00015 var $access_keys;
00016
00017 function Access()
00018 {
00019 $this->clear_authentication(false);
00020 $this->identify();
00021 }
00022
00023 function identify()
00024 {
00025 if(isset($_SESSION['_ACCESS'])) {
00026 $this->logged_in = !!($_SESSION['_ACCESS']['id'] > 0);
00027 $this->access_id = $_SESSION['_ACCESS']['id'];
00028 $this->access_keys = $_SESSION['_ACCESS']['keys'];
00029 }
00030 }
00031
00032 function clear_authentication($clear_sess=true)
00033 {
00034 $this->clear_id($clear_sess);
00035 if($clear_sess) unset($_SESSION['_ACCESS']);
00036 }
00037
00038 function set_id($id)
00039 {
00040 $this->access_id = $id;
00041 $this->logged_in = !!$id;
00042
00043 $_SESSION['_ACCESS']['id'] = $this->access_id;
00044 }
00045
00046 function get_id()
00047 {
00048 return $this->access_id;
00049 }
00050
00051 function clear_id($clear_sess=false)
00052 {
00053 $this->clear_keys($clear_sess);
00054 $this->logged_in = false;
00055 $this->access_id = 0;
00056 if($clear_sess) $_SESSION['_ACCESS']['id'] = $this->access_id;
00057 }
00058
00059 function set_key($key)
00060 {
00061 if(empty($key) || !isset($GLOBALS['ACCESS_KEYS'][$key])) return;
00062 if(ACCESS_MODEL === "roles") {
00063 foreach($GLOBALS['ACCESS_KEYS'][$key] as $k) {
00064 $this->access_keys[] = $k;
00065 }
00066 } else if(ACCESS_MODEL === "discrete") {
00067 $this->access_keys[] = $key;
00068 }
00069
00070 $_SESSION['_ACCESS']['keys'] = $this->access_keys;
00071 }
00072
00073 function set_keys($keys)
00074 {
00075 if(!is_array($keys)) $keys = explode(',', $keys);
00076 foreach($keys as $key) $this->set_key($key);
00077 }
00078
00091 function get_keys($tree=false)
00092 {
00093 if(ACCESS_MODEL == "roles") {
00094 return array_keys($GLOBALS['ACCESS_KEYS']);
00095 } else if(ACCESS_MODEL == "discrete") {
00096 $ret = array();
00097 foreach($GLOBALS['ACCESS_KEYS'] as $k=>$v) {
00098 if($tree) {
00099 $ret[] = $k;
00100 foreach($v as $vv) $ret[] = "-- $vv";
00101 } else {
00102 foreach($v as $vv) $ret[] = $vv;
00103 }
00104 }
00105 return $ret;
00106 }
00107 }
00108
00116 function serialize_keys($keys)
00117 {
00118 $ak = array();
00119 if(!is_array($keys)) $keys = array($keys);
00120 if(ACCESS_MODEL == "discrete") {
00121 foreach($keys as $key) {
00122 if(substr($key, 0, 3) == '-- ') {
00123
00124 $ak[] = substr($key, 3);
00125 } else {
00126
00127 foreach($GLOBALS['ACCESS_KEYS'][$key] as $v) $ak[] = $v;
00128 }
00129 }
00130 } else if(ACCESS_MODEL == "roles") {
00131
00132 $ak = $keys;
00133 }
00134 return join(',', array_unique($ak));
00135 }
00136
00144 function unserialize_keys($keys)
00145 {
00146
00147 if(is_array($keys)) return $keys;
00148
00149 if(ACCESS_MODEL == "discrete") {
00150
00151
00152 $ak = array();
00153 foreach(explode(',', $keys) as $k) $ak[] = "-- $k";
00154 } else if(ACCESS_MODEL == "roles") {
00155 $ak = explode(',', $keys);
00156 }
00157 return $ak;
00158 }
00159
00160 function clear_keys($clear_sess=false)
00161 {
00162 $this->access_keys = array();
00163 if($clear_sess) $_SESSION['_ACCESS']['keys'] = $this->access_keys;
00164 }
00165
00166 function has_access($key)
00167 {
00168 if(!is_array($this->access_keys)) return false;
00169 return in_array($key, $this->access_keys);
00170 }
00171 }
00172
00173 ?>