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); } } } }
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); } } } } }
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); }
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); }
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); }
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") }); }
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); }
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); } } }
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); } } } } }
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); }
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); }
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); } } } }
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); } } } }
protected void CreateRole(PC.SCApplication app, PC.SCRole role) { this.CreateRoleWithMembers(app, role, null); }
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("本单元测试要求配置文件中正确配置了管理角色"); } }
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); }