Esempio n. 1
0
 public new static bool CanMove(ISupportStates item, IStateConnector connector)
 {
     return StateManager.CanMove(item, connector);
 }
Esempio n. 2
0
        /// <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;
        }