Пример #1
0
        private static DeltaSchemaObjectCollection GetDeltaObjects <T>(this IEnumerable <T> existed, IEnumerable <T> needToImported) where T : SchemaObjectBase
        {
            DeltaSchemaObjectCollection delta = new DeltaSchemaObjectCollection();

            Dictionary <string, T> existedDict        = existed.ToDictionaryByCodeName();
            Dictionary <string, T> needToImportedDict = needToImported.ToDictionaryByCodeName();

            needToImported.ForEach(obj =>
            {
                string codeName = obj.Properties.GetValue("CodeName", string.Empty);

                if (existedDict.ContainsKey(codeName) == false)
                {
                    delta.Inserted.Add(obj);
                }
            });

            existed.ForEach(objExisted =>
            {
                string codeName = objExisted.Properties.GetValue("CodeName", string.Empty);

                if (needToImportedDict.ContainsKey(codeName) == false)
                {
                    delta.Deleted.Add(objExisted);
                }
            });

            return(delta);
        }
Пример #2
0
        /// <summary>
        /// 得到角色中权限的变化列表
        /// </summary>
        /// <param name="app"></param>
        /// <param name="role"></param>
        /// <returns></returns>
        private static SCRoleAndDeltaGroup GetDeltaGroupsInRole(this SCRole role, IEnumerable <SCGroup> groupsInOrgs)
        {
            List <SCGroup> existedGroups = new List <SCGroup>();

            role.CurrentMembers.ForEach(m => (m is SCGroup).TrueAction(() => existedGroups.Add((SCGroup)m)));

            DeltaSchemaObjectCollection delta = GetDeltaObjects(existedGroups, groupsInOrgs);

            return(new SCRoleAndDeltaGroup(role, delta));
        }
Пример #3
0
        /// <summary>
        /// 得到角色中权限的变化列表
        /// </summary>
        /// <param name="app"></param>
        /// <param name="role"></param>
        /// <returns></returns>
        public static SCRoleAndDeltaPermission GetDeltaPermissionsInRole(this SCApplication app, SCRole role)
        {
            SCRole existedRole = app.CurrentRoles.Find(existed => AreEqual(existed, role));

            DeltaSchemaObjectCollection delta = null;

            if (existedRole != null)
            {
                delta = GetDeltaObjects(existedRole.CurrentPermissions, role.CurrentPermissions);
            }
            else
            {
                delta       = new DeltaSchemaObjectCollection();
                existedRole = role;
            }

            return(new SCRoleAndDeltaPermission(existedRole, delta));
        }
Пример #4
0
        public static DeltaSchemaObjectCollection UpdateImportedPermissions(this SCApplication app, IEnumerable <SCPermission> permissionsNeedToImported, Action <RolesFunctionsImportContext> callerAction = null)
        {
            DeltaSchemaObjectCollection delta = app.GetDeltaPermissions(permissionsNeedToImported);

            ProcessProgress.Current.MaxStep += delta.TotalChanges;
            ProcessProgress.Current.Response();

            foreach (SCPermission permission in delta.Inserted)
            {
                DoOperation(permission, string.Format("添加权限\"{0}\"", permission.CodeName), callerAction,
                            () => SCObjectOperations.Instance.AddPermission((SCPermission)permission.CloneObject(), app));
            }

            foreach (SCPermission permission in delta.Deleted)
            {
                DoOperation(permission, string.Format("删除权限\"{0}\"", permission.CodeName), callerAction,
                            () => SCObjectOperations.Instance.DeletePermission((SCPermission)permission.CloneObject()));
            }

            return(delta);
        }
Пример #5
0
        public static DeltaSchemaObjectCollection UpdateImportedRoles(this SCApplication app, IEnumerable <SCRole> rolesNeedToImported, Action <RolesFunctionsImportContext> callerAction = null)
        {
            DeltaSchemaObjectCollection delta = app.GetDeltaRoles(rolesNeedToImported);

            ProcessProgress.Current.MaxStep += delta.TotalChanges;
            ProcessProgress.Current.Response();

            foreach (SCRole role in delta.Inserted)
            {
                DoOperation(role, string.Format("添加角色\"{0}\"", role.CodeName), callerAction,
                            () => SCObjectOperations.Instance.AddRole((SCRole)role.CloneObject(), app));
            }

            foreach (SCRole role in delta.Deleted)
            {
                DoOperation(role, string.Format("删除角色\"{0}\"", role.CodeName), callerAction,
                            () => SCObjectOperations.Instance.DeleteRole((SCRole)role.CloneObject()));
            }

            return(delta);
        }