public new static bool CanMove(ISupportStates item, IStateConnector connector) { return StateManager.CanMove(item, connector); }
/// <summary> /// The can move. /// </summary> /// <param name="item">The item.</param> /// <param name="connector">The connector.</param> /// <returns>The <see cref="bool" />.</returns> protected static bool CanMove(ISupportStates item, IStateConnector connector) { var editableItem = item as IEditableRoot; if (editableItem == null) return false; var user = Csla.ApplicationContext.User; if (!user.Identity.IsAuthenticated) return false; var identity = user.Identity as IMQ1Identity; if (identity == null) return false; if (identity.IsAdmin) return true; var personIds = identity.PersonIds; if (personIds == null) { personIds = new Dictionary<string, int>(); personIds[Constants.BasePersonProcessName] = identity.PersonId; } // Find exact match. if (connector != null) { var config = connector.SecurityConfigurations.FirstOrDefault( c => c.BusinessUnitId == identity.BusinessUnitId && identity.RolesId.Contains(c.RoleId) && IsPersonFieldMatch(editableItem, c, personIds)); if (config != null) return config.CanMove; // Find config with 2 matches. config = connector.SecurityConfigurations.FirstOrDefault( c => (c.BusinessUnitId == identity.BusinessUnitId && identity.RolesId.Contains(c.RoleId) && c.PersonFieldName == Constants.AllPersonFieldsSystemName) || (c.BusinessUnitId == identity.BusinessUnitId && c.RoleId < 0 && IsPersonFieldMatch(editableItem, c, personIds)) || (c.BusinessUnitId < 0 && identity.RolesId.Contains(c.RoleId) && IsPersonFieldMatch(editableItem, c, personIds))); if (config != null) return config.CanMove; // Find config with 1 match. config = connector.SecurityConfigurations.FirstOrDefault( c => (c.BusinessUnitId == identity.BusinessUnitId && c.RoleId < 0 && c.PersonFieldName == Constants.AllPersonFieldsSystemName) || (c.BusinessUnitId < 0 && identity.RolesId.Contains(c.RoleId) && c.PersonFieldName == Constants.AllPersonFieldsSystemName) || (c.BusinessUnitId < 0 && c.RoleId < 0 && IsPersonFieldMatch(editableItem, c, personIds))); if (config != null) return config.CanMove; // Find any match. config = connector.SecurityConfigurations.FirstOrDefault( c => c.BusinessUnitId < 0 && c.RoleId < 0 && c.PersonFieldName == Constants.AllPersonFieldsSystemName); if (config != null) return config.CanMove; } return false; }