X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_userinfo.inc;h=2c46e9efcd63f72ca88a5fe53b5824f4845b36e5;hb=7c4b2a414b0cb8f1cfd04713969d7e9b8c78d2f0;hp=8ac07ad71fbc2e2264d559f36f7d6172d6d9ab9f;hpb=a93f31ec30f96579543e33c5061e391a6ddb27e3;p=gosa.git diff --git a/include/class_userinfo.inc b/include/class_userinfo.inc index 8ac07ad71..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']); @@ -170,12 +181,6 @@ class userinfo foreach($this->ocMapping[$category] as $oc){ $acl.= $this->get_permissions($dn, $category."/".$oc); } - } else { - if (isset($this->ocMapping['all'])){ - foreach($this->ocMapping['all'] as $oc){ - $acl.= $this->get_permissions($dn, $category."/".$oc); - } - } } return ($acl); @@ -184,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 */ @@ -261,6 +271,7 @@ class userinfo $ret= preg_replace('/w/', '', $ret); } + $_SESSION['ACL_CACHE']["$dn+$object+$attribute"]= $ret; return ($ret); } @@ -367,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 */