X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_userinfo.inc;h=2c46e9efcd63f72ca88a5fe53b5824f4845b36e5;hb=6bc38be280f4dd4b0386b2c256749934cb37e86e;hp=c3712521ccb9a3d7b9dde672140672a644baa2b0;hpb=7ccc8e6b4d9f06f42c262212fce14caacc77ff3c;p=gosa.git diff --git a/include/class_userinfo.inc b/include/class_userinfo.inc index c3712521c..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 */ @@ -438,7 +456,6 @@ class userinfo $acl = "rwcdm"; $types = "rwcdm"; - if(!is_string($category)){ trigger_error("category must be string"); $acl = "";