Location: PHPKode > projects > Content*Builder > contentbuilder/lib/CB_permission2.class.php
<?php

define('PERMISSION_ERROR_FILENOTFOUND',  1);
define('PERMISSION_ERROR_CLASSNOTFOUND', 2);

/**
* Options
* 
* Mit dieser Klasse können Optionen aus der Datenbank abgefragt werden
*
* @package               CB Media Management 
* @access                public
* @author                Jörg Stöber <hide@address.com>
* @author                Sascha Dückers <hide@address.com> 
* @version               0.1 ($Id: CB_permission2.class.php,v 1.5 2004/09/29 00:35:53 cb_fog Exp $)
*/
class CB_permission {
	var $permissions = array();
	var $userID = "";
	var $type = "";
	var $parameter = "";
	var $name = "";
	var $groupArr  = array();
	
	/**
	 * CB_permission::CB_permission()
	 * 
	 * @param boolean $restrictOption
	 * @return 
	 **/
	function CB_permission($restrictOption = false) {
		if(is_array($restrictOption)) {
			if($restrictOption[userID] != false) {
				$userGroupSelect = mysql_query("SELECT * FROM ".TABLE."_user_group_relation WHERE userID = '".$restrictOption[userID]."'");
				if(mysql_num_rows($userGroupSelect) > 0) {
					while($userGroupRow = mysql_fetch_assoc($userGroupSelect)) {
						$groupArr[] = $userGroupRow[groupID];
					}
					
					$this->groupArr = $groupArr;
				}
				
				$this->userID = $restrictOption['userID'];
			}
		
			if($restrictOption[parameter]) {
				$this->parameter = $restrictOption[parameter];
			}
		} else {
			if($restrictParam) {
				$this->parameter = $restrictParam;
			}
		}
	}
	
	/**
	 * CB_permission::factory()
	 * 
	 * @param $objType
	 * @param $optionArr
	 * @return 
	 **/
	function factory($objType, $optionArr) {
		$file = dirname(__FILE__)."/permission/perm.".$objType.".class.php";
		if(is_file($file)) {
			require_once($file);
			
			$classname = "CB_permission_".$objType;
			
			if (!class_exists($classname)) {
				$tmp = PEAR::raiseError(null, PERMISSION_ERROR_CLASSNOTFOUND, null, null, "Class $classname not found", 'CB_permission_error', true);
				return $tmp;
			}
			
			$result =& new $classname($optionArr);
			return $result;
		} else {
			$tmp = PEAR::raiseError(null, PERMISSION_ERROR_FILENOTFOUND, null, null, "Unable to include the $file file", 'CB_permission_error', true);
			return $tmp;
		}
	}
	
	/**
	* Limitierung der Permissions auf einen bestimmten Palettentyp
	* 
	* @access       public	
	* @param        string $type Permission Typ
	*/
	function setType($type) {
		$this->type = $type;
	}
	
	/**
	* Limitierung der Permissions auf einen bestimmten Paletten Namen
	* 
	* @access       public	
	* @param        string $name Permission Paletten Name
	*/
	function setRestrictName($name) {
		$this->name = $name;
	}
	
	/**
	* Permissions aus der Datenbank abrufen
	* @access		public
	*/
	function getPermissionList() {
		$this->permission = array();
		
		/* 
		* Limitierung auf den gesetzten Permission Typ
		*/
		if($this->type != "") {
			$limitByType = "type = '$this->type'";			
		}
		
		/* 
		* Limitierung auf den gesetzten Permission Typ
		*/
		if($this->name != "") {
			$limitByName = "name = '$this->name'";			
		}
		
		/*
		* Mit $restrictParam kann man die Datensätze auf einen bestimmten 
		* gespeicherten Parameter einschränken. Reduziert die Abfragen
		*/
		if($this->parameter != "") {
			$limitByParam = "parameter = '".$this->parameter."'";
		}
		
		/*
		* Mit $userID beim Konstruktor kann man die Datensätze auf bestimmte 
		* gespeicherte Parameter einschränken. Reduziert die Abfragen
		*/
		if(count($this->groupArr) > 0) {
			foreach($this->groupArr as $v) {
				$_tempParamArr[] = "parameter = '".$v."'";
			}
			
			$limitByParam .= "(".implode(" OR ", $_tempParamArr).")";
		}
		
		/*
		* Zusammenbau des Where Statements für die SQL Optionen Abfrage
		*/
		if($limitByParam || $limitByType) {
			$limitWhere = "WHERE ";
			/*
			* $_tempSet gibt an, ob schon Where Statements abgegeben wurden, so dass
			* bei $limitByName & $limitByParam ggf. ein AND hinzugefügt werden kann
			*/
			$_tempSet = false;
			if($limitByType) {
				$limitWhere .= $limitByType;
				$_tempSet = true;
			}
			if($limitByName) {
				if($_tempSet) {
					$limitWhere .= " AND ";
				}
				$limitWhere .= $limitByName;
				$_tempSet = true;
			}
			if($limitByParam) {
				if($_tempSet) {
					$limitWhere .= " AND ";
				}
				$limitWhere .= $limitByParam;
			}
			
		}
		
		/*
		* Abfrage der Daten
		*/
		$this->permissions = array();
		$permissionQuery = mysql_query("SELECT * FROM ".TABLE."_permission $limitWhere");
		while($permissionRow = mysql_fetch_object($permissionQuery)) {
			/*
			* wenn $restrictParam angegeben wurde, ist es, als ob kein 
			* Parameter gesetzt wurde
			*/
			if($this->parameter) {
				$permissionRow->parameter = $this->parameter;
			}
			
			if($permissionRow->parameter == "") {
				$this->permission[$permissionRow->name]['empty'] = $permissionRow->value;
			} else {
				$this->permission[$permissionRow->name][$permissionRow->parameter] = $permissionRow->value;
			}
		}
	}

	/**
	* Abrufen einer bestimmten Rechte Palette
	*
	* @access       public	
	* @param        string $key Schlüsselname der Rechtepalette
	* @return       string $value
	*/
	function getPermissionSet($key, $parameter = "") {
		if($this->parameter != "") {
			$parameter = $this->parameter;
		}
		
		$returnValue = false;
		if($parameter != "") {
			if(isset($this->permission[$key][$parameter])) {
				$returnValue = $this->permission[$key][$parameter];
			}
		} else {
			if(isset($this->permission[$key]['empty'])) {
				$returnValue = $this->permission[$key]['empty'];
			}
		}
		return $returnValue;
	}
	
	/**
	* Holt alle Permission Sets eines bestimmten Namens ab. (durch Parameter könnten es mehrere sein)
	*
	* @access       public	
	* @param        string $key Schlüsselname der Option
	* @param        boolean $concat sollen mehrere Rechte Paletten zu einer zusammengefasst werden?
	* @return       mixed $value
	*/
	function getMultiplePermissionSet($key, $concat = false) {
		$returnValue = 0;
		if( is_array($this->permission[$key]) ) {
			if($concat == false) {
				/*
				* Aufbau eines Assoziativen Arrays für die Rechte
				*/
				foreach($this->permission[$key] as $k => $v) {
					$returnValue[$k] = $v;
				}
				if(!is_array($returnValue)) {
					$returnValue = 0;
				}
			} else {
				/*
				* Jede Palette wird mit dem inklusiv ODER Operator mit der bestehenden verschmolzen
				* Heraus kommt eine Palette die alle gesetzten Bits der anderen Paletten enthält
				*/
				foreach($this->permission[$key] as $v) {
					$returnValue |= $v;
				}
			}
		}
		return $returnValue;
	}
	
	/**
	* Holt alle Permission Sets eines bestimmten Namens ab. (durch Parameter könnten es mehrere sein)
	*
	* @access       public	
	* @param        string $key Schlüsselname der Option
	* @param        boolean $concat sollen mehrere Rechte Paletten zu einer zusammengefasst werden?
	* @return       mixed $value
	*/
	function getAllPermissionSet($concat = false) {
		$returnValue = 0;
		if( is_array($this->permission) ) {
			if($concat == false) {
				$returnValue = $this->permission;
			} else {
				/*
				* Jede Palette wird mit dem inklusiv ODER Operator mit der bestehenden verschmolzen
				* Heraus kommt eine Palette die alle gesetzten Bits der anderen Paletten enthält
				*/
				foreach($this->permission as $value) {
					foreach($value as $v) {
						$returnValue |= $v;
					}
				}
			}
		}
		return $returnValue;
	}
	
	/**
	* Aktualisieren einer bestimmten Option in die Datenbank. 
	* Es wird das aktuell gesetzte Modul genommen
	*
	* @access       public	
	* @param        string $name Schlüsselname der Option
	* @param        string $value Wert der Option
	*/
	function updatePermission($name, $value, $parameter = "") {
		$type = $this->type;
		if($this->checkPermission($name, $parameter) == false) {
			$result = $this->insertPermission($name, $value, $parameter);
		} else {
			if($parameter != "") {
				$result = mysql_query("UPDATE ".TABLE."_permission SET value = '$value' WHERE name = '$name' AND type = '$type' AND parameter = '$parameter'");
			} else {
				$result = mysql_query("UPDATE ".TABLE."_permission SET value = '$value' WHERE name = '$name' AND type = '$type'");
			}
		}
		return $result;
	}
	
	/**
	* Screiben einer bestimmten Option in die Datenbank. 
	* Es wird das aktuell gesetzte Modul genommen
	*
	* @access       public	
	* @param        string $name Schlüsselname der Option
	* @param        string $value Wert der Option
	*/
	function insertPermission($name, $value, $parameter = "") {
		$type = $this->type;
		if($parameter != "") {
			$result = mysql_query("INSERT INTO ".TABLE."_permission (name, value, type, parameter) VALUES ('$name', '$value', '$type', '$parameter')");
		} else {
			$result = mysql_query("INSERT INTO ".TABLE."_permission (name, value, type) VALUES ('$name', '$value', '$type')");
		}
		return $result;
	}
	
	/**
	* Check ob Option gesetzt ist. Optinen Liste muss vorher abgerufen 
	* worden sein
	*
	* @access       public	
	* @param        string $name Schlüsselname der Option
	* @param        string $parameter Parameter der Option
	* @return       boolean $result
	*/
	function checkPermission($name, $parameter = "") {
		$type = $this->type;
		$result = false;
		if($parameter == "") {
			if($this->getPermissionSet($name) !== false) {
				$result = true;
			}
		} else {
			if($this->getPermissionSet($name, $parameter) !== false) {
				$result = true;
			}
		}
		return $result;
	}
}

?>
Return current item: Content*Builder