/// <summary> /// on Post Retrive /// </summary> /// <param name="context"></param> void CanSeeCurrentRecord(IPluginExecutionContext context, IOrganizationService service) { Entity entity = context.OutputParameters["BusinessEntity"] as Entity; //must be a caller id (UserId) and not InitiatingUserId // 1. the retrieve must be on caller id and not strong user (not register specific user on plugin // 2. and when we register a Create Step on entity that's has secure field //we must grant a strong user to be on a plugin for get from parent entity the field secure and set him on current entity if (entity != null) { TableRelationation tableRelation = TableRelationation.GetSinglton(); if (tableRelation.Entities.Contains(entity.LogicalName.ToLower())) { ConfigCaching configCaching = GetCacheConfig(service); UsersTeam userteam = UsersTeam.GetSinglton(service, configCaching); if (userteam.UsersPremission.Contains(context.UserId)) { return; } if (entity.Attributes.Contains(General.SecureField)) { bool canSee = entity.GetAttributeValue <bool>(General.SecureField); if (canSee == true) { throw new InvalidPluginExecutionException("אינך מורשה לראות את הרשומה"); } } } } }
/// <summary> /// on Pre Retrive /// </summary> /// <param name="context"></param> void AddSecureFieldIfNotExists(IPluginExecutionContext context, IOrganizationService service) { var primaryEntityName = context.PrimaryEntityName; if (!String.IsNullOrEmpty(primaryEntityName)) { TableRelationation tableRelation = TableRelationation.GetSinglton(); ConfigCaching configCaching = GetCacheConfig(service); // load userTeam if not loaded yet because is in grant user UsersTeam userteam = UsersTeam.GetSinglton(service, configCaching); if (tableRelation.Entities.Contains(primaryEntityName.ToLower())) { if (context.InputParameters.Contains("ColumnSet")) { ColumnSet columns = context.InputParameters["ColumnSet"] as ColumnSet; if (columns != null && !columns.AllColumns) { // Validate if exists if (!columns.Columns.Contains(General.SecureField)) { columns.AddColumn(General.SecureField); } } } } } }
/// <summary> /// AppendQueryExpression /// </summary> /// <param name="queryExpression"></param> /// <param name="context"></param> /// <param name="service"></param> /// <param name="tableRelation"></param> void AppendQueryExpression(QueryExpression queryExpression, IPluginExecutionContext context, IOrganizationService service, TableRelationation tableRelation) { ConfigCaching configCaching = GetCacheConfig(service); UsersTeam userteam = UsersTeam.GetSinglton(service, configCaching); //if (userteam.UsersPremission.Contains(context.InitiatingUserId)) // return; if (userteam.UsersPremission.Contains(context.InitiatingUserId)) { if (queryExpression.EntityName.ToLower() == TableRelationation.INCIDENT) { var filter = queryExpression.Criteria; RemoveSecureFilter(filter); return; } else { return; } } if (queryExpression.EntityName == TableRelationation.ACTIVITYPOINTER) { AppendAllActivities(queryExpression, tableRelation); return; } if (tableRelation.Entities.Contains(queryExpression.EntityName.ToLower())) { var filter = queryExpression.Criteria; AppendFilter(filter); } }
public static UsersTeam GetSinglton(IOrganizationService service, ConfigCaching config) { if (_usersTeam == null) { lock (_lock) { if (_usersTeam == null) _usersTeam = new UsersTeam(); } } return _usersTeam; }
public static UsersTeam GetSinglton(IOrganizationService service, ConfigCaching config) { if (_usersTeam == null) { lock (_lock) { if (_usersTeam == null) { _usersTeam = new UsersTeam(); } } } return(_usersTeam); }
public void SecretSecureActivityPointer(IPluginExecutionContext context, IOrganizationService service) { if (!context.OutputParameters.Contains("BusinessEntityCollection")) { return; } EntityCollection results = (EntityCollection)context.OutputParameters["BusinessEntityCollection"]; if (results != null && results.Entities != null && results.Entities.Count > 0) { if (results.EntityName != TableRelationation.ACTIVITYPOINTER) { return; } ConfigCaching configCaching = GetCacheConfig(service); UsersTeam userteam = UsersTeam.GetSinglton(service, configCaching); if (userteam.UsersPremission.Contains(context.InitiatingUserId)) { return; } TableRelationation tableRelation = TableRelationation.GetSinglton(); foreach (Entity entity in results.Entities) { bool isSecure = false; AliasedValue aliasValue = null; foreach (var activityName in tableRelation.Activities) { var aliasName = TableRelationation.PERFIX_ALIAS + activityName + TableRelationation.DOT_ALIAS + General.SecureField; if (entity.Attributes.Contains(aliasName)) { aliasValue = entity.GetAttributeValue <AliasedValue>(aliasName); isSecure = aliasValue != null && aliasValue.Value is bool?(bool)aliasValue.Value : false; break; } } if (isSecure) { if (entity.Attributes.Contains("subject")) { entity.Attributes["subject"] = General.SecretField; } if (entity.Attributes.Contains("description")) { entity.Attributes["description"] = General.SecretField; } if (entity.GetAttributeValue <EntityReference>("regardingobjectid") != null) { ((EntityReference)entity["regardingobjectid"]).Name = General.SecretField; } if (entity.GetAttributeValue <DateTime?>("actualend") != null) { entity.Attributes["actualend"] = null; } if (entity.GetAttributeValue <DateTime?>("actualstart") != null) { entity.Attributes["actualstart"] = null; } if (entity.GetAttributeValue <EntityReference>("ownerid") != null) { entity["ownerid"] = null; } } // secureTemp.Add(e); //results.Entities.Remove(e); } //foreach(var secure in secureTemp) //{ // results.Entities.Remove(secure); //} } }