X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_userinfo.inc;h=2c46e9efcd63f72ca88a5fe53b5824f4845b36e5;hb=6bc38be280f4dd4b0386b2c256749934cb37e86e;hp=f2aa91d85dd4d1d0800962910d337dd14150e30f;hpb=96a9229b8cbcda886c8c7ab826ae1e1ba3bf97d0;p=gosa.git diff --git a/include/class_userinfo.inc b/include/class_userinfo.inc index f2aa91d85..2c46e9efc 100644 --- a/include/class_userinfo.inc +++ b/include/class_userinfo.inc @@ -64,14 +64,25 @@ class userinfo $this->dn= $userdn; $this->uid= $attrs['uid'][0]; $this->ip= $_SERVER['REMOTE_ADDR']; + + /* Initialize ACL_CACHE */ + $_SESSION['ACL_CACHE']= array(); + $this->reset_acl_cache(); } + public function reset_acl_cache() + { + /* Initialize ACL_CACHE */ + $_SESSION['ACL_CACHE']= array(); + } + function loadACL() { $this->ACL= array(); $this->groups= array(); $this->result_cache =array(); + $this->reset_acl_cache(); $ldap= $this->config->get_ldap_link(); $ldap->cd($this->config->current['BASE']); @@ -178,6 +189,11 @@ class userinfo function get_permissions($dn, $object, $attribute= "", $skip_write= FALSE) { + /* Push cache answer? */ + if (isset($_SESSION['ACL_CACHE']["$dn+$object+$attribute"])){ + return ($_SESSION['ACL_CACHE']["$dn+$object+$attribute"]); + } + $acl= array("r" => "", "w" => "", "c" => "", "d" => "", "m" => "", "a" => ""); /* Build dn array */ @@ -255,6 +271,7 @@ class userinfo $ret= preg_replace('/w/', '', $ret); } + $_SESSION['ACL_CACHE']["$dn+$object+$attribute"]= $ret; return ($ret); } @@ -361,9 +378,10 @@ class userinfo function mergeACL($acl, $type, $newACL) { - if(preg_match("/w/",$newACL) && !preg_match("/r/",$newACL)){ + if (strpos($newACL, 'w') !== FALSE && strpos($newACL, 'r') === FALSE){ $newACL .= "r"; } + foreach(str_split($newACL) as $char){ /* Ignore invalid characters */