Ejemplo n.º 1
0
        private void ImportRoleConditions(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations executor, Dictionary <object, object> mappings, PC.SCRole[] roles)
        {
            if (roles.Length > 0 && objectSet.HasConditions)
            {
                foreach (var r in roles)
                {
                    PC.SCRole role2 = r;
                    if (mappings.ContainsKey(r))
                    {
                        role2 = (PC.SCRole)mappings[r];
                    }

                    var roleConditions = (from c in objectSet.Conditions where c.OwnerID == r.ID select c).ToArray();

                    if (roleConditions.Length > 0)
                    {
                        context.AppendLogFormat("正在替角色{0}添加条件\r\n", role2.ToDescription());
                        PC.Conditions.SCConditionOwner owner = new PC.Conditions.SCConditionOwner()
                        {
                            OwnerID = role2.ID,
                            Type    = "Default"
                        };

                        foreach (var c in roleConditions)
                        {
                            owner.Conditions.Add(c);
                        }

                        PC.Adapters.SCConditionAdapter.Instance.UpdateConditions(owner);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void ImportRoleMembers(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations executor, Dictionary <object, object> mappings, PC.SCRole[] roles)
        {
            if (roles.Length > 0)
            {
                foreach (var r in roles)
                {
                    PC.SCRole role2 = r;
                    if (mappings.ContainsKey(r))
                    {
                        role2 = (PC.SCRole)mappings[r];
                    }

                    // 查找角色成员
                    var roleMemberIds = (from m in objectSet.Membership where m.ContainerSchemaType == "Roles" && m.ContainerID == r.ID select m.ID).ToArray();
                    if (roleMemberIds.Length > 0)
                    {
                        var roleMembers = DbUtil.LoadObjects(roleMemberIds);
                        foreach (PC.SCBase obj in roleMembers)
                        {
                            context.AppendLog("正在导入角色成员" + obj.DisplayName ?? obj.Name);
                            executor.AddMemberToRole(obj, role2);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        protected PC.SCRole CreateRoleWithMembers(PC.SCApplication app, PC.SCRole role, IEnumerable <PC.SCUser> users)
        {
            var role0 = (PC.SCRole)PC.Adapters.SchemaObjectAdapter.Instance.Load(role.ID);

            if (role0 == null || role0.Status != SchemaObjectStatus.Normal)
            {
                Facade.AddRole(role, app);
            }
            else
            {
                role = role0;
            }

            var members = PC.Adapters.SCMemberRelationAdapter.Instance.LoadByContainerID(role.ID);

            foreach (var item in members)
            {
                Facade.RemoveMemberFromRole((PC.SCBase)item.Member, role);
            }

            if (users != null)
            {
                foreach (var user in users)
                {
                    Facade.AddMemberToRole(user, role);
                }
            }


            return(role);
        }
Ejemplo n.º 4
0
        private SCRole LoadRoleByFullCodeName(SCRoleEnumMatrixUsersContext context, string roleFullCodeName)
        {
            string[] nameParts = roleFullCodeName.Split(':');

            string appCodeName  = nameParts[0].Trim(' ');
            string roleCodeName = nameParts[1].Trim(' ');

            SCApplication app = null;

            if (context.CachedApplication.TryGetValue(appCodeName, out app) == false)
            {
                app = SchemaObjectAdapter.Instance.LoadByCodeName(this.CurrentApplication.SchemaType, appCodeName, SchemaObjectStatus.Normal, DateTime.MinValue) as SCApplication;

                context.CachedApplication.Add(appCodeName, app);
            }

            SCRole role = null;

            if (app != null)
            {
                role = SchemaObjectAdapter.Instance.LoadByCodeName(this.SchemaType, roleCodeName, SchemaObjectStatus.Normal, DateTime.MinValue) as SCRole;
            }

            return(role);
        }
Ejemplo n.º 5
0
        private static void InternalEnumMatrixUsers(SCRole role, SCRoleEnumMatrixUsersContext context)
        {
            SOARolePropertyRowCollection rows = SOARolePropertiesAdapter.Instance.LoadByRoleID(role.ID, null);

            IEnumerator <SOARolePropertyRow> enumerator = rows.GetEnumerator();

            role.InternalEnumMatrixRows(context, enumerator);
        }
Ejemplo n.º 6
0
 internal static PC.SCRole MakeCopy(PC.SCRole obj)
 {
     return(new PC.SCRole()
     {
         Creator = MCS.Library.Principal.DeluxeIdentity.CurrentRealUser,
         ID = UuidHelper.NewUuidString(),
         Name = obj.Name + "copy",
         DisplayName = obj.DisplayName + "copy",
         CodeName = Util.MakeNoConflictCodeName(obj.CodeName, "Roles")
     });
 }
Ejemplo n.º 7
0
        private static void InitAppRoles()
        {
            PC.SCApplication app = (PC.SCApplication)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { }, DateTime.MinValue, "OGU_ADMIN").First();

            PC.SCRole role = new PC.SCRole()
            {
                Name        = "系统管理员",
                CodeName    = "系统管理员",
                DisplayName = "系统管理员",
                Creator     = CastUser(Wangli),
                ID          = "32491E78-BE9D-4159-8F29-1D6D56BC3166",
                Status      = SchemaObjectStatus.Normal,
            };

            PC.SCRole role2 = new PC.SCRole()
            {
                Name        = "系统维护员",
                CodeName    = "系统维护员",
                DisplayName = "系统维护员",
                Creator     = CastUser(Wangli),
                ID          = "B7C4C54C-C241-4704-9079-230CE9F61B53",
                Status      = SchemaObjectStatus.Normal,
            };

            Facade.AddRole(role, app);

            Facade.AddRole(role2, app);

            app = (PC.SCApplication)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { }, DateTime.MinValue, "APP_ADMIN").First();


            Facade.AddRole(new SCRole()
            {
                Name        = "系统应用维护员",
                CodeName    = "SYSTEM_APP_MODIFYER",
                DisplayName = "系统应用维护员",
                Creator     = CastUser(Wangli),
                ID          = "476442f3-5336-918b-4c57-f7b5cd519f6c",
                Status      = SchemaObjectStatus.Normal,
            }, app);

            Facade.AddRole(new SCRole()
            {
                Name        = "系统总管理员",
                CodeName    = "SYSTEM_MAX_ADMINISTRATOR",
                DisplayName = "系统总管理员",
                Creator     = CastUser(Wangli),
                ID          = "cdcfc01f-316a-adc7-4bac-f4f111a6d270",
                Status      = SchemaObjectStatus.Normal,
            }, app);
        }
Ejemplo n.º 8
0
        private void EnumInternalRoleMatrixUsers(SCRoleEnumMatrixUsersContext context, string roleFullCodeName)
        {
            //防止嵌套后的死循环
            if (context.CalculatedRolesCodeNames.ContainsKey(roleFullCodeName) == false)
            {
                SCRole role = LoadRoleByFullCodeName(context, roleFullCodeName);

                context.CalculatedRolesCodeNames.Add(roleFullCodeName, roleFullCodeName);

                if (role != null)
                {
                    InternalEnumMatrixUsers(role, context);
                }
            }
        }
Ejemplo n.º 9
0
        private void ImportRolePermissions(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations executor, Dictionary <object, object> mappings, PC.SCPermission[] permissions, PC.SCRole[] roles, bool copyMode)
        {
            if (roles.Length > 0 && permissions.Length > 0 && objectSet.HasRelations)
            {
                foreach (var r in roles)
                {
                    PC.SCRole role2 = r;
                    if (mappings.ContainsKey(r))
                    {
                        role2 = (PC.SCRole)mappings[r];
                    }

                    context.AppendLogFormat("正在替 {0} 查找功能定义\r\n", role2.ToDescription());

                    foreach (var p in permissions)
                    {
                        PC.SCPermission permission2 = p;
                        if (mappings.ContainsKey(p))
                        {
                            permission2 = (PC.SCPermission)mappings[p];
                        }

                        var actual = PC.Adapters.SchemaRelationObjectAdapter.Instance.Load(role2.ID, permission2.ID);
                        var actualHasPermission = actual != null && actual.Status == SchemaObjectStatus.Normal;

                        var refHasPermission = (from rr in objectSet.Relations where rr.Status == SchemaObjectStatus.Normal && rr.ParentID == r.ID && rr.ID == p.ID && rr.ChildSchemaType == "Permissions" && rr.ParentSchemaType == "Roles" select rr).FirstOrDefault() != null;

                        if (refHasPermission == false && actualHasPermission)
                        {
                            context.AppendLogFormat("正在替角色 {0} 解除功能 {1}\r\n", role2.ToDescription(), permission2.ToDescription());
                            executor.DisjoinRoleAndPermission(role2, permission2);
                        }
                        else if (refHasPermission && actualHasPermission == false)
                        {
                            context.AppendLogFormat("正在替角色 {0} 指定功能 {1}\r\n", role2.ToDescription(), permission2.ToDescription());
                            executor.JoinRoleAndPermission(role2, permission2);
                        }
                    }
                }
            }
        }
Ejemplo n.º 10
0
        protected PC.SCRole CreateDefaultRole()
        {
            var app = (PC.SCApplication)PC.Adapters.SchemaObjectAdapter.Instance.Load(DefaultAppID);

            if (app == null || app.Status != SchemaObjectStatus.Normal)
            {
                app = this.CreateDefaultApp();
            }

            Debug.Assert(app.Status == SchemaObjectStatus.Normal);

            var role = new PC.SCRole()
            {
                ID          = DefaultRoleID,
                Name        = "测试角色" + DefaultRoleID,
                DisplayName = "测试角色(默认测试)",
                CodeName    = DefaultRoleID
            };

            Facade.AddRole(role, app);

            return(role);
        }
Ejemplo n.º 11
0
        private void ImportRoleConditions(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations exec, PC.SCRole roleRef, PC.SCRole roleActual)
        {
            var conditons = (from c in objectSet.Conditions where c.OwnerID == roleRef.ID select c).ToArray();

            var owner = new PC.Conditions.SCConditionOwner()
            {
                OwnerID = roleActual.ID,
                Type    = "Default"
            };

            foreach (var c in conditons)
            {
                owner.Conditions.Add(new PC.Conditions.SCCondition()
                {
                    Description = c.Description,
                    Condition   = c.Condition,
                    OwnerID     = roleActual.ID,
                    Type        = "Default"
                });
            }

            context.AppendLogFormat("正在替角色 {0} 导入角色条件\r\n", roleActual.DisplayName);
            PC.Adapters.SCConditionAdapter.Instance.UpdateConditions(owner);
        }
Ejemplo n.º 12
0
        private static void InitAppRoles()
        {
            PC.SCApplication app = (PC.SCApplication)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { }, DateTime.MinValue, "OGU_ADMIN").First();

            PC.SCRole role = new PC.SCRole()
            {
                Name = "系统管理员",
                CodeName = "系统管理员",
                DisplayName = "系统管理员",
                Creator = CastUser(Wangli),
                ID = "32491E78-BE9D-4159-8F29-1D6D56BC3166",
                Status = SchemaObjectStatus.Normal,
            };

            PC.SCRole role2 = new PC.SCRole()
            {
                Name = "系统维护员",
                CodeName = "系统维护员",
                DisplayName = "系统维护员",
                Creator = CastUser(Wangli),
                ID = "B7C4C54C-C241-4704-9079-230CE9F61B53",
                Status = SchemaObjectStatus.Normal,
            };

            Facade.AddRole(role, app);

            Facade.AddRole(role2, app);

            app = (PC.SCApplication)PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeName(c => { }, DateTime.MinValue, "APP_ADMIN").First();


            Facade.AddRole(new SCRole()
            {
                Name = "系统应用维护员",
                CodeName = "SYSTEM_APP_MODIFYER",
                DisplayName = "系统应用维护员",
                Creator = CastUser(Wangli),
                ID = "476442f3-5336-918b-4c57-f7b5cd519f6c",
                Status = SchemaObjectStatus.Normal,
            }, app);

            Facade.AddRole(new SCRole()
            {
                Name = "系统总管理员",
                CodeName = "SYSTEM_MAX_ADMINISTRATOR",
                DisplayName = "系统总管理员",
                Creator = CastUser(Wangli),
                ID = "cdcfc01f-316a-adc7-4bac-f4f111a6d270",
                Status = SchemaObjectStatus.Normal,
            }, app);
        }
Ejemplo n.º 13
0
        private void ImportRoleDefinitions(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations exec, int count, int allCount, PC.SCRole role, PC.SCRole role2)
        {
            context.SetStatus(count, allCount, "正在查找并添加角色功能定义");
            context.AppendLogFormat("正在替 {0} 查找角色功能定义\r\n", role2.ToDescription());
            var permissionIds = (from p in objectSet.Relations where p.ParentID == role.ID && p.ChildSchemaType == "Permissions" select p.ID).ToArray();

            var permissions = permissionIds.Length > 0 ? DbUtil.LoadObjects(permissionIds) : null;

            if (permissions != null)
            {
                foreach (PC.SCPermission p in permissions)
                {
                    var relation = PC.Adapters.SchemaRelationObjectAdapter.Instance.Load(role.ID, p.ID);
                    if (relation == null || relation.Status != SchemaObjectStatus.Normal)
                    {
                        string text = string.Format("正在替角色 {0} 指定功能 {1}\r\n", role.DisplayName ?? role.Name, p.DisplayName ?? p.Name);
                        context.SetStatus(count, allCount, text);
                        context.AppendLog(text);
                        exec.JoinRoleAndPermission(role, (PC.SCPermission)p);
                    }
                }
            }
        }
Ejemplo n.º 14
0
 private static void ImportRoleMembers(SCObjectSet objectSet, IImportContext context, PC.Executors.ISCObjectOperations exec, PC.SCRole roleRef, PC.SCRole roleActual)
 {
     foreach (var m in objectSet.Membership)
     {
         if (m.ContainerID == roleRef.ID)
         {
             var objSc = PC.Adapters.SchemaObjectAdapter.Instance.Load(m.ID) as PC.SCBase;
             if (objSc != null)
             {
                 context.AppendLogFormat("正在替角色 {0} 导入角色成员 {1}\r\n", roleActual.DisplayName, objSc.DisplayName);
                 exec.AddMemberToRole(objSc, roleActual);
             }
         }
     }
 }
Ejemplo n.º 15
0
 protected void CreateRole(PC.SCApplication app, PC.SCRole role)
 {
     this.CreateRoleWithMembers(app, role, null);
 }
Ejemplo n.º 16
0
        private void InnerInit(bool withWangli5)
        {
            var adminRole = ObjectSchemaSettings.GetConfig().GetAdminRole();

            if (adminRole != null)
            {
                string[] parts = adminRole.FullCodeName.Split(':');
                string   adminRoleID;
                if (parts.Length != 2)
                {
                    throw new FormatException("配置文件中的管理角色路径格式错误。");
                }

                try
                {
                    adminRoleID = adminRole.ID;                     // 有可能抛异常

                    var roleMembers = PC.Adapters.UserAndContainerSnapshotAdapter.Instance.LoadByContainerID(adminRoleID);

                    var wangli = (PC.SCUser)PC.Adapters.SchemaObjectAdapter.Instance.Load(Wangli.ID);

                    if (wangli == null)
                    {
                        var liucheng = this.CreateOU(new PC.SCOrganization()
                        {
                            ID          = "f53e880d-b191-4788-8477-b0ddaa6d3a57",
                            Name        = "流程管理部",
                            DisplayName = "流程管理部",
                            CodeName    = "f53e880d-b191-4788-8477-b0ddaa6d3a57"
                        },
                                                     this.CreateOU(new PC.SCOrganization()
                        {
                            ID          = "04865298-aba1-4129-b041-f42f38f3547f",
                            Name        = "集团总部",
                            DisplayName = "集团总部",
                            CodeName    = "04865298-aba1-4129-b041-f42f38f3547f"
                        },
                                                                   this.CreateOU(new PC.SCOrganization()
                        {
                            ID          = "efb29cac-5321-495b-844b-ed239a844ada",
                            Name        = "远洋地产",
                            DisplayName = "远洋地产",
                            CodeName    = "efb29cac-5321-495b-844b-ed239a844ada"
                        },
                                                                                 this.CreateOU(new PC.SCOrganization()
                        {
                            ID          = "85af29c7-9410-8d7e-4e49-924598e4e7d5",
                            Name        = "机构人员",
                            DisplayName = "机构人员",
                            CodeName    = "85af29c7-9410-8d7e-4e49-924598e4e7d5"
                        }, PC.SCOrganization.GetRoot()))));

                        Facade.AddUser(OguObjectGenerator1.Wangli, liucheng);

                        wangli = (PC.SCUser)PC.Adapters.SchemaObjectAdapter.Instance.Load(Wangli.ID);

                        PC.Adapters.UserPasswordAdapter.Instance.SetPassword(wangli.ID, PC.Adapters.UserPasswordAdapter.GetPasswordType(), PC.Adapters.UserPasswordAdapter.GetDefaultPassword());
                    }

                    if (withWangli5)
                    {
                        if (roleMembers.Count == 0 || roleMembers.ContainsKey(wangli.ID) == false || roleMembers[Wangli.ID].Status != SchemaObjectStatus.Normal)
                        {
                            PC.SCRole r = (PC.SCRole)PC.Adapters.SchemaObjectAdapter.Instance.Load(adminRoleID);
                            if (r == null || r.Status != SchemaObjectStatus.Normal)
                            {
                                throw new InvalidOperationException("管理角色已删除");
                            }

                            Facade.AddMemberToRole(wangli, r);
                        }
                    }
                    else
                    {
                        // 移除Wangli5
                        if (roleMembers.ContainsKey(wangli.ID))
                        {
                            PC.SCRole r = (PC.SCRole)PC.Adapters.SchemaObjectAdapter.Instance.Load(adminRoleID);
                            Facade.RemoveMemberFromRole(wangli, r);
                        }
                    }
                }
                catch (SystemSupportException)
                {
                    var apps = PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeNameAndSchema(new string[] { "Applications" }, new string[] { parts[0] }, true, false, DateTime.MinValue);
                    if (apps.Count == 0)
                    {
                        Facade.AddApplication(new PC.SCApplication()
                        {
                            ID          = UuidHelper.NewUuidString(),
                            Name        = "权限中心",
                            CodeName    = parts[0],
                            DisplayName = "权限中心",
                        });
                        apps = PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeNameAndSchema(new string[] { "Applications" }, new string[] { parts[0] }, true, false, DateTime.MinValue);
                    }

                    if (apps.Count != 1)
                    {
                        throw new System.IO.InvalidDataException(string.Format("不可以出现{0}个管理应用,只能有1个。", apps.Count));
                    }

                    var mainApp = (PC.SCApplication)apps[0];

                    var manageRoles = PC.Adapters.SchemaObjectAdapter.Instance.LoadByCodeNameAndSchema(new string[] { "Roles" }, new string[] { parts[1] }, true, false, DateTime.MinValue);

                    PC.SCRole mainRole = null;

                    if (manageRoles.Count > 0)
                    {
                        var appMembersRelations = PC.Adapters.SCMemberRelationAdapter.Instance.LoadByContainerID(mainApp.ID);

                        mainRole = (from a in appMembersRelations join PC.SCRole r in manageRoles on a.ID equals r.ID where a.SchemaType == "Roles" && a.Status == SchemaObjectStatus.Normal && r.Status == SchemaObjectStatus.Normal && ((PC.SCRole)r).CodeName == parts[1] select r).FirstOrDefault();
                    }

                    if (mainRole == null)
                    {
                        Facade.AddRole(new PC.SCRole()
                        {
                            ID          = UuidHelper.NewUuidString(),
                            Name        = "权限中心总管理员",
                            DisplayName = "权限中心总管理员",
                            CodeName    = parts[1]
                        }, mainApp);
                    }

                    //Thread.Sleep(200);
                    this.InnerInit(withWangli5);
                }

                this.SetCurrentPrincipal(Wangli);
            }
            else
            {
                throw new InvalidOperationException("本单元测试要求配置文件中正确配置了管理角色");
            }
        }
Ejemplo n.º 17
0
        protected void SetContainerMemberAndPermissions(PC.SchemaObjectBase container, PC.SCRole member, string[] permissions)
        {
            PC.Permissions.SCAclContainer cc = new PC.Permissions.SCAclContainer(container);
            if (permissions != null)
            {
                foreach (string permission in permissions)
                {
                    cc.Members.AddNotExistsItem(new PC.Permissions.SCAclItem(permission, member));
                }
            }

            var old = PC.Adapters.SCAclAdapter.Instance.LoadByContainerID(container.ID, DateTime.MinValue);

            if (old != null)
            {
                cc.Members.MergeChangedItems(old);
            }

            PC.Adapters.SCAclAdapter.Instance.Update(cc);
        }