X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_acl.inc;h=a8fd374e1f7abacb20e811909ad1b3014abfc88b;hb=4e21fc2c719f4175c9b0e72ee9fbc95249a16ddf;hp=a9b7389ad47c798104ea73be48fe39616bd7462a;hpb=311455360c4d47bd49bb1ede461ccc71e5ff6dae;p=gosa.git diff --git a/include/class_acl.inc b/include/class_acl.inc index a9b7389ad..a8fd374e1 100644 --- a/include/class_acl.inc +++ b/include/class_acl.inc @@ -21,6 +21,7 @@ class acl extends plugin var $aclObjects= array(); var $aclMyObjects= array(); var $users= array(); + var $roles= array(); var $groups= array(); var $recipients= array(); var $isContainer= FALSE; @@ -28,7 +29,7 @@ class acl extends plugin var $wasNewEntry= FALSE; var $ocMapping= array(); var $savedAclContents= array(); - + var $myAclObjects = array(); function acl ($config, $parent, $dn= NULL) { @@ -49,7 +50,7 @@ class acl extends plugin $this->parent= $parent; /* Container? */ - if (preg_match('/^(ou|c|l|dc)=/i', $dn)){ + if (preg_match('/^(o|ou|c|l|dc)=/i', $dn)){ $this->isContainer= TRUE; } @@ -84,6 +85,30 @@ class acl extends plugin } ksort($this->groups); + /* Roles */ + $ldap->cd($config->current['BASE']); + if ($tag == ""){ + $ldap->search('(objectClass=gosaRole)', array('cn', 'description','gosaAclTemplate','dn')); + } else { + $ldap->search('(&(objectClass=gosaRole)(gosaUnitTag='.$tag.'))', array('cn', 'description','gosaAclTemplate','dn')); + } + while ($attrs= $ldap->fetch()){ + $dsc= ""; + if (isset($attrs['description'][0])){ + $dsc= $attrs['description'][0]; + } + + $role_id = $attrs['dn']; + + $this->roles[$role_id]['acls'] =array(); + for ($i= 0; $i < $attrs['gosaAclTemplate']['count']; $i++){ + $acl= $attrs['gosaAclTemplate'][$i]; + $this->roles[$role_id]['acls'] = array_merge($this->roles[$role_id]['acls'],$this->explodeACL($acl)); + } + $this->roles[$role_id]['description'] = $dsc; + $this->roles[$role_id]['cn'] = $attrs['cn'][0]; + } + /* Objects */ $tmp= get_global('plist'); $plist= $tmp->info; @@ -154,8 +179,8 @@ class acl extends plugin "one" => _("One level"), "base" => _("Current object"), "sub" => _("Complete subtree"), - "psub" => _("Complete subtree (permanent)")); - //"role" => _("Use ACL defined in role")); + "psub" => _("Complete subtree (permanent)"), + "role" => _("Use ACL defined in role")); } else { $this->aclTypes= array("base" => _("Current object"), "role" => _("Use ACL defined in role")); @@ -173,7 +198,7 @@ class acl extends plugin { /* Call parent execute */ plugin::execute(); - + $tmp= get_global('plist'); $plist= $tmp->info; @@ -187,11 +212,13 @@ class acl extends plugin $new_acl= array(); $aclDialog= FALSE; + $firstedit= FALSE; foreach($_POST as $name => $post){ /* Actions... */ if (preg_match('/^acl_edit_.*_x/', $name)){ $this->dialogState= 'create'; + $firstedit= TRUE; $this->dialog= TRUE; $this->currentIndex= preg_replace('/^acl_edit_([0-9]+).*$/', '\1', $name); $this->loadAclEntry(); @@ -260,10 +287,15 @@ class acl extends plugin $new_acl[$object][$attribute]= $value; } } + + if(isset($_POST['selected_role'])){ + $this->aclContents = ""; + $this->aclContents = base64_decode($_POST['selected_role']); + } } /* Only be interested in new acl's, if we're in the right _POST place */ - if ($aclDialog && is_array($this->ocMapping[$this->aclObject])){ + if ($aclDialog && $this->aclObject != "" && is_array($this->ocMapping[$this->aclObject])){ foreach ($this->ocMapping[$this->aclObject] as $oc){ unset($this->aclContents[$oc]); @@ -278,7 +310,7 @@ class acl extends plugin } /* Save new acl in case of base edit mode */ - if ($this->aclType == 'base'){ + if ($this->aclType == 'base' && !$firstedit){ $this->aclContents= $new_acl; } @@ -363,7 +395,7 @@ class acl extends plugin /* Fill in entries */ foreach ($this->gosaAclEntry as $key => $entry){ - $field1= array("string" => $this->aclTypes[$entry['type']], "attach" => "style='width:100px'"); + $field1= array("string" => $this->aclTypes[$entry['type']], "attach" => "style='width:150px'"); $field2= array("string" => $this->assembleAclSummary($entry)); $action= ""; $action.= ""; @@ -449,6 +481,12 @@ class acl extends plugin if ($this->aclType == 'base'){ $smarty->assign('aclSelector', $this->buildAclSelector($this->myAclObjects)); } + + /* Role selector if scope is base */ + if ($this->aclType == 'role'){ + $smarty->assign('roleSelector', "Role selector");#, $this->buildRoleSelector($this->myAclObjects)); + $smarty->assign('roleSelector', $this->buildRoleSelector($this->roles)); + } } if ($this->dialogState == 'edit'){ @@ -464,7 +502,13 @@ class acl extends plugin if ($this->aclObject == 'all'){ $aclObjects['all']= _("All objects in current subtree"); } - $smarty->assign('aclSelector', $this->buildAclSelector($aclObjects)); + + /* Role selector if scope is base */ + if ($this->aclType == 'role'){ + $smarty->assign('roleSelector', $this->buildRoleSelector($this->roles)); + } else { + $smarty->assign('aclSelector', $this->buildAclSelector($aclObjects)); + } } /* Show main page */ @@ -473,15 +517,20 @@ class acl extends plugin return ($smarty->fetch (get_template_path('acl.tpl'))); } + function sort_by_priority($list) { $tmp= get_global('plist'); $plist= $tmp->info; asort($plist); + $newSort = array(); foreach($list as $name => $translation){ $na = preg_replace("/^.*\//","",$name); - $prio= $plist[$na]['plPriority'] ; + $prio = 0; + if(isset($plist[$na]['plPriority'])){ + $prio= $plist[$na]['plPriority'] ; + } $newSort[$name] = $prio; } @@ -495,6 +544,35 @@ class acl extends plugin return($ret); } + + function buildRoleSelector($list) + { + $D_List =new DivSelectBox("Acl_Roles"); + + $selected = $this->aclContents; + if(!is_string($this->aclContents) || !isset($list[$this->aclContents])){ + $selected = key($list); + } + + $str =""; + foreach($list as $dn => $values){ + + if($dn == $selected){ + $option = ""; + }else{ + $option = ""; + } + + $field1 = array("string" => $option) ; + $field2 = array("string" => $values['cn'], "attach" => "style='width:200px;'") ; + $field3 = array("string" => $values['description'],"attach" => "style='border-right:0px;'") ; + + $D_List->AddEntry(array($field1,$field2,$field3)); + } + return($D_List->DrawList()); + } + + function buildAclSelector($list) { $display= ""; @@ -508,10 +586,10 @@ class acl extends plugin $display .= ""; $display .= ""; - $display .= ""; + $display .= " - "; $display .= ""; - $display .= ""; - + $display .= " - "; + $display .= ""; $display .= ""; @@ -523,10 +601,18 @@ class acl extends plugin $display .= ""; $display .= ""; $display .= ""; - $display .= ""; + $display .= " - "; + $display .= ""; + $display .= ""; + $display .= ""; + $display .= " - "; - /* Build general objects */ + $display .= ""; + $display .= ""; + $display .= ""; + $display .= ""; + /* Build general objects */ $list =$this->sort_by_priority($list); foreach ($list as $key => $name){ @@ -589,7 +675,7 @@ class acl extends plugin $display.= "\n