Browse Source

Finalized the module "user rights by profile". It is fully integrated with the application setup (inc. sample data). and it it now ready for developing the user management GUI

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@93 a333f486-631f-4898-b8df-5754b55c2be0
romainq 16 years ago
parent
commit
99d191ac46

+ 147 - 64
addons/userrights/userrightsprofile.class.inc.php

@@ -14,6 +14,11 @@
  */
  */
 
 
 
 
+// It is supposed that this profile does exist in the DB
+// Possible improvement: add it when executing the setup procedure
+//
+define('ADMIN_PROFILE_ID', 1);
+
 class URP_Users extends DBObject
 class URP_Users extends DBObject
 {
 {
 	public static function Init()
 	public static function Init()
@@ -106,7 +111,7 @@ class URP_Dimensions extends DBObject
 		MetaModel::Init_AddFilterFromAttribute("type");
 		MetaModel::Init_AddFilterFromAttribute("type");
 	}
 	}
 
 
-	public function CheckProjectionSpec($oProjectionSpec)
+	public function CheckProjectionSpec($oProjectionSpec, $sProjectedClass)
 	{
 	{
 		$sExpression = $oProjectionSpec->Get('value');
 		$sExpression = $oProjectionSpec->Get('value');
 		$sAttribute = $oProjectionSpec->Get('attribute');
 		$sAttribute = $oProjectionSpec->Get('attribute');
@@ -129,30 +134,46 @@ class URP_Dimensions extends DBObject
 
 
 		// 2nd - compute the data type for the projection
 		// 2nd - compute the data type for the projection
 		//
 		//
-		$bIsOql = true;
-		$sExpressionClass = '';
-		try
+		$sTargetClass = '';
+		if (($sExpression == '<this>') || ($sExpression == '<user>'))
 		{
 		{
-			$oObjectSearch = DBObjectSearch::FromOQL($sExpression);
-			$sExpressionClass = $oObjectSearch->GetClass();
+			$sTargetClass = $sProjectedClass;
 		}
 		}
-		catch (OqlException $e)
+		elseif ($sExpression == '<any>')
 		{
 		{
-			$bIsOql = false;
+			$sTargetClass = '';
+		}
+		else
+		{
+			// Evaluate wether it is a constant or not
+			try
+			{
+				$oObjectSearch = DBObjectSearch::FromOQL($sExpression);
+
+				$sTargetClass = $oObjectSearch->GetClass();
+			}
+			catch (OqlException $e)
+			{
+			}
 		}
 		}
-		if ($bIsOql)
+
+		if (empty($sTargetClass))
+		{
+			$sFoundType = '_void_';
+		}
+		else
 		{
 		{
 			if (empty($sAttribute))
 			if (empty($sAttribute))
 			{
 			{
-				$sFoundType = $sExpressionClass;
+				$sFoundType = $sTargetClass;
 			}
 			}
 			else
 			else
 			{
 			{
-				if (!MetaModel::IsValidAttCode($sExpressionClass, $sAttribute))
+				if (!MetaModel::IsValidAttCode($sTargetClass, $sAttribute))
 				{
 				{
-					throw new CoreException('Unkown attribute code in projection specification', array('found' => $sAttribute, 'expecting' => MetaModel::GetAttributesList($sExpressionClass), 'class' => $sExpressionClass, 'projection' => $oProjectionSpec));
+					throw new CoreException('Unkown attribute code in projection specification', array('found' => $sAttribute, 'expecting' => MetaModel::GetAttributesList($sTargetClass), 'class' => $sTargetClass, 'projection' => $oProjectionSpec));
 				}
 				}
-				$oAttDef = MetaModel::GetAttributeDef($sExpressionClass, $sAttribute);
+				$oAttDef = MetaModel::GetAttributeDef($sTargetClass, $sAttribute);
 				if ($oAttDef->IsExternalKey())
 				if ($oAttDef->IsExternalKey())
 				{
 				{
 					$sFoundType = $oAttDef->GetTargetClass();
 					$sFoundType = $oAttDef->GetTargetClass();
@@ -163,13 +184,9 @@ class URP_Dimensions extends DBObject
 				}
 				}
 			}
 			}
 		}
 		}
-		else
-		{
-			$sFoundType = '_scalar_';
-		}
 
 
 		// Compare the dimension type and projection type
 		// Compare the dimension type and projection type
-		if ($sFoundType != $sExpectedType)
+		if (($sFoundType != '_void_') && ($sFoundType != $sExpectedType))
 		{
 		{
 			throw new CoreException('Wrong type in projection specification', array('found' => $sFoundType, 'expecting' => $sExpectedType, 'expression' => $sExpression, 'attribute' => $sAttribute, 'projection' => $oProjectionSpec));
 			throw new CoreException('Wrong type in projection specification', array('found' => $sFoundType, 'expecting' => $sExpectedType, 'expression' => $sExpression, 'attribute' => $sAttribute, 'projection' => $oProjectionSpec));
 		}
 		}
@@ -234,7 +251,7 @@ class URP_ProfileProjection extends DBObject
 		MetaModel::Init_AddAttribute(new AttributeExternalKey("profileid", array("targetclass"=>"URP_Profiles", "jointype"=> "", "label"=>"profile", "description"=>"usage profile", "allowed_values"=>null, "sql"=>"profileid", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeExternalKey("profileid", array("targetclass"=>"URP_Profiles", "jointype"=> "", "label"=>"profile", "description"=>"usage profile", "allowed_values"=>null, "sql"=>"profileid", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeExternalField("profile", array("label"=>"Profile", "description"=>"Profile name", "allowed_values"=>null, "extkey_attcode"=> 'profileid', "target_attcode"=>"name")));
 		MetaModel::Init_AddAttribute(new AttributeExternalField("profile", array("label"=>"Profile", "description"=>"Profile name", "allowed_values"=>null, "extkey_attcode"=> 'profileid', "target_attcode"=>"name")));
 
 
-		MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$user) | constant | <any>", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$user) | constant | <any> | <user>+attribute code", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("attribute", array("label"=>"Attribute", "description"=>"Target attribute code (optional)", "allowed_values"=>null, "sql"=>"attribute", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("attribute", array("label"=>"Attribute", "description"=>"Target attribute code (optional)", "allowed_values"=>null, "sql"=>"attribute", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 
 
 		//MetaModel::Init_InheritFilters();
 		//MetaModel::Init_InheritFilters();
@@ -245,18 +262,31 @@ class URP_ProfileProjection extends DBObject
 	public function ProjectUser(URP_Users $oUser)
 	public function ProjectUser(URP_Users $oUser)
 	{
 	{
 		$sExpr = $this->Get('value');
 		$sExpr = $this->Get('value');
-		if (strtolower(substr($sExpr, 0, 6)) == 'select')
-		{ 
+		if ($sExpr == '<user>')
+		{
 			$sColumn = $this->Get('attribute');
 			$sColumn = $this->Get('attribute');
-			// SELECT...
-			$oValueSetDef = new ValueSetObjects($sExpr, $sColumn);
-			$aValues = $oValueSetDef->GetValues(array('user' => $oUser), '');
-			$aRes = array_values($aValues);
+			if (empty($sColumn))
+			{
+				$aRes = array($oUser->GetKey());
+			}
+			else
+			{
+				$aRes = array($oUser->Get($sColumn));
+			}
+			
 		}
 		}
 		elseif ($sExpr == '<any>')
 		elseif ($sExpr == '<any>')
 		{
 		{
 			$aRes = null;
 			$aRes = null;
 		}
 		}
+		elseif (strtolower(substr($sExpr, 0, 6)) == 'select')
+		{ 
+			$sColumn = $this->Get('attribute');
+			// SELECT...
+			$oValueSetDef = new ValueSetObjects($sExpr, $sColumn);
+			$aValues = $oValueSetDef->GetValues(array('user' => $oUser), '');
+			$aRes = array_keys($aValues);
+		}
 		else
 		else
 		{
 		{
 			// Constant value(s)
 			// Constant value(s)
@@ -291,24 +321,42 @@ class URP_ClassProjection extends DBObject
 
 
 		MetaModel::Init_AddAttribute(new AttributeString("class", array("label"=>"Class", "description"=>"Target class", "allowed_values"=>null, "sql"=>"class", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("class", array("label"=>"Class", "description"=>"Target class", "allowed_values"=>null, "sql"=>"class", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 
 
-		MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$this) | constant | <any>", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("value", array("label"=>"Value expression", "description"=>"OQL expression (using \$this) | constant | <any> | <this>+attribute code", "allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("attribute", array("label"=>"Attribute", "description"=>"Target attribute code (optional)", "allowed_values"=>null, "sql"=>"attribute", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("attribute", array("label"=>"Attribute", "description"=>"Target attribute code (optional)", "allowed_values"=>null, "sql"=>"attribute", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
 
 
 		//MetaModel::Init_InheritFilters();
 		//MetaModel::Init_InheritFilters();
 		MetaModel::Init_AddFilterFromAttribute("dimensionid");
 		MetaModel::Init_AddFilterFromAttribute("dimensionid");
+		// #@# verifier
 		MetaModel::Init_AddFilterFromAttribute("class");
 		MetaModel::Init_AddFilterFromAttribute("class");
 	}
 	}
 
 
 	public function ProjectObject($oObject)
 	public function ProjectObject($oObject)
 	{
 	{
 		$sExpr = $this->Get('value');
 		$sExpr = $this->Get('value');
-		if (strtolower(substr($sExpr, 0, 6)) == 'select')
+		if ($sExpr == '<this>')
+		{
+			$sColumn = $this->Get('attribute');
+			if (empty($sColumn))
+			{
+				$aRes = array($oObject->GetKey());
+			}
+			else
+			{
+				$aRes = array($oObject->Get($sColumn));
+			}
+			
+		}
+		elseif ($sExpr == '<any>')
+		{
+			$aRes = null;
+		}
+		elseif (strtolower(substr($sExpr, 0, 6)) == 'select')
 		{ 
 		{ 
 			$sColumn = $this->Get('attribute');
 			$sColumn = $this->Get('attribute');
 			// SELECT...
 			// SELECT...
 			$oValueSetDef = new ValueSetObjects($sExpr, $sColumn);
 			$oValueSetDef = new ValueSetObjects($sExpr, $sColumn);
-			$aValues = $oValueSetDef->GetValues(array('user' => $oObject), '');
-			$aRes = array_values($aValues);
+			$aValues = $oValueSetDef->GetValues(array('this' => $oObject), '');
+			$aRes = array_keys($aValues);
 		}
 		}
 		elseif ($sExpr == '<any>')
 		elseif ($sExpr == '<any>')
 		{
 		{
@@ -357,6 +405,7 @@ class URP_ActionGrant extends DBObject
 		MetaModel::Init_AddFilterFromAttribute("profileid");
 		MetaModel::Init_AddFilterFromAttribute("profileid");
 		MetaModel::Init_AddFilterFromAttribute("profile");
 		MetaModel::Init_AddFilterFromAttribute("profile");
 		MetaModel::Init_AddFilterFromAttribute("class");
 		MetaModel::Init_AddFilterFromAttribute("class");
+		MetaModel::Init_AddFilterFromAttribute("permission");
 
 
 		MetaModel::Init_AddFilterFromAttribute("action");
 		MetaModel::Init_AddFilterFromAttribute("action");
 	}
 	}
@@ -396,6 +445,7 @@ class URP_StimulusGrant extends DBObject
 		MetaModel::Init_AddFilterFromAttribute("profileid");
 		MetaModel::Init_AddFilterFromAttribute("profileid");
 		MetaModel::Init_AddFilterFromAttribute("profile");
 		MetaModel::Init_AddFilterFromAttribute("profile");
 		MetaModel::Init_AddFilterFromAttribute("class");
 		MetaModel::Init_AddFilterFromAttribute("class");
+		MetaModel::Init_AddFilterFromAttribute("permission");
 
 
 		MetaModel::Init_AddFilterFromAttribute("stimulus");
 		MetaModel::Init_AddFilterFromAttribute("stimulus");
 	}
 	}
@@ -446,19 +496,22 @@ class UserRightsProfile extends UserRightsAddOnAPI
 	);
 	);
 
 
 	// Installation: create the very first user
 	// Installation: create the very first user
-	public function CreateAdministrator($sAdminUser, $sAdminPwd, $sAdminEmail, $sFirstName, $sLastName, $sPhoneNumber)
+	public function CreateAdministrator($sAdminUser, $sAdminPwd)
 	{
 	{
-		// Maybe we should check that no other user with userid == 0 exists
 		$oUser = new URP_Users();
 		$oUser = new URP_Users();
 		$oUser->Set('login', $sAdminUser);
 		$oUser->Set('login', $sAdminUser);
 		$oUser->Set('password', $sAdminPwd);
 		$oUser->Set('password', $sAdminPwd);
-		$oUser->Set('email', $sAdminEmail);
-		$oUser->Set('firstname', $sFirstName);
-		$oUser->Set('lastname', $sLastName);
-		$oUser->Set('phonenumber', $sPhoneNumber);
-		$oUser->Set('userid', 1); // one is for root !
+		$oUser->Set('email', 'n/a');
+		$oUser->Set('firstname', 'administrator');
+		$oUser->Set('lastname', 'itop');
+		$oUser->Set('userid', 1); // let's mark it as #1 (for what purpose?)
 		$iUserId = $oUser->DBInsertNoReload();
 		$iUserId = $oUser->DBInsertNoReload();
-		$this->SetupUser($iUserId, true);
+		
+		// Add this user to the very specific 'admin' profile
+		$oUserProfile = new URP_UserProfile();
+		$oUserProfile->Set('userid', $iUserId);
+		$oUserProfile->Set('profileid', ADMIN_PROFILE_ID);
+		$oUserProfile->DBInsertNoReload();
 		return true;
 		return true;
 	}
 	}
 
 
@@ -543,9 +596,9 @@ class UserRightsProfile extends UserRightsAddOnAPI
 	{
 	{
 		$iProfileId = $oProfile->GetKey();
 		$iProfileId = $oProfile->GetKey();
 
 
-		// Create grant records, for any class where it applies
+		// Create grant records, for any class where it matters (the rest could be done later on)
 		//
 		//
-		foreach(array('bizmodel', 'application', 'gui', 'core/cmdb') as $sCategory)
+		foreach(array('bizmodel') as $sCategory)
 		{
 		{
 			foreach (MetaModel::GetClasses($sCategory) as $sClass)
 			foreach (MetaModel::GetClasses($sCategory) as $sClass)
 			{
 			{
@@ -633,6 +686,8 @@ class UserRightsProfile extends UserRightsAddOnAPI
 	protected $m_aUserProfiles = array(); // userid,profileid -> object
 	protected $m_aUserProfiles = array(); // userid,profileid -> object
 	protected $m_aProPro = array(); // profileid,dimensionid -> object
 	protected $m_aProPro = array(); // profileid,dimensionid -> object
 
 
+	protected $m_aAdmins = array(); // id of users being linked to the profile #ADMIN_PROFILE_ID
+
 	protected $m_aClassActionGrants = array(); // profile, class, action -> permission
 	protected $m_aClassActionGrants = array(); // profile, class, action -> permission
 	protected $m_aObjectActionGrants = array(); // userid, class, id, action -> permission, list of attributes
 	protected $m_aObjectActionGrants = array(); // userid, class, id, action -> permission, list of attributes
 
 
@@ -667,7 +722,11 @@ class UserRightsProfile extends UserRightsAddOnAPI
 		$oUserProfileSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_UserProfile"));
 		$oUserProfileSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_UserProfile"));
 		while ($oUserProfile = $oUserProfileSet->Fetch())
 		while ($oUserProfile = $oUserProfileSet->Fetch())
 		{
 		{
-			$this->m_aUserProfiles[$oUserProfile->Get('userid')][$oUserProfile->Get('profileid')] = $oUserProfile; 
+			$this->m_aUserProfiles[$oUserProfile->Get('userid')][$oUserProfile->Get('profileid')] = $oUserProfile;
+			if ($oUserProfile->Get('profileid') == ADMIN_PROFILE_ID)
+			{
+				$this->m_aAdmins[] = $oUserProfile->Get('userid');
+			}
 		}
 		}
 
 
 		$oProProSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_ProfileProjection"));
 		$oProProSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT URP_ProfileProjection"));
@@ -734,7 +793,7 @@ exit;
 		if (isset($aTest)) return $aTest;
 		if (isset($aTest)) return $aTest;
 
 
 		// Get the permission for this profile/class/action
 		// Get the permission for this profile/class/action
-		$oSearch = DBObjectSearch::FromOQL("SELECT URP_ActionGrant WHERE class = :class AND action = :action AND profileid = :profile");
+		$oSearch = DBObjectSearch::FromOQL("SELECT URP_ActionGrant WHERE class = :class AND action = :action AND profileid = :profile AND permission = 'yes'");
 		$oSet = new DBObjectSet($oSearch, array(), array('class'=>$sClass, 'action'=>$sAction, 'profile'=>$iProfile));
 		$oSet = new DBObjectSet($oSearch, array(), array('class'=>$sClass, 'action'=>$sAction, 'profile'=>$iProfile));
 		if ($oSet->Count() < 1)
 		if ($oSet->Count() < 1)
 		{
 		{
@@ -764,14 +823,24 @@ exit;
 			{
 			{
 				continue; // loop to the next profile
 				continue; // loop to the next profile
 			}
 			}
-			elseif ($oGrantRecord->Get('permission') == 'yes')
+			else
 			{
 			{
 				$iInstancePermission = UR_ALLOWED_YES;
 				$iInstancePermission = UR_ALLOWED_YES;
 
 
-				// merge the list of attributes allowed for this profile
+				// update the list of attributes with those allowed for this profile
+				//
 				$oSearch = DBObjectSearch::FromOQL("SELECT URP_AttributeGrant WHERE actiongrantid = :actiongrantid");
 				$oSearch = DBObjectSearch::FromOQL("SELECT URP_AttributeGrant WHERE actiongrantid = :actiongrantid");
 				$oSet = new DBObjectSet($oSearch, array(), array('actiongrantid' => $oGrantRecord->GetKey()));
 				$oSet = new DBObjectSet($oSearch, array(), array('actiongrantid' => $oGrantRecord->GetKey()));
-				$aAttributes = array_merge($aAttributes, $oSet->GetColumnAsArray('attcode', false));
+				$aProfileAttributes = $oSet->GetColumnAsArray('attcode', false);
+				if (count($aProfileAttributes) == 0)
+				{
+					$aAllAttributes = array_keys(MetaModel::ListAttributeDefs($sClass));
+					$aAttributes = array_merge($aAttributes, $aAllAttributes);
+				}
+				else
+				{
+					$aAttributes = array_merge($aAttributes, $aProfileAttributes);
+				}
 			}
 			}
 		}
 		}
 
 
@@ -785,6 +854,9 @@ exit;
 	
 	
 	public function IsActionAllowed($iUserId, $sClass, $iActionCode, dbObjectSet $oInstances)
 	public function IsActionAllowed($iUserId, $sClass, $iActionCode, dbObjectSet $oInstances)
 	{
 	{
+		// super admin rights
+		if (in_array($iUserId, $this->m_aAdmins)) return true;
+
 		$oUser = $this->m_aUsers[$iUserId];
 		$oUser = $this->m_aUsers[$iUserId];
 
 
 		$oInstances->Rewind();
 		$oInstances->Rewind();
@@ -798,6 +870,7 @@ exit;
 				if ($iInstancePermission != $iGlobalPermission)
 				if ($iInstancePermission != $iGlobalPermission)
 				{
 				{
 					$iGlobalPermission = UR_ALLOWED_DEPENDS;
 					$iGlobalPermission = UR_ALLOWED_DEPENDS;
+					break;
 				}
 				}
 			}
 			}
 			else
 			else
@@ -805,6 +878,8 @@ exit;
 				$iGlobalPermission = $iInstancePermission;
 				$iGlobalPermission = $iInstancePermission;
 			}
 			}
 		}
 		}
+		$oInstances->Rewind();
+
 		if (isset($iGlobalPermission))
 		if (isset($iGlobalPermission))
 		{
 		{
 			return $iGlobalPermission;
 			return $iGlobalPermission;
@@ -817,6 +892,9 @@ exit;
 
 
 	public function IsActionAllowedOnAttribute($iUserId, $sClass, $sAttCode, $iActionCode, dbObjectSet $oInstances)
 	public function IsActionAllowedOnAttribute($iUserId, $sClass, $sAttCode, $iActionCode, dbObjectSet $oInstances)
 	{
 	{
+		// super admin rights
+		if (in_array($iUserId, $this->m_aAdmins)) return true;
+
 		$oUser = $this->m_aUsers[$iUserId];
 		$oUser = $this->m_aUsers[$iUserId];
 
 
 		$oInstances->Rewind();
 		$oInstances->Rewind();
@@ -846,6 +924,8 @@ exit;
 				$iGlobalPermission = $iInstancePermission;
 				$iGlobalPermission = $iInstancePermission;
 			}
 			}
 		}
 		}
+		$oInstances->Rewind();
+
 		if (isset($iGlobalPermission))
 		if (isset($iGlobalPermission))
 		{
 		{
 			return $iGlobalPermission;
 			return $iGlobalPermission;
@@ -858,6 +938,9 @@ exit;
 
 
 	public function IsStimulusAllowed($iUserId, $sClass, $sStimulusCode, dbObjectSet $oInstances)
 	public function IsStimulusAllowed($iUserId, $sClass, $sStimulusCode, dbObjectSet $oInstances)
 	{
 	{
+		// super admin rights
+		if (in_array($iUserId, $this->m_aAdmins)) return true;
+
 		$oUser = $this->m_aUsers[$iUserId];
 		$oUser = $this->m_aUsers[$iUserId];
 
 
 		// Note: this code is VERY close to the code of IsActionAllowed()
 		// Note: this code is VERY close to the code of IsActionAllowed()
@@ -869,19 +952,14 @@ exit;
 			foreach($this->GetMatchingProfiles($oUser, $oObject) as $iProfile)
 			foreach($this->GetMatchingProfiles($oUser, $oObject) as $iProfile)
 			{
 			{
 				// Get the permission for this profile/class/stimulus
 				// Get the permission for this profile/class/stimulus
-				$oSearch = DBObjectSearch::FromOQL("SELECT URP_StimulusGrant WHERE class = :class AND stimulus = :stimulus AND profileid = :profile");
+				$oSearch = DBObjectSearch::FromOQL("SELECT URP_StimulusGrant WHERE class = :class AND stimulus = :stimulus AND profileid = :profile AND permission = 'yes'");
 				$oSet = new DBObjectSet($oSearch, array(), array('class'=>$sClass, 'stimulus'=>$sStimulusCode, 'profile'=>$iProfile));
 				$oSet = new DBObjectSet($oSearch, array(), array('class'=>$sClass, 'stimulus'=>$sStimulusCode, 'profile'=>$iProfile));
 				if ($oSet->Count() < 1)
 				if ($oSet->Count() < 1)
 				{
 				{
 					return UR_ALLOWED_NO;
 					return UR_ALLOWED_NO;
 				}
 				}
-		
-				$oGrantRecord = $oSet->Fetch();
-				$sPermission = $oGrantRecord->Get('permission');
-				if ($sPermission == 'yes')
-				{
-					$iInstancePermission = UR_ALLOWED_YES;
-				}
+				// no need to fetch the record, we've requested the records having permission = 'yes'
+				$iInstancePermission = UR_ALLOWED_YES;
 			}
 			}
 			if (isset($iGlobalPermission))
 			if (isset($iGlobalPermission))
 			{
 			{
@@ -895,6 +973,8 @@ exit;
 				$iGlobalPermission = $iInstancePermission;
 				$iGlobalPermission = $iInstancePermission;
 			}
 			}
 		}
 		}
+		$oInstances->Rewind();
+
 		if (isset($iGlobalPermission))
 		if (isset($iGlobalPermission))
 		{
 		{
 			return $iGlobalPermission;
 			return $iGlobalPermission;
@@ -918,28 +998,31 @@ exit;
 		$aObjectProjection = $this->m_aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 		$aObjectProjection = $this->m_aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 
 
 		$aRes = array();
 		$aRes = array();
-		foreach ($this->m_aUserProfiles[$iUser] as $iProfile => $oProfile)
+		if (array_key_exists($iUser, $this->m_aUserProfiles) > 0)
 		{
 		{
-			if (is_null($aObjectProjection))
+			foreach ($this->m_aUserProfiles[$iUser] as $iProfile => $oProfile)
 			{
 			{
-				$aRes[] = $iProfile;
-			}
-			else
-			{
-				// user projection to be cached on a given page !
-				$aUserProjection = $this->m_aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
-				
-				if (is_null($aUserProjection))
+				if (is_null($aObjectProjection))
 				{
 				{
 					$aRes[] = $iProfile;
 					$aRes[] = $iProfile;
 				}
 				}
 				else
 				else
 				{
 				{
-					$aMatchingValues = array_intersect($aObjectProjection, $aUserProjection);
-					if (count($aMatchingValues) > 0)
+					// user projection to be cached on a given page !
+					$aUserProjection = $this->m_aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
+					
+					if (is_null($aUserProjection))
 					{
 					{
 						$aRes[] = $iProfile;
 						$aRes[] = $iProfile;
 					}
 					}
+					else
+					{
+						$aMatchingValues = array_intersect($aObjectProjection, $aUserProjection);
+						if (count($aMatchingValues) > 0)
+						{
+							$aRes[] = $iProfile;
+						}
+					}
 				}
 				}
 			}
 			}
 		}
 		}

+ 8 - 7
business/itop.business.class.inc.php

@@ -249,7 +249,7 @@ class bizPerson extends bizContact
 			"name_attcode" => "name",
 			"name_attcode" => "name",
 			"state_attcode" => "",
 			"state_attcode" => "",
 			"reconc_keys" => array("org_name", "first_name", "name"),  // comment en définir plusieurs
 			"reconc_keys" => array("org_name", "first_name", "name"),  // comment en définir plusieurs
-			// "reconc_keys" => array("org_name", "employe_number"), 
+			// "reconc_keys" => array("org_name", "employee_number"), 
 			"db_table" => "persons",   // Can it use the same physical DB table as any contact ?
 			"db_table" => "persons",   // Can it use the same physical DB table as any contact ?
 			"db_key_field" => "id",
 			"db_key_field" => "id",
 			"db_finalclass_field" => "",
 			"db_finalclass_field" => "",
@@ -258,20 +258,21 @@ class bizPerson extends bizContact
 		MetaModel::Init_Params($aParams);
 		MetaModel::Init_Params($aParams);
 		MetaModel::Init_InheritAttributes();
 		MetaModel::Init_InheritAttributes();
 		MetaModel::Init_AddAttribute(new AttributeString("first_name", array("label"=>"first Name", "description"=>"First name", "allowed_values"=>null, "sql"=>"first_name", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("first_name", array("label"=>"first Name", "description"=>"First name", "allowed_values"=>null, "sql"=>"first_name", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
-		MetaModel::Init_AddAttribute(new AttributeString("employe_number", array("label"=>"Employe Number", "description"=>"employe number", "allowed_values"=>null, "sql"=>"employe_number", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("employee_number", array("label"=>"Employee Number", "description"=>"employee number", "allowed_values"=>null, "sql"=>"employee_number", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
 
 
-//		MetaModel::Init_AddAttribute(new AttributeExternalKey("login_id", array("targetclass"=>"URP_Users", "label"=>"Login", "description"=>"Login information", "allowed_values"=>null, "sql"=>"login_id", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalKey("login_id", array("targetclass"=>"URP_Users", "label"=>"Login", "description"=>"Login information", "allowed_values"=>null, "sql"=>"login_id", "is_null_allowed"=>true, "depends_on"=>array())));
 
 
 		MetaModel::Init_InheritFilters();
 		MetaModel::Init_InheritFilters();
 		MetaModel::Init_AddFilterFromAttribute("first_name");
 		MetaModel::Init_AddFilterFromAttribute("first_name");
-		MetaModel::Init_AddFilterFromAttribute("employe_number");
+		MetaModel::Init_AddFilterFromAttribute("employee_number");
+		MetaModel::Init_AddFilterFromAttribute("login_id");
 		
 		
 		// Display lists
 		// Display lists
-		MetaModel::Init_SetZListItems('details', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone', 'employe_number')); // Attributes to be displayed for the complete details
+		MetaModel::Init_SetZListItems('details', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone', 'employee_number', 'login_id')); // Attributes to be displayed for the complete details
 		MetaModel::Init_SetZListItems('list', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone')); // Attributes to be displayed for a list
 		MetaModel::Init_SetZListItems('list', array('first_name', 'name', 'status', 'org_id', 'email', 'location_id', 'phone')); // Attributes to be displayed for a list
 		// Search criteria
 		// Search criteria
-		MetaModel::Init_SetZListItems('standard_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employe_number')); // Criteria of the std search form
-		MetaModel::Init_SetZListItems('advanced_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employe_number')); // Criteria of the advanced search form
+		MetaModel::Init_SetZListItems('standard_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employee_number', 'login_id')); // Criteria of the std search form
+		MetaModel::Init_SetZListItems('advanced_search', array('first_name', 'name', 'status', 'email', 'location_id', 'phone', 'employee_number', 'login_id')); // Criteria of the advanced search form
 	}
 	}
 
 
 	public function Generate(cmdbDataGenerator $oGenerator)
 	public function Generate(cmdbDataGenerator $oGenerator)

+ 7 - 2
core/cmdbchangeop.class.inc.php

@@ -194,8 +194,13 @@ class CMDBChangeOpSetAttribute extends CMDBChangeOp
 	public function GetDescription()
 	public function GetDescription()
 	{
 	{
 		$sResult = '';
 		$sResult = '';
-		$oEmptySet = new DBObjectSet($this->Get('objclass'));
-		if (UserRights::IsActionAllowedOnAttribute($this->Get('objclass'), $this->Get('attcode'), UR_ACTION_READ, $oEmptySet) == UR_ALLOWED_YES)
+		$oTargetObjectClass = $this->Get('objclass');
+		$oTargetObjectKey = $this->Get('objkey');
+		$oTargetSearch = new DBObjectSearch($oTargetObjectClass);
+		$oTargetSearch->AddCondition('id', $oTargetObjectKey);
+
+		$oMonoObjectSet = new DBObjectSet($oTargetSearch);
+		if (UserRights::IsActionAllowedOnAttribute($this->Get('objclass'), $this->Get('attcode'), UR_ACTION_READ, $oMonoObjectSet) == UR_ALLOWED_YES)
 		{
 		{
 			$oAttDef = MetaModel::GetAttributeDef($this->Get('objclass'), $this->Get('attcode'));
 			$oAttDef = MetaModel::GetAttributeDef($this->Get('objclass'), $this->Get('attcode'));
 			$sAttName = $oAttDef->GetLabel();
 			$sAttName = $oAttDef->GetLabel();

+ 1 - 1
core/dbobjectset.class.php

@@ -21,7 +21,7 @@ class DBObjectSet
 	private $m_aId2Row;
 	private $m_aId2Row;
 	private $m_iCurrRow;
 	private $m_iCurrRow;
 
 
-	public function __construct($oFilter, $aOrderBy = array(), $aArgs = array())
+	public function __construct(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array())
 	{
 	{
 		$this->m_oFilter = $oFilter;
 		$this->m_oFilter = $oFilter;
 		$this->m_aOrderBy = $aOrderBy;
 		$this->m_aOrderBy = $aOrderBy;

+ 36 - 28
core/metamodel.class.php

@@ -1173,6 +1173,32 @@ abstract class MetaModel
 
 
 	protected static $m_aQueryStructCache = array();
 	protected static $m_aQueryStructCache = array();
 
 
+	protected static function PrepareQueryArguments($aArgs)
+	{
+		// Translate any object into scalars
+		//
+		$aScalarArgs = array();
+		foreach($aArgs as $sArgName => $value)
+		{
+			if (self::IsValidObject($value))
+			{
+				$aScalarArgs[$sArgName] = $value->GetKey();
+				$aScalarArgs[$sArgName.'->id'] = $value->GetKey();
+			
+				$sClass = get_class($value);
+				foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
+				{
+					$aScalarArgs[$sArgName.'->'.$sAttCode] = $value->Get($sAttCode);
+				}
+			}
+			else
+			{
+				$aScalarArgs[$sArgName] = (string) $value;
+			}
+		}
+		return $aScalarArgs;
+	}
+
 	public static function MakeSelectQuery(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array())
 	public static function MakeSelectQuery(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array())
 	{
 	{
 		// Query caching
 		// Query caching
@@ -1219,30 +1245,9 @@ abstract class MetaModel
 			}
 			}
 		}
 		}
 		
 		
-		// Prepare arguments (translate any object into scalars)
-		//
-		$aScalarArgs = $oFilter->GetInternalParams();
-		foreach($aArgs as $sArgName => $value)
-		{
-			if (self::IsValidObject($value))
-			{
-				$aScalarArgs[$sArgName] = $value->GetKey();
-				$aScalarArgs[$sArgName.'->id'] = $value->GetKey();
-			
-				$sClass = get_class($value);
-				foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
-				{
-					$aScalarArgs[$sArgName.'->'.$sAttCode] = $value->Get($sAttCode);
-				}
-			}
-			else
-			{
-				$aScalarArgs[$sArgName] = (string) $value;
-			}
-		}
-
 		// Go
 		// Go
 		//
 		//
+		$aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
 		$sRes = $oSelect->RenderSelect($aOrderBy, $aScalarArgs);
 		$sRes = $oSelect->RenderSelect($aOrderBy, $aScalarArgs);
 
 
 		if (self::$m_bTraceQueries)
 		if (self::$m_bTraceQueries)
@@ -1277,17 +1282,18 @@ abstract class MetaModel
 		echo "<p>Count of built queries: ".count(self::$m_aQueriesLog)."</p>";
 		echo "<p>Count of built queries: ".count(self::$m_aQueriesLog)."</p>";
 	}
 	}
 
 
-	public static function MakeDeleteQuery(DBObjectSearch $oFilter)
+	public static function MakeDeleteQuery(DBObjectSearch $oFilter, $aArgs = array())
 	{
 	{
 		$aTranslation = array();
 		$aTranslation = array();
 		$aClassAliases = array();
 		$aClassAliases = array();
 		$aTableAliases = array();
 		$aTableAliases = array();
 		$oConditionTree = $oFilter->GetCriteria();
 		$oConditionTree = $oFilter->GetCriteria();
 		$oSelect = self::MakeQuery($oFilter->GetClassAlias(), $oConditionTree, $aClassAliases, $aTableAliases, $aTranslation, $oFilter);
 		$oSelect = self::MakeQuery($oFilter->GetClassAlias(), $oConditionTree, $aClassAliases, $aTableAliases, $aTranslation, $oFilter);
-		return $oSelect->RenderDelete();
+		$aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
+		return $oSelect->RenderDelete($aScalarArgs);
 	}
 	}
 
 
-	public static function MakeUpdateQuery(DBObjectSearch $oFilter, $aValues)
+	public static function MakeUpdateQuery(DBObjectSearch $oFilter, $aValues, $aArgs = array())
 	{
 	{
 		// $aValues is an array of $sAttCode => $value
 		// $aValues is an array of $sAttCode => $value
 		$aTranslation = array();
 		$aTranslation = array();
@@ -1295,7 +1301,8 @@ abstract class MetaModel
 		$aTableAliases = array();
 		$aTableAliases = array();
 		$oConditionTree = $oFilter->GetCriteria();
 		$oConditionTree = $oFilter->GetCriteria();
 		$oSelect = self::MakeQuery($oFilter->GetClassAlias(), $oConditionTree, $aClassAliases, $aTableAliases, $aTranslation, $oFilter, array(), $aValues);
 		$oSelect = self::MakeQuery($oFilter->GetClassAlias(), $oConditionTree, $aClassAliases, $aTableAliases, $aTranslation, $oFilter, array(), $aValues);
-		return $oSelect->RenderUpdate();
+		$aScalarArgs = array_merge(self::PrepareQueryArguments($aArgs), $oFilter->GetInternalParams());
+		return $oSelect->RenderUpdate($aScalarArgs);
 	}
 	}
 
 
 	private static function MakeQuery($sGlobalTargetAlias, &$oConditionTree, &$aClassAliases, &$aTableAliases, &$aTranslation, DBObjectSearch $oFilter, $aExpectedAtts = array(), $aValues = array())
 	private static function MakeQuery($sGlobalTargetAlias, &$oConditionTree, &$aClassAliases, &$aTableAliases, &$aTranslation, DBObjectSearch $oFilter, $aExpectedAtts = array(), $aValues = array())
@@ -2439,6 +2446,9 @@ abstract class MetaModel
 		if (self::DBExists())
 		if (self::DBExists())
 		{
 		{
 			CMDBSource::SelectDB(self::$m_sDBName);
 			CMDBSource::SelectDB(self::$m_sDBName);
+
+			// Some of the init could not be done earlier (requiring classes to be declared and DB to be accessible)
+			self::InitPlugins();
 		}
 		}
 		else
 		else
 		{
 		{
@@ -2447,8 +2457,6 @@ abstract class MetaModel
 				throw new CoreException('Database not found, check your configuration file', array('config_file'=>$sConfigFile, 'db_name'=>self::$m_sDBName));
 				throw new CoreException('Database not found, check your configuration file', array('config_file'=>$sConfigFile, 'db_name'=>self::$m_sDBName));
 			}
 			}
 		}
 		}
-		// Some of the init could not be done earlier (requiring classes to be declared and DB to be accessible)
-		self::InitPlugins();
 	}
 	}
 
 
 	public static function LoadConfig($sConfigFile)
 	public static function LoadConfig($sConfigFile)

+ 4 - 4
core/sqlquery.class.inc.php

@@ -171,7 +171,7 @@ class SQLQuery
 	}
 	}
 	
 	
 	// Interface, build the SQL query
 	// Interface, build the SQL query
-	public function RenderDelete()
+	public function RenderDelete($aArgs = array())
 	{
 	{
 		// The goal will be to complete the list as we build the Joins
 		// The goal will be to complete the list as we build the Joins
 		$aFrom = array();
 		$aFrom = array();
@@ -193,12 +193,12 @@ class SQLQuery
 			throw new CoreException("Building a request wich will delete every object of a given table -looks suspicious- please use truncate instead...");
 			throw new CoreException("Building a request wich will delete every object of a given table -looks suspicious- please use truncate instead...");
 		}
 		}
 		*/
 		*/
-		$sWhere  = self::ClauseWhere($oCondition);
+		$sWhere  = self::ClauseWhere($oCondition, $aArgs);
 		return "DELETE $sDelete FROM $sFrom WHERE $sWhere";
 		return "DELETE $sDelete FROM $sFrom WHERE $sWhere";
 	}
 	}
 
 
 	// Interface, build the SQL query
 	// Interface, build the SQL query
-	public function RenderUpdate()
+	public function RenderUpdate($aArgs = array())
 	{
 	{
 		// The goal will be to complete the list as we build the Joins
 		// The goal will be to complete the list as we build the Joins
 		$aFrom = array();
 		$aFrom = array();
@@ -210,7 +210,7 @@ class SQLQuery
 
 
 		$sFrom   = self::ClauseFrom($aFrom);
 		$sFrom   = self::ClauseFrom($aFrom);
 		$sValues = self::ClauseValues($aSetValues);
 		$sValues = self::ClauseValues($aSetValues);
-		$sWhere  = self::ClauseWhere($oCondition);
+		$sWhere  = self::ClauseWhere($oCondition, $aArgs);
 		return "UPDATE $sFrom SET $sValues WHERE $sWhere";
 		return "UPDATE $sFrom SET $sValues WHERE $sWhere";
 	}
 	}
 
 

+ 3 - 3
pages/usermanagement_classproj.php

@@ -52,18 +52,18 @@ function ComputeProjections($oPage, $sScope)
 		foreach ($aDimensions as $iDimension => $oDimension)
 		foreach ($aDimensions as $iDimension => $oDimension)
 		{
 		{
 			// #@# to be moved, may be time consuming
 			// #@# to be moved, may be time consuming
-			$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension]);
+			$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension], $sClass);
 
 
 			$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 			$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 			if (is_null($aValues))
 			if (is_null($aValues))
 			{
 			{
-				$sValues = '<any>';
+				$sValues = htmlentities('<any>');
 			}
 			}
 			else
 			else
 			{
 			{
 				$sValues = implode(', ', $aValues);
 				$sValues = implode(', ', $aValues);
 			}
 			}
-			$oObjectProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
+			$oObjectProj['dim'.$oDimension->GetKey()] = $sValues;
 		}
 		}
 	
 	
 		$aDisplayData[] = $oObjectProj;
 		$aDisplayData[] = $oObjectProj;

+ 3 - 3
pages/usermanagement_profileproj.php

@@ -62,18 +62,18 @@ function ComputeProjections($oPage)
 			foreach ($aDimensions as $iDimension => $oDimension)
 			foreach ($aDimensions as $iDimension => $oDimension)
 			{
 			{
 				// #@# to be moved, may be time consuming
 				// #@# to be moved, may be time consuming
-				$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension]);
+				$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension], get_class($oUser));
 	
 	
 				$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
 				$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
 				if (is_null($aValues))
 				if (is_null($aValues))
 				{
 				{
-					$sValues = '<any>';
+					$sValues = htmlentities('<any>');
 				}
 				}
 				else
 				else
 				{
 				{
 					$sValues = implode(', ', $aValues);
 					$sValues = implode(', ', $aValues);
 				}
 				}
-				$aUserProfileProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
+				$aUserProfileProj['dim'.$oDimension->GetKey()] = $sValues;
 			}
 			}
 		
 		
 			$aDisplayData[] = $aUserProfileProj;
 			$aDisplayData[] = $aUserProfileProj;

+ 6 - 6
pages/usermanagement_userstatus.php

@@ -45,18 +45,18 @@ function ComputeObjectProjections($oPage, $oObject)
 	foreach ($aDimensions as $iDimension => $oDimension)
 	foreach ($aDimensions as $iDimension => $oDimension)
 	{
 	{
 		// #@# to be moved, may be time consuming
 		// #@# to be moved, may be time consuming
-		$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension]);
+		$oDimension->CheckProjectionSpec($aClassProjs[$sClass][$iDimension], $sClass);
 
 
 		$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 		$aValues = $aClassProjs[$sClass][$iDimension]->ProjectObject($oObject);
 		if (is_null($aValues))
 		if (is_null($aValues))
 		{
 		{
-			$sValues = '<any>';
+			$sValues = htmlentities('<any>');
 		}
 		}
 		else
 		else
 		{
 		{
 			$sValues = implode(', ', $aValues);
 			$sValues = implode(', ', $aValues);
 		}
 		}
-		$oObjectProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
+		$oObjectProj['dim'.$oDimension->GetKey()] = $sValues;
 	}
 	}
 
 
 	$aDisplayData[] = $oObjectProj;
 	$aDisplayData[] = $oObjectProj;
@@ -117,18 +117,18 @@ function ComputeUserProjections($oPage, $oUser)
 		foreach ($aDimensions as $iDimension => $oDimension)
 		foreach ($aDimensions as $iDimension => $oDimension)
 		{
 		{
 			// #@# to be moved, may be time consuming
 			// #@# to be moved, may be time consuming
-			$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension]);
+			$oDimension->CheckProjectionSpec($aProPros[$iProfile][$iDimension], get_class($oUser));
 
 
 			$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
 			$aValues = $aProPros[$iProfile][$iDimension]->ProjectUser($oUser);
 			if (is_null($aValues))
 			if (is_null($aValues))
 			{
 			{
-				$sValues = '<any>';
+				$sValues = htmlentities('<any>');
 			}
 			}
 			else
 			else
 			{
 			{
 				$sValues = implode(', ', $aValues);
 				$sValues = implode(', ', $aValues);
 			}
 			}
-			$aUserProfileProj['dim'.$oDimension->GetKey()] = htmlentities($sValues);
+			$aUserProfileProj['dim'.$oDimension->GetKey()] = $sValues;
 		}
 		}
 	
 	
 		$aDisplayData[] = $aUserProfileProj;
 		$aDisplayData[] = $aUserProfileProj;

+ 6 - 3
setup/data/03.persons.xml

@@ -8,7 +8,8 @@
 <phone></phone>
 <phone></phone>
 <location_id>29</location_id>
 <location_id>29</location_id>
 <first_name>Jules</first_name>
 <first_name>Jules</first_name>
-<employe_number></employe_number>
+<employee_number></employee_number>
+<login_id></login_id>
 </bizPerson>
 </bizPerson>
 <bizPerson id="20">
 <bizPerson id="20">
 <name>Dumas</name>
 <name>Dumas</name>
@@ -18,7 +19,8 @@
 <phone></phone>
 <phone></phone>
 <location_id>1</location_id>
 <location_id>1</location_id>
 <first_name>Dumas</first_name>
 <first_name>Dumas</first_name>
-<employe_number></employe_number>
+<employee_number></employee_number>
+<login_id></login_id>
 </bizPerson>
 </bizPerson>
 <bizPerson id="7">
 <bizPerson id="7">
 <name>Hugo</name>
 <name>Hugo</name>
@@ -28,6 +30,7 @@
 <phone>33172382223</phone>
 <phone>33172382223</phone>
 <location_id>1</location_id>
 <location_id>1</location_id>
 <first_name>Victor</first_name>
 <first_name>Victor</first_name>
-<employe_number>e12345</employe_number>
+<employee_number>e12345</employee_number>
+<login_id></login_id>
 </bizPerson>
 </bizPerson>
 </Set>
 </Set>

+ 13 - 0
setup/data/23.dimensions.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+<URP_Dimensions id="1">
+<name>organization</name>
+<description></description>
+<type>bizOrganization</type>
+</URP_Dimensions>
+<URP_Dimensions id="2">
+<name>site</name>
+<description></description>
+<type></type>
+</URP_Dimensions>
+</Set>

+ 11 - 0
setup/data/24.profiles.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+<URP_Profiles id="1">
+<name>Administrator</name>
+<description>Has the rights on everything (ignores the grant records)</description>
+</URP_Profiles>
+<URP_Profiles id="2">
+<name>Delivery Manager France</name>
+<description>Persons in charge of the operations for French customers</description>
+</URP_Profiles>
+</Set>

+ 555 - 0
setup/data/25.classprojection.xml

@@ -0,0 +1,555 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+<URP_ClassProjection id="1">
+<dimensionid>1</dimensionid>
+<class>bizOrganization</class>
+<value>&lt;this&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="2">
+<dimensionid>1</dimensionid>
+<class>logRealObject</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="3">
+<dimensionid>1</dimensionid>
+<class>bizContact</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="4">
+<dimensionid>1</dimensionid>
+<class>bizPerson</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="5">
+<dimensionid>1</dimensionid>
+<class>bizTeam</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="6">
+<dimensionid>1</dimensionid>
+<class>bizDocument</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="7">
+<dimensionid>1</dimensionid>
+<class>bizDocVersion</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="8">
+<dimensionid>1</dimensionid>
+<class>lnkDocumentRealObject</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="9">
+<dimensionid>1</dimensionid>
+<class>lnkContactRealObject</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="10">
+<dimensionid>1</dimensionid>
+<class>logInfra</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="11">
+<dimensionid>1</dimensionid>
+<class>bizLocation</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="12">
+<dimensionid>1</dimensionid>
+<class>bizCircuit</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="13">
+<dimensionid>1</dimensionid>
+<class>bizInterface</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="14">
+<dimensionid>1</dimensionid>
+<class>lnkInterfaces</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="15">
+<dimensionid>1</dimensionid>
+<class>bizDevice</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="16">
+<dimensionid>1</dimensionid>
+<class>bizPC</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="17">
+<dimensionid>1</dimensionid>
+<class>bizServer</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="18">
+<dimensionid>1</dimensionid>
+<class>bizNetworkDevice</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="19">
+<dimensionid>1</dimensionid>
+<class>bizInfraGroup</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="20">
+<dimensionid>1</dimensionid>
+<class>bizApplication</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="21">
+<dimensionid>1</dimensionid>
+<class>lnkInfraGrouping</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="22">
+<dimensionid>1</dimensionid>
+<class>lnkClientServer</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="23">
+<dimensionid>1</dimensionid>
+<class>bizPatch</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="24">
+<dimensionid>1</dimensionid>
+<class>bizIncidentTicket</class>
+<value>&lt;this&gt;</value>
+<attribute>customer_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="25">
+<dimensionid>1</dimensionid>
+<class>lnkRelatedTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="26">
+<dimensionid>1</dimensionid>
+<class>lnkInfraTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="27">
+<dimensionid>1</dimensionid>
+<class>lnkContactTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="28">
+<dimensionid>1</dimensionid>
+<class>bizWorkgroup</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="29">
+<dimensionid>1</dimensionid>
+<class>bizContract</class>
+<value>&lt;this&gt;</value>
+<attribute>org_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="30">
+<dimensionid>1</dimensionid>
+<class>lnkInfraContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="31">
+<dimensionid>1</dimensionid>
+<class>lnkContactContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="32">
+<dimensionid>1</dimensionid>
+<class>lnkDocumentContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="33">
+<dimensionid>1</dimensionid>
+<class>bizChangeTicket</class>
+<value>&lt;this&gt;</value>
+<attribute>customer_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="34">
+<dimensionid>1</dimensionid>
+<class>lnkInfraChangeTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="35">
+<dimensionid>1</dimensionid>
+<class>lnkContactChange</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="36">
+<dimensionid>1</dimensionid>
+<class>bizKnownError</class>
+<value>&lt;this&gt;</value>
+<attribute>cust_id</attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="37">
+<dimensionid>1</dimensionid>
+<class>lnkInfraError</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="38">
+<dimensionid>1</dimensionid>
+<class>lnkDocumentError</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="39">
+<dimensionid>1</dimensionid>
+<class>AuditCategory</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="40">
+<dimensionid>1</dimensionid>
+<class>AuditRule</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="41">
+<dimensionid>1</dimensionid>
+<class>menuNode</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="42">
+<dimensionid>1</dimensionid>
+<class>CMDBChange</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="43">
+<dimensionid>1</dimensionid>
+<class>CMDBChangeOp</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="44">
+<dimensionid>1</dimensionid>
+<class>CMDBChangeOpCreate</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="45">
+<dimensionid>1</dimensionid>
+<class>CMDBChangeOpDelete</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="46">
+<dimensionid>1</dimensionid>
+<class>CMDBChangeOpSetAttribute</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="47">
+<dimensionid>2</dimensionid>
+<class>bizOrganization</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="48">
+<dimensionid>2</dimensionid>
+<class>logRealObject</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="49">
+<dimensionid>2</dimensionid>
+<class>bizContact</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="50">
+<dimensionid>2</dimensionid>
+<class>bizPerson</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="51">
+<dimensionid>2</dimensionid>
+<class>bizTeam</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="52">
+<dimensionid>2</dimensionid>
+<class>bizDocument</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="53">
+<dimensionid>2</dimensionid>
+<class>bizDocVersion</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="54">
+<dimensionid>2</dimensionid>
+<class>lnkDocumentRealObject</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="55">
+<dimensionid>2</dimensionid>
+<class>lnkContactRealObject</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="56">
+<dimensionid>2</dimensionid>
+<class>logInfra</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="57">
+<dimensionid>2</dimensionid>
+<class>bizLocation</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="58">
+<dimensionid>2</dimensionid>
+<class>bizCircuit</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="59">
+<dimensionid>2</dimensionid>
+<class>bizInterface</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="60">
+<dimensionid>2</dimensionid>
+<class>lnkInterfaces</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="61">
+<dimensionid>2</dimensionid>
+<class>bizDevice</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="62">
+<dimensionid>2</dimensionid>
+<class>bizPC</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="63">
+<dimensionid>2</dimensionid>
+<class>bizServer</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="64">
+<dimensionid>2</dimensionid>
+<class>bizNetworkDevice</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="65">
+<dimensionid>2</dimensionid>
+<class>bizInfraGroup</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="66">
+<dimensionid>2</dimensionid>
+<class>bizApplication</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="67">
+<dimensionid>2</dimensionid>
+<class>lnkInfraGrouping</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="68">
+<dimensionid>2</dimensionid>
+<class>lnkClientServer</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="69">
+<dimensionid>2</dimensionid>
+<class>bizPatch</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="70">
+<dimensionid>2</dimensionid>
+<class>bizIncidentTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="71">
+<dimensionid>2</dimensionid>
+<class>lnkRelatedTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="72">
+<dimensionid>2</dimensionid>
+<class>lnkInfraTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="73">
+<dimensionid>2</dimensionid>
+<class>lnkContactTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="74">
+<dimensionid>2</dimensionid>
+<class>bizWorkgroup</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="75">
+<dimensionid>2</dimensionid>
+<class>bizContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="76">
+<dimensionid>2</dimensionid>
+<class>lnkInfraContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="77">
+<dimensionid>2</dimensionid>
+<class>lnkContactContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="78">
+<dimensionid>2</dimensionid>
+<class>lnkDocumentContract</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="79">
+<dimensionid>2</dimensionid>
+<class>bizChangeTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="80">
+<dimensionid>2</dimensionid>
+<class>lnkInfraChangeTicket</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="81">
+<dimensionid>2</dimensionid>
+<class>lnkContactChange</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="82">
+<dimensionid>2</dimensionid>
+<class>bizKnownError</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="83">
+<dimensionid>2</dimensionid>
+<class>lnkInfraError</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="84">
+<dimensionid>2</dimensionid>
+<class>lnkDocumentError</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="85">
+<dimensionid>2</dimensionid>
+<class>AuditCategory</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="86">
+<dimensionid>2</dimensionid>
+<class>AuditRule</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="87">
+<dimensionid>2</dimensionid>
+<class>menuNode</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="88">
+<dimensionid>2</dimensionid>
+<class>CMDBChange</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="89">
+<dimensionid>2</dimensionid>
+<class>CMDBChangeOp</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="90">
+<dimensionid>2</dimensionid>
+<class>CMDBChangeOpCreate</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="91">
+<dimensionid>2</dimensionid>
+<class>CMDBChangeOpDelete</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+<URP_ClassProjection id="92">
+<dimensionid>2</dimensionid>
+<class>CMDBChangeOpSetAttribute</class>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ClassProjection>
+</Set>

+ 15 - 0
setup/data/26.profileprojection.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+<URP_ProfileProjection id="1">
+<dimensionid>1</dimensionid>
+<profileid>2</profileid>
+<value>1;2</value>
+<attribute></attribute>
+</URP_ProfileProjection>
+<URP_ProfileProjection id="3">
+<dimensionid>2</dimensionid>
+<profileid>2</profileid>
+<value>&lt;any&gt;</value>
+<attribute></attribute>
+</URP_ProfileProjection>
+</Set>

+ 1659 - 0
setup/data/27.actiongrant.xml

@@ -0,0 +1,1659 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+<URP_ActionGrant id="1">
+<profileid>2</profileid>
+<class>bizOrganization</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="2">
+<profileid>2</profileid>
+<class>bizOrganization</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="3">
+<profileid>2</profileid>
+<class>bizOrganization</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="4">
+<profileid>2</profileid>
+<class>bizOrganization</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="5">
+<profileid>2</profileid>
+<class>bizOrganization</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="6">
+<profileid>2</profileid>
+<class>bizOrganization</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="7">
+<profileid>2</profileid>
+<class>logRealObject</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="8">
+<profileid>2</profileid>
+<class>logRealObject</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="9">
+<profileid>2</profileid>
+<class>logRealObject</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="10">
+<profileid>2</profileid>
+<class>logRealObject</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="11">
+<profileid>2</profileid>
+<class>logRealObject</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="12">
+<profileid>2</profileid>
+<class>logRealObject</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="13">
+<profileid>2</profileid>
+<class>bizContact</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="14">
+<profileid>2</profileid>
+<class>bizContact</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="15">
+<profileid>2</profileid>
+<class>bizContact</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="16">
+<profileid>2</profileid>
+<class>bizContact</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="17">
+<profileid>2</profileid>
+<class>bizContact</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="18">
+<profileid>2</profileid>
+<class>bizContact</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="19">
+<profileid>2</profileid>
+<class>bizPerson</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="20">
+<profileid>2</profileid>
+<class>bizPerson</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="21">
+<profileid>2</profileid>
+<class>bizPerson</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="22">
+<profileid>2</profileid>
+<class>bizPerson</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="23">
+<profileid>2</profileid>
+<class>bizPerson</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="24">
+<profileid>2</profileid>
+<class>bizPerson</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="25">
+<profileid>2</profileid>
+<class>bizTeam</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="26">
+<profileid>2</profileid>
+<class>bizTeam</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="27">
+<profileid>2</profileid>
+<class>bizTeam</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="28">
+<profileid>2</profileid>
+<class>bizTeam</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="29">
+<profileid>2</profileid>
+<class>bizTeam</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="30">
+<profileid>2</profileid>
+<class>bizTeam</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="31">
+<profileid>2</profileid>
+<class>bizDocument</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="32">
+<profileid>2</profileid>
+<class>bizDocument</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="33">
+<profileid>2</profileid>
+<class>bizDocument</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="34">
+<profileid>2</profileid>
+<class>bizDocument</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="35">
+<profileid>2</profileid>
+<class>bizDocument</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="36">
+<profileid>2</profileid>
+<class>bizDocument</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="37">
+<profileid>2</profileid>
+<class>bizDocVersion</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="38">
+<profileid>2</profileid>
+<class>bizDocVersion</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="39">
+<profileid>2</profileid>
+<class>bizDocVersion</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="40">
+<profileid>2</profileid>
+<class>bizDocVersion</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="41">
+<profileid>2</profileid>
+<class>bizDocVersion</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="42">
+<profileid>2</profileid>
+<class>bizDocVersion</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="43">
+<profileid>2</profileid>
+<class>lnkDocumentRealObject</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="44">
+<profileid>2</profileid>
+<class>lnkDocumentRealObject</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="45">
+<profileid>2</profileid>
+<class>lnkDocumentRealObject</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="46">
+<profileid>2</profileid>
+<class>lnkDocumentRealObject</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="47">
+<profileid>2</profileid>
+<class>lnkDocumentRealObject</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="48">
+<profileid>2</profileid>
+<class>lnkDocumentRealObject</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="49">
+<profileid>2</profileid>
+<class>lnkContactRealObject</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="50">
+<profileid>2</profileid>
+<class>lnkContactRealObject</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="51">
+<profileid>2</profileid>
+<class>lnkContactRealObject</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="52">
+<profileid>2</profileid>
+<class>lnkContactRealObject</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="53">
+<profileid>2</profileid>
+<class>lnkContactRealObject</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="54">
+<profileid>2</profileid>
+<class>lnkContactRealObject</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="55">
+<profileid>2</profileid>
+<class>logInfra</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="56">
+<profileid>2</profileid>
+<class>logInfra</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="57">
+<profileid>2</profileid>
+<class>logInfra</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="58">
+<profileid>2</profileid>
+<class>logInfra</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="59">
+<profileid>2</profileid>
+<class>logInfra</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="60">
+<profileid>2</profileid>
+<class>logInfra</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="61">
+<profileid>2</profileid>
+<class>bizLocation</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="62">
+<profileid>2</profileid>
+<class>bizLocation</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="63">
+<profileid>2</profileid>
+<class>bizLocation</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="64">
+<profileid>2</profileid>
+<class>bizLocation</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="65">
+<profileid>2</profileid>
+<class>bizLocation</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="66">
+<profileid>2</profileid>
+<class>bizLocation</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="67">
+<profileid>2</profileid>
+<class>bizCircuit</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="68">
+<profileid>2</profileid>
+<class>bizCircuit</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="69">
+<profileid>2</profileid>
+<class>bizCircuit</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="70">
+<profileid>2</profileid>
+<class>bizCircuit</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="71">
+<profileid>2</profileid>
+<class>bizCircuit</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="72">
+<profileid>2</profileid>
+<class>bizCircuit</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="73">
+<profileid>2</profileid>
+<class>bizInterface</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="74">
+<profileid>2</profileid>
+<class>bizInterface</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="75">
+<profileid>2</profileid>
+<class>bizInterface</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="76">
+<profileid>2</profileid>
+<class>bizInterface</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="77">
+<profileid>2</profileid>
+<class>bizInterface</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="78">
+<profileid>2</profileid>
+<class>bizInterface</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="79">
+<profileid>2</profileid>
+<class>lnkInterfaces</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="80">
+<profileid>2</profileid>
+<class>lnkInterfaces</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="81">
+<profileid>2</profileid>
+<class>lnkInterfaces</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="82">
+<profileid>2</profileid>
+<class>lnkInterfaces</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="83">
+<profileid>2</profileid>
+<class>lnkInterfaces</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="84">
+<profileid>2</profileid>
+<class>lnkInterfaces</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="85">
+<profileid>2</profileid>
+<class>bizDevice</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="86">
+<profileid>2</profileid>
+<class>bizDevice</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="87">
+<profileid>2</profileid>
+<class>bizDevice</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="88">
+<profileid>2</profileid>
+<class>bizDevice</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="89">
+<profileid>2</profileid>
+<class>bizDevice</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="90">
+<profileid>2</profileid>
+<class>bizDevice</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="91">
+<profileid>2</profileid>
+<class>bizPC</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="92">
+<profileid>2</profileid>
+<class>bizPC</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="93">
+<profileid>2</profileid>
+<class>bizPC</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="94">
+<profileid>2</profileid>
+<class>bizPC</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="95">
+<profileid>2</profileid>
+<class>bizPC</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="96">
+<profileid>2</profileid>
+<class>bizPC</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="97">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="98">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="99">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="100">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="101">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="102">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="103">
+<profileid>2</profileid>
+<class>bizNetworkDevice</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="104">
+<profileid>2</profileid>
+<class>bizNetworkDevice</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="105">
+<profileid>2</profileid>
+<class>bizNetworkDevice</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="106">
+<profileid>2</profileid>
+<class>bizNetworkDevice</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="107">
+<profileid>2</profileid>
+<class>bizNetworkDevice</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="108">
+<profileid>2</profileid>
+<class>bizNetworkDevice</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="109">
+<profileid>2</profileid>
+<class>bizInfraGroup</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="110">
+<profileid>2</profileid>
+<class>bizInfraGroup</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="111">
+<profileid>2</profileid>
+<class>bizInfraGroup</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="112">
+<profileid>2</profileid>
+<class>bizInfraGroup</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="113">
+<profileid>2</profileid>
+<class>bizInfraGroup</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="114">
+<profileid>2</profileid>
+<class>bizInfraGroup</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="115">
+<profileid>2</profileid>
+<class>bizApplication</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="116">
+<profileid>2</profileid>
+<class>bizApplication</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="117">
+<profileid>2</profileid>
+<class>bizApplication</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="118">
+<profileid>2</profileid>
+<class>bizApplication</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="119">
+<profileid>2</profileid>
+<class>bizApplication</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="120">
+<profileid>2</profileid>
+<class>bizApplication</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="121">
+<profileid>2</profileid>
+<class>lnkInfraGrouping</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="122">
+<profileid>2</profileid>
+<class>lnkInfraGrouping</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="123">
+<profileid>2</profileid>
+<class>lnkInfraGrouping</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="124">
+<profileid>2</profileid>
+<class>lnkInfraGrouping</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="125">
+<profileid>2</profileid>
+<class>lnkInfraGrouping</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="126">
+<profileid>2</profileid>
+<class>lnkInfraGrouping</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="127">
+<profileid>2</profileid>
+<class>lnkClientServer</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="128">
+<profileid>2</profileid>
+<class>lnkClientServer</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="129">
+<profileid>2</profileid>
+<class>lnkClientServer</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="130">
+<profileid>2</profileid>
+<class>lnkClientServer</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="131">
+<profileid>2</profileid>
+<class>lnkClientServer</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="132">
+<profileid>2</profileid>
+<class>lnkClientServer</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="133">
+<profileid>2</profileid>
+<class>bizPatch</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="134">
+<profileid>2</profileid>
+<class>bizPatch</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="135">
+<profileid>2</profileid>
+<class>bizPatch</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="136">
+<profileid>2</profileid>
+<class>bizPatch</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="137">
+<profileid>2</profileid>
+<class>bizPatch</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="138">
+<profileid>2</profileid>
+<class>bizPatch</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="139">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="140">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="141">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="142">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="143">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="144">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="145">
+<profileid>2</profileid>
+<class>lnkRelatedTicket</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="146">
+<profileid>2</profileid>
+<class>lnkRelatedTicket</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="147">
+<profileid>2</profileid>
+<class>lnkRelatedTicket</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="148">
+<profileid>2</profileid>
+<class>lnkRelatedTicket</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="149">
+<profileid>2</profileid>
+<class>lnkRelatedTicket</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="150">
+<profileid>2</profileid>
+<class>lnkRelatedTicket</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="151">
+<profileid>2</profileid>
+<class>lnkInfraTicket</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="152">
+<profileid>2</profileid>
+<class>lnkInfraTicket</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="153">
+<profileid>2</profileid>
+<class>lnkInfraTicket</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="154">
+<profileid>2</profileid>
+<class>lnkInfraTicket</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="155">
+<profileid>2</profileid>
+<class>lnkInfraTicket</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="156">
+<profileid>2</profileid>
+<class>lnkInfraTicket</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="157">
+<profileid>2</profileid>
+<class>lnkContactTicket</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="158">
+<profileid>2</profileid>
+<class>lnkContactTicket</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="159">
+<profileid>2</profileid>
+<class>lnkContactTicket</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="160">
+<profileid>2</profileid>
+<class>lnkContactTicket</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="161">
+<profileid>2</profileid>
+<class>lnkContactTicket</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="162">
+<profileid>2</profileid>
+<class>lnkContactTicket</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="163">
+<profileid>2</profileid>
+<class>bizWorkgroup</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="164">
+<profileid>2</profileid>
+<class>bizWorkgroup</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="165">
+<profileid>2</profileid>
+<class>bizWorkgroup</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="166">
+<profileid>2</profileid>
+<class>bizWorkgroup</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="167">
+<profileid>2</profileid>
+<class>bizWorkgroup</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="168">
+<profileid>2</profileid>
+<class>bizWorkgroup</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="169">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="170">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="171">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="172">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="173">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="174">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="175">
+<profileid>2</profileid>
+<class>lnkInfraContract</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="176">
+<profileid>2</profileid>
+<class>lnkInfraContract</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="177">
+<profileid>2</profileid>
+<class>lnkInfraContract</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="178">
+<profileid>2</profileid>
+<class>lnkInfraContract</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="179">
+<profileid>2</profileid>
+<class>lnkInfraContract</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="180">
+<profileid>2</profileid>
+<class>lnkInfraContract</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="181">
+<profileid>2</profileid>
+<class>lnkContactContract</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="182">
+<profileid>2</profileid>
+<class>lnkContactContract</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="183">
+<profileid>2</profileid>
+<class>lnkContactContract</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="184">
+<profileid>2</profileid>
+<class>lnkContactContract</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="185">
+<profileid>2</profileid>
+<class>lnkContactContract</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="186">
+<profileid>2</profileid>
+<class>lnkContactContract</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="187">
+<profileid>2</profileid>
+<class>lnkDocumentContract</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="188">
+<profileid>2</profileid>
+<class>lnkDocumentContract</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="189">
+<profileid>2</profileid>
+<class>lnkDocumentContract</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="190">
+<profileid>2</profileid>
+<class>lnkDocumentContract</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="191">
+<profileid>2</profileid>
+<class>lnkDocumentContract</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="192">
+<profileid>2</profileid>
+<class>lnkDocumentContract</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="193">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="194">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="195">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="196">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="197">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="198">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="199">
+<profileid>2</profileid>
+<class>lnkInfraChangeTicket</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="200">
+<profileid>2</profileid>
+<class>lnkInfraChangeTicket</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="201">
+<profileid>2</profileid>
+<class>lnkInfraChangeTicket</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="202">
+<profileid>2</profileid>
+<class>lnkInfraChangeTicket</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="203">
+<profileid>2</profileid>
+<class>lnkInfraChangeTicket</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="204">
+<profileid>2</profileid>
+<class>lnkInfraChangeTicket</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="205">
+<profileid>2</profileid>
+<class>lnkContactChange</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="206">
+<profileid>2</profileid>
+<class>lnkContactChange</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="207">
+<profileid>2</profileid>
+<class>lnkContactChange</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="208">
+<profileid>2</profileid>
+<class>lnkContactChange</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="209">
+<profileid>2</profileid>
+<class>lnkContactChange</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="210">
+<profileid>2</profileid>
+<class>lnkContactChange</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="211">
+<profileid>2</profileid>
+<class>bizKnownError</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="212">
+<profileid>2</profileid>
+<class>bizKnownError</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="213">
+<profileid>2</profileid>
+<class>bizKnownError</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="214">
+<profileid>2</profileid>
+<class>bizKnownError</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="215">
+<profileid>2</profileid>
+<class>bizKnownError</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="216">
+<profileid>2</profileid>
+<class>bizKnownError</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="217">
+<profileid>2</profileid>
+<class>lnkInfraError</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="218">
+<profileid>2</profileid>
+<class>lnkInfraError</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="219">
+<profileid>2</profileid>
+<class>lnkInfraError</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="220">
+<profileid>2</profileid>
+<class>lnkInfraError</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="221">
+<profileid>2</profileid>
+<class>lnkInfraError</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="222">
+<profileid>2</profileid>
+<class>lnkInfraError</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="223">
+<profileid>2</profileid>
+<class>lnkDocumentError</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="224">
+<profileid>2</profileid>
+<class>lnkDocumentError</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="225">
+<profileid>2</profileid>
+<class>lnkDocumentError</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="226">
+<profileid>2</profileid>
+<class>lnkDocumentError</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="227">
+<profileid>2</profileid>
+<class>lnkDocumentError</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="228">
+<profileid>2</profileid>
+<class>lnkDocumentError</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="229">
+<profileid>2</profileid>
+<class>AuditCategory</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="230">
+<profileid>2</profileid>
+<class>AuditCategory</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="231">
+<profileid>2</profileid>
+<class>AuditCategory</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="232">
+<profileid>2</profileid>
+<class>AuditCategory</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="233">
+<profileid>2</profileid>
+<class>AuditCategory</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="234">
+<profileid>2</profileid>
+<class>AuditCategory</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="235">
+<profileid>2</profileid>
+<class>AuditRule</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="236">
+<profileid>2</profileid>
+<class>AuditRule</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="237">
+<profileid>2</profileid>
+<class>AuditRule</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="238">
+<profileid>2</profileid>
+<class>AuditRule</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="239">
+<profileid>2</profileid>
+<class>AuditRule</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="240">
+<profileid>2</profileid>
+<class>AuditRule</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="241">
+<profileid>2</profileid>
+<class>menuNode</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="242">
+<profileid>2</profileid>
+<class>menuNode</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="243">
+<profileid>2</profileid>
+<class>menuNode</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="244">
+<profileid>2</profileid>
+<class>menuNode</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="245">
+<profileid>2</profileid>
+<class>menuNode</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="246">
+<profileid>2</profileid>
+<class>menuNode</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="247">
+<profileid>2</profileid>
+<class>CMDBChange</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="248">
+<profileid>2</profileid>
+<class>CMDBChange</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="249">
+<profileid>2</profileid>
+<class>CMDBChange</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="250">
+<profileid>2</profileid>
+<class>CMDBChange</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="251">
+<profileid>2</profileid>
+<class>CMDBChange</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="252">
+<profileid>2</profileid>
+<class>CMDBChange</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="253">
+<profileid>2</profileid>
+<class>CMDBChangeOp</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="254">
+<profileid>2</profileid>
+<class>CMDBChangeOp</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="255">
+<profileid>2</profileid>
+<class>CMDBChangeOp</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="256">
+<profileid>2</profileid>
+<class>CMDBChangeOp</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="257">
+<profileid>2</profileid>
+<class>CMDBChangeOp</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="258">
+<profileid>2</profileid>
+<class>CMDBChangeOp</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="259">
+<profileid>2</profileid>
+<class>CMDBChangeOpCreate</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="260">
+<profileid>2</profileid>
+<class>CMDBChangeOpCreate</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="261">
+<profileid>2</profileid>
+<class>CMDBChangeOpCreate</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="262">
+<profileid>2</profileid>
+<class>CMDBChangeOpCreate</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="263">
+<profileid>2</profileid>
+<class>CMDBChangeOpCreate</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="264">
+<profileid>2</profileid>
+<class>CMDBChangeOpCreate</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="265">
+<profileid>2</profileid>
+<class>CMDBChangeOpDelete</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="266">
+<profileid>2</profileid>
+<class>CMDBChangeOpDelete</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="267">
+<profileid>2</profileid>
+<class>CMDBChangeOpDelete</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="268">
+<profileid>2</profileid>
+<class>CMDBChangeOpDelete</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="269">
+<profileid>2</profileid>
+<class>CMDBChangeOpDelete</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="270">
+<profileid>2</profileid>
+<class>CMDBChangeOpDelete</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="271">
+<profileid>2</profileid>
+<class>CMDBChangeOpSetAttribute</class>
+<permission>yes</permission>
+<action>read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="272">
+<profileid>2</profileid>
+<class>CMDBChangeOpSetAttribute</class>
+<permission>yes</permission>
+<action>modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="273">
+<profileid>2</profileid>
+<class>CMDBChangeOpSetAttribute</class>
+<permission>yes</permission>
+<action>delete</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="274">
+<profileid>2</profileid>
+<class>CMDBChangeOpSetAttribute</class>
+<permission>yes</permission>
+<action>bulk read</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="275">
+<profileid>2</profileid>
+<class>CMDBChangeOpSetAttribute</class>
+<permission>yes</permission>
+<action>bulk modify</action>
+</URP_ActionGrant>
+<URP_ActionGrant id="276">
+<profileid>2</profileid>
+<class>CMDBChangeOpSetAttribute</class>
+<permission>yes</permission>
+<action>bulk delete</action>
+</URP_ActionGrant>
+</Set>

+ 3 - 0
setup/data/28.attributegrant.xml

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+</Set>

+ 189 - 0
setup/data/29.stimulusgrant.xml

@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Set>
+<URP_StimulusGrant id="1">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_store</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="2">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_ship</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="3">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_plug</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="4">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_configuration_finished</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="5">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_val_failed</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="6">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_mtp</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="7">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_start_change</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="8">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_end_change</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="9">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_decommission</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="10">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_obsolete</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="11">
+<profileid>2</profileid>
+<class>bizServer</class>
+<permission>no</permission>
+<stimulus>ev_recycle</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="12">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<stimulus>ev_assign</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="13">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<stimulus>ev_reassign</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="14">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<stimulus>ev_start_working</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="15">
+<profileid>2</profileid>
+<class>bizIncidentTicket</class>
+<permission>no</permission>
+<stimulus>ev_close</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="16">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>no</permission>
+<stimulus>ev_freeze_version</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="17">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>no</permission>
+<stimulus>ev_sign</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="18">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>no</permission>
+<stimulus>ev_begin</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="19">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>no</permission>
+<stimulus>ev_notice</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="20">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>no</permission>
+<stimulus>ev_terminate</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="21">
+<profileid>2</profileid>
+<class>bizContract</class>
+<permission>no</permission>
+<stimulus>ev_elapsed</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="22">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<stimulus>ev_validate</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="23">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<stimulus>ev_reject</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="24">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<stimulus>ev_reopen</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="25">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<stimulus>ev_plan</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="26">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<stimulus>ev_approve</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="27">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<stimulus>ev_replan</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="28">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<stimulus>ev_notapprove</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="29">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<stimulus>ev_implement</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="30">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>no</permission>
+<stimulus>ev_monitor</stimulus>
+</URP_StimulusGrant>
+<URP_StimulusGrant id="31">
+<profileid>2</profileid>
+<class>bizChangeTicket</class>
+<permission>yes</permission>
+<stimulus>ev_finish</stimulus>
+</URP_StimulusGrant>
+</Set>

+ 31 - 22
setup/data/export.cmd

@@ -1,27 +1,36 @@
 SET WEBROOT=http://localhost:81
 SET WEBROOT=http://localhost:81
 SET USER=Erwan
 SET USER=Erwan
 SET PWD=Taloc
 SET PWD=Taloc
+
 REM The order (numbering) of the files is important since
 REM The order (numbering) of the files is important since
 REM it dictates the order to import them back
 REM it dictates the order to import them back
-wget --output-document=01.organizations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizOrganization&format=xml"
-wget --output-document=02.locations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizLocation&format=xml"
-wget --output-document=03.persons.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizPerson&format=xml"
-wget --output-document=04.teams.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizTeam&format=xml"
-wget --output-document=05.pcs.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizPC&format=xml"
-wget --output-document=06.servers.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizServer&format=xml"
-wget --output-document=07.applications.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizApplication&format=xml"
-wget --output-document=08.nw-devices.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizNetworkDevice&format=xml"
-wget --output-document=09.links_contacts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactRealObject&format=xml"
-wget --output-document=10.workgroups.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizWorkgroup&format=xml"
-wget --output-document=11.incidents.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizIncidentTicket&format=xml"
-wget --output-document=12.relatedtickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkRelatedTicket&format=xml"
-wget --output-document=13.infratickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkInfraTicket&format=xml"
-wget --output-document=14.contacttickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactTicket&format=xml"
-wget --output-document=15.changetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizChangeTicket&format=xml"
-wget --output-document=16.infrachangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkInfraChangeTicket&format=xml"
-wget --output-document=17.contactchangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactChange&format=xml"
-wget --output-document=18.contracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT bizContract&format=xml"
-wget --output-document=19.infracontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkInfraContract&format=xml"
-wget --output-document=20.contactcontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT lnkContactContract&format=xml"
-wget --output-document=21.auditcategories.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT AuditCategory&format=xml"
-wget --output-document=22.auditrules.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%WEBROOT%/pages/export.php?expression=SELECT AuditRule&format=xml"
+wget --output-document=01.organizations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizOrganization&format=xml"
+wget --output-document=02.locations.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizLocation&format=xml"
+wget --output-document=03.persons.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizPerson&format=xml"
+wget --output-document=04.teams.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizTeam&format=xml"
+wget --output-document=05.pcs.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizPC&format=xml"
+wget --output-document=06.servers.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizServer&format=xml"
+wget --output-document=07.applications.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizApplication&format=xml"
+wget --output-document=08.nw-devices.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizNetworkDevice&format=xml"
+wget --output-document=09.links_contacts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactRealObject&format=xml"
+wget --output-document=10.workgroups.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizWorkgroup&format=xml"
+wget --output-document=11.incidents.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizIncidentTicket&format=xml"
+wget --output-document=12.relatedtickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkRelatedTicket&format=xml"
+wget --output-document=13.infratickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkInfraTicket&format=xml"
+wget --output-document=14.contacttickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactTicket&format=xml"
+wget --output-document=15.changetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizChangeTicket&format=xml"
+wget --output-document=16.infrachangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkInfraChangeTicket&format=xml"
+wget --output-document=17.contactchangetickets.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactChange&format=xml"
+wget --output-document=18.contracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT bizContract&format=xml"
+wget --output-document=19.infracontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkInfraContract&format=xml"
+wget --output-document=20.contactcontracts.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT lnkContactContract&format=xml"
+wget --output-document=21.auditcategories.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT AuditCategory&format=xml"
+wget --output-document=22.auditrules.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT AuditRule&format=xml"
+wget --output-document=23.dimensions.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_Dimensions&format=xml"
+wget --output-document=24.profiles.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_Profiles&format=xml"
+wget --output-document=25.classprojection.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_ClassProjection&format=xml"
+wget --output-document=26.profileprojection.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_ProfileProjection&format=xml"
+wget --output-document=27.actiongrant.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_ActionGrant&format=xml"
+wget --output-document=28.attributegrant.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_AttributeGrant&format=xml"
+wget --output-document=29.stimulusgrant.xml --post-data="auth_user=%USER%&auth_pwd=%PWD%&operation=login" "%EXPORT%?expression=SELECT URP_StimulusGrant&format=xml"
+pause