An error occurred while loading the file. Please try again.
-
Côme Bernigaud authored32b37301
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2003-2010 Cajus Pollmeier
Copyright (C) 2011-2013 FusionDirectory
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*!
* \file class_acl.inc
* Source code for Class ACL
*/
/*!
* \brief This class contains all the function needed to manage acl
* \see class_plugin
*/
class acl extends plugin
{
/* attribute list for save action */
var $attributes = array('gosaAclEntry');
var $objectclasses = array('gosaAcl');
/* Helpers */
var $dialogState = "head";
var $gosaAclEntry = array();
var $aclType = "";
var $aclObject = "";
var $aclContents = array();
var $aclFilter = "";
var $aclMyObjects = array();
var $roles = array();
var $recipients = array();
var $currentIndex = 0;
var $wasNewEntry = FALSE;
var $savedAclContents = array();
var $acl_category = "acl/";
/*!
* \brief Acl contructor
*
* \param String $config Configuration file for ACL
*
* \param String $parent
*
* \param String $dn The DN
*/
function acl (&$config, $dn = NULL, $baseobject = NULL)
{
/* Include config object */
parent::__construct($config, $dn, $baseobject);
/* Load ACL's */
$this->gosaAclEntry = array();
if (isset($this->attrs['gosaAclEntry'])) {
for ($i = 0; $i < $this->attrs['gosaAclEntry']['count']; $i++) {
$acl = $this->attrs['gosaAclEntry'][$i];
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
$this->gosaAclEntry = array_merge($this->gosaAclEntry, acl::explodeACL($acl));
}
}
ksort($this->gosaAclEntry);
/* Save parent - we've to know more about it than other plugins... */
if (($baseobject !== NULL) && isset($baseobject->parent)) {
$this->parent =& $baseobject->parent;
}
$ldap = $config->get_ldap_link();
/* Roles TODO - use objects::ls?*/
$ldap->cd($config->current['BASE']);
$ldap->search('(objectClass=gosaRole)', array('cn', 'description','gosaAclTemplate','dn'));
while ($attrs = $ldap->fetch()) {
$role_id = $attrs['dn'];
$this->roles[$role_id]['acls'] = acl::explodeRole($attrs['gosaAclTemplate']);
$this->roles[$role_id]['cn'] = $attrs['cn'][0];
if (isset($attrs['description'][0])) {
$this->roles[$role_id]['description'] = $attrs['description'][0];
}
}
/* Finally - we want to get saved... */
$this->is_account = TRUE;
}
/*!
* \brief Function sort an array by elements priority
*
* \param Array $list Array to be sorted
*/
function sort_by_priority($list)
{
uksort($list,
function ($a, $b)
{
$infos_a = pluglist::pluginInfos(preg_replace('|^[^/]*/|', '', $a));
$infos_b = pluglist::pluginInfos(preg_replace('|^[^/]*/|', '', $b));
$pa = (isset($infos_a['plPriority'])?$infos_a['plPriority']:0);
$pb = (isset($infos_b['plPriority'])?$infos_b['plPriority']:0);
if ($pa == $pb) {
return 0;
}
return ($pa < $pb ? -1 : 1);
}
);
return $list;
}
/*!
* \brief Explode a role
*
* \param string $acl ACL to be exploded
*/
static function explodeRole($role)
{
if (!is_array($role)) {
$role = array($role);
}
unset($role['count']);
$result = array();
foreach ($role as $aclTemplate) {
$list = explode(':', $aclTemplate, 2);
$result[$list[0]] = self::extractACL($list[1]);
}
ksort($result);