Ejemplo n.º 1
0
		/**
		   * Check, whether an accessor is allowed to perform a special operation on the Object.
		   * @param integer GUID of the user or group
		   * @param string Title of the action to check for.
		   */
		function checkAccessToFunction2($guid, $action) {
			global $db, $auth;		
			if ($auth->user == "Administrator") 
			  return true;

			$action = strtoupper($action);
			$result = false;
			$accessor = new Accessor($guid);
			
			// determine accessors the user is in.
			$accessorGroups = $accessor->isInGroups();			
			$accessorGroupsStr = implode(',', $accessorGroups);
						
			// check for owner
			if (in_array($this->owner, $accessorGroups)) {				
				if ($accessor->canDoInGroup($action, $this->owner))				
					return true;
			}
				
			// determine roles, the function is in.			
			$actionRoles = createDBCArray("role_sys_functions", "ROLE_ID", "UPPER(FUNCTION_ID) = '$action'");
			if (! is_array($actionRoles)) {
			  $actionRoles = array();
			 }
			array_push($actionRoles, 1); // Administrator Role
			$actionRolesStr = implode(",", $actionRoles);	
			
			$resourceGroups = array();
			for ($i=0; $i < count($this->accessors); $i++) {
			  if (in_array($this->accessors[$i]["ROLE"], $actionRoles)) {
			    array_push($resourceGroups, $this->accessors[$i]["ACCESSOR"]);	
			  }	
			}
			
								
			$bothGroups = array();
			if (is_array($resourceGroups)) 
			  $bothGroups = array_intersect($resourceGroups, $accessorGroups);
			  if (is_array($bothGroups)) {
			  foreach ($bothGroups as $group) {				
				$sql = "SELECT up.USER_ID FROM user_permissions up, acl_relations r WHERE up.USER_ID = $guid AND up.GROUP_ID = ".$group." AND up.ROLE_ID IN ($actionRolesStr) AND r.ROLE_ID IN ($actionRolesStr) AND r.ACCESSOR_GUID IN ($accessorGroupsStr) AND r.GUID= ".$this->effectiveACLGuid;			
				$query = new query($db, $sql);				
				if ($query->getrow()) {
				  return true;				   
				 } else {				   
				}
				$query->free();
			  }
			}			
			/**
			
			// check for foreign relations....
			if ($accessorGroupsStr != "") {		
				$accessorRolesOnResource = createDBCArray("acl_relations", "ROLE_ID", "GUID = $this->guid AND ACCESSOR_GUID IN ($accessorGroupsStr)");				
				if (in_array(1, $accessorRolesOnResource))  // Admin Rechte
				  $result = true;
				if (is_array($accessorRolesOnResource)) {
					$accessorRolesOnResourceStr = implode(',', $accessorRolesOnResource);										
					$accessorFunctionsOnResource = createDBCArray("role_sys_functions", "FUNCTION_ID", "ROLE_ID IN ($accessorRolesOnResourceStr)");															
					if (is_array($accessorFunctionsOnResource)) {
						if (in_array(strtoupper($action), $accessorFunctionsOnResource)) 
					  		$result = true;				
					}
				}
			}*/
			return false;
		}