/// <summary> /// Метод для конфигурации всех сервисов прилоежния. /// </summary> public static void ConfigureServices() { IUnityContainer container = UnityFactory.CreateContainer(); // Сервис аудита. AuditSetter.InitAuditService(BridgeToDS.GetDataService()); // Сервис тем оформления. ThemeService.Current = container.Resolve <IThemeService>(); // Настройки лукапа. BaseMasterEditorLookUp.ChangeLookUpSettings = FormUtils.ChangeLookUpSettings; // Менеджер расширенных ограничений. if (container.IsRegistered <IAdvLimitManager>()) { AdvLimitManager.Current = container.Resolve <IAdvLimitManager>(); } // Сервис настроек пользователя. if (container.IsRegistered <IUserSettingsService>()) { UserSettingsService.Current = container.Resolve <IUserSettingsService>(); } else { LogService.LogWarn("IUserSettingsService не сконфигурирован в Unity. Будет использована реализация по умолчанию."); } }
/// <summary> /// Конструктор формы /// </summary> public RoleE() : base("Sec_AgentL") { _languageDef = SQLWhereLanguageDef.LanguageDef; Function limitIsUser = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.BoolType, "IsUser"), true); LoadingCustomizationStruct lcsAllUsers = new LoadingCustomizationStruct(null); lcsAllUsers.LoadingTypes = new[] { typeof(Agent) }; lcsAllUsers.LimitFunction = limitIsUser; lcsAllUsers.View = Information.GetView("Sec_AgentL", typeof(Agent)); _allUsers = BridgeToDS.GetDataService().LoadObjects(lcsAllUsers).Cast <Agent>().ToList(); Function limitIsRole = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.BoolType, "IsRole"), true); LoadingCustomizationStruct lcsAllRoles = new LoadingCustomizationStruct(null); lcsAllRoles.LoadingTypes = new[] { typeof(Agent) }; lcsAllRoles.LimitFunction = limitIsRole; lcsAllRoles.View = Information.GetView("Sec_RolesL", typeof(Agent)); _allRoles = BridgeToDS.GetDataService().LoadObjects(lcsAllRoles).Cast <Agent>().ToList(); Function limitIsClass = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.BoolType, "IsClass"), true); LoadingCustomizationStruct lcsAllClasses = new LoadingCustomizationStruct(null); lcsAllClasses.LoadingTypes = new[] { typeof(Subject) }; lcsAllClasses.LimitFunction = limitIsClass; lcsAllClasses.View = Information.GetView("Sec_SubjectL", typeof(Subject)); _allClasses = BridgeToDS.GetDataService().LoadObjects(lcsAllClasses).Cast <Subject>().ToList(); }
private void GetParentRoles(List <LinkRole> roles, View view, List <LinkRole> parentRoles) { foreach (LinkRole role in roles) { Function limitParentRoles = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Agent"), role.Role.__PrimaryKey); LoadingCustomizationStruct lcsParentRoles = new LoadingCustomizationStruct(null); lcsParentRoles.LoadingTypes = new Type[] { typeof(LinkRole) }; lcsParentRoles.LimitFunction = limitParentRoles; lcsParentRoles.View = view; List <LinkRole> linkRoles = BridgeToDS.GetDataService().LoadObjects(lcsParentRoles).Cast <LinkRole>().ToList(); if (linkRoles.Count > 0) { GetParentRoles(linkRoles, view, parentRoles); } parentRoles.AddRange(linkRoles); } }
/// <summary> /// Вызывается самым последним в Page_Load /// </summary> protected override void Postload() { if (PK == null) { return; } Function limitByRole = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Role"), this.PK); LoadingCustomizationStruct lcsOwnUsers = new LoadingCustomizationStruct(null); lcsOwnUsers.LoadingTypes = new[] { typeof(LinkRole) }; lcsOwnUsers.LimitFunction = limitByRole; View usersView = Information.GetView("Sec_LinkRoleL", typeof(LinkRole)); lcsOwnUsers.View = usersView; List <LinkRole> roleOwnUsers = BridgeToDS.GetDataService().LoadObjects(lcsOwnUsers).Cast <LinkRole>().ToList(); if (IsPostBack) { #region Save Roles List <LinkRole> linkUsers = new List <LinkRole>(); foreach (Agent user in _allUsers) { string userKey = "User" + user.__PrimaryKey; if (Request.Form.AllKeys.Any(fk => fk.Contains(userKey))) { LinkRole linkUser = new LinkRole(); linkUser.Role = DataObject; linkUser.Agent = user; linkUsers.Add(linkUser); } } List <LinkRole> deletedUsers = new List <LinkRole>(); foreach (LinkRole ownUser in roleOwnUsers) { string ownId = ownUser.Agent.__PrimaryKey.ToString(); LinkRole singleOrDefault = linkUsers.SingleOrDefault(r => r.Agent.__PrimaryKey.ToString().Equals(ownId)); if (singleOrDefault != null) { linkUsers.Remove(singleOrDefault); } else { ownUser.SetStatus(ObjectStatus.Deleted); deletedUsers.Add(ownUser); } } roleOwnUsers = roleOwnUsers.Except(deletedUsers).Union(linkUsers).ToList(); linkUsers = linkUsers.Union(deletedUsers).ToList(); if (linkUsers.Count > 0) { DataObject[] dataObjects = linkUsers.Cast <DataObject>().ToArray(); BridgeToDS.GetDataService().UpdateObjects(ref dataObjects); } #endregion } GenerateUsersTable(roleOwnUsers); Function limitByAgent = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Agent"), this.PK); LoadingCustomizationStruct lcsParentRoles = new LoadingCustomizationStruct(null); lcsParentRoles.LoadingTypes = new[] { typeof(LinkRole) }; lcsParentRoles.LimitFunction = limitByAgent; View rolesView = Information.GetView("Sec_LinkRoleL", typeof(LinkRole)); lcsParentRoles.View = rolesView; List <LinkRole> parentRoles = BridgeToDS.GetDataService().LoadObjects(lcsParentRoles).Cast <LinkRole>().ToList(); Agent single = _allRoles.Single(r => r.__PrimaryKey.ToString().Equals(this.PK)); _allRoles.Remove(single); if (IsPostBack) { #region Save Roles List <LinkRole> linkRoles = new List <LinkRole>(); foreach (Agent role in _allRoles) { string roleKey = "Role" + role.__PrimaryKey; if (Request.Form.AllKeys.Any(fk => fk.Contains(roleKey))) { LinkRole linkRole = new LinkRole(); linkRole.Agent = DataObject; linkRole.Role = role; linkRoles.Add(linkRole); } } List <LinkRole> deletedRoles = new List <LinkRole>(); foreach (LinkRole ownRole in parentRoles) { string ownId = ownRole.Role.__PrimaryKey.ToString(); LinkRole singleOrDefault = linkRoles.SingleOrDefault(r => r.Role.__PrimaryKey.ToString().Equals(ownId)); if (singleOrDefault != null) { linkRoles.Remove(singleOrDefault); } else { ownRole.SetStatus(ObjectStatus.Deleted); deletedRoles.Add(ownRole); } } parentRoles = parentRoles.Except(deletedRoles).Union(linkRoles).ToList(); linkRoles = linkRoles.Union(deletedRoles).ToList(); if (linkRoles.Count > 0) { DataObject[] dataObjects = linkRoles.Cast <DataObject>().ToArray(); BridgeToDS.GetDataService().UpdateObjects(ref dataObjects); } #endregion } GenerateRolesTable(parentRoles); // Function limitByAgent = _languageDef.GetFunction(_languageDef.funcEQ, new VariableDef(_languageDef.GuidType, "Agent"), this.PK); LoadingCustomizationStruct lcsOwnClasses = new LoadingCustomizationStruct(null); lcsOwnClasses.LoadingTypes = new[] { typeof(Permition) }; lcsOwnClasses.LimitFunction = limitByAgent; View classesView = Information.GetView("Sec_PermitionE", typeof(Permition)); lcsOwnClasses.View = classesView; List <Permition> userOwnClasses = BridgeToDS.GetDataService().LoadObjects(lcsOwnClasses).Cast <Permition>().ToList(); List <Permissions> permissions = new List <Permissions>(); foreach (Subject @class in _allClasses) { Permissions u2c = new Permissions(); u2c.ObjectId = @class.__PrimaryKey.ToString(); u2c.ObjectName = @class.Name; Permition firstOrDefault = userOwnClasses.FirstOrDefault(c => c.Subject.__PrimaryKey.ToString().Equals(u2c.ObjectId)); if (firstOrDefault != null && firstOrDefault.Access != null) { for (int i = 0; i < firstOrDefault.Access.Count; i++) { Access access = firstOrDefault.Access[i]; switch (access.TypeAccess) { case tTypeAccess.Delete: u2c.Delete = true; break; case tTypeAccess.Execute: u2c.Execute = true; break; case tTypeAccess.Full: u2c.Full = true; break; case tTypeAccess.Insert: u2c.Insert = true; break; case tTypeAccess.Read: u2c.Read = true; break; case tTypeAccess.Update: u2c.Update = true; break; } } } permissions.Add(u2c); } if (IsPostBack) { #region Save Class Permissions List <Permissions> list = new List <Permissions>(); foreach (Subject @class in _allClasses) { string fullKey = "Full" + @class.__PrimaryKey; string readKey = "Read" + @class.__PrimaryKey; string insertKey = "Insert" + @class.__PrimaryKey; string updateKey = "Update" + @class.__PrimaryKey; string deleteKey = "Delete" + @class.__PrimaryKey; string executeKey = "Execute" + @class.__PrimaryKey; bool isClassPermissionsSet = false; Permissions permission = new Permissions(); permission.ObjectId = @class.__PrimaryKey.ToString(); permission.ObjectName = @class.Name; if (Request.Form.AllKeys.Any(fk => fk.Contains(fullKey))) { permission.Full = true; isClassPermissionsSet = true; } if (Request.Form.AllKeys.Any(fk => fk.Contains(readKey))) { permission.Read = true; isClassPermissionsSet = true; } if (Request.Form.AllKeys.Any(fk => fk.Contains(insertKey))) { permission.Insert = true; isClassPermissionsSet = true; } if (Request.Form.AllKeys.Any(fk => fk.Contains(updateKey))) { permission.Update = true; isClassPermissionsSet = true; } if (Request.Form.AllKeys.Any(fk => fk.Contains(deleteKey))) { permission.Delete = true; isClassPermissionsSet = true; } if (Request.Form.AllKeys.Any(fk => fk.Contains(executeKey))) { permission.Execute = true; isClassPermissionsSet = true; } if (isClassPermissionsSet) { list.Add(permission); } } List <Permissions> updatedPermissions = new List <Permissions>(); List <Permissions> deletedPermissions = new List <Permissions>(); foreach (Permissions p in permissions) { Permissions singleOrDefault = list.SingleOrDefault(c => c.ObjectId.Equals(p.ObjectId)); if (singleOrDefault != null) { updatedPermissions.Add(singleOrDefault); list.Remove(singleOrDefault); } else { deletedPermissions.Add(p); } } List <Permissions> addedPermissions = list.Union(updatedPermissions).ToList(); List <DataObject> deletedObjects = new List <DataObject>(); List <DataObject> addedObjects = new List <DataObject>(); foreach (Permition p in userOwnClasses) { string classId = p.Subject.__PrimaryKey.ToString(); if (updatedPermissions.Any(x => x.ObjectId.Equals(classId)) || deletedPermissions.Any(x => x.ObjectId.Equals(classId))) { p.SetStatus(ObjectStatus.Deleted); deletedObjects.Add(p); } } foreach (Permissions p in addedPermissions) { Permition permission = new Permition(); permission.Agent = DataObject; permission.Subject = new Subject(); permission.Subject.SetExistObjectPrimaryKey(p.ObjectId); permission.Access = new DetailArrayOfAccess(permission); if (p.Delete) { permission.Access.Add(new Access() { TypeAccess = tTypeAccess.Delete }); } if (p.Execute) { permission.Access.Add(new Access() { TypeAccess = tTypeAccess.Execute }); } if (p.Full) { permission.Access.Add(new Access() { TypeAccess = tTypeAccess.Full }); } if (p.Insert) { permission.Access.Add(new Access() { TypeAccess = tTypeAccess.Insert }); } if (p.Read) { permission.Access.Add(new Access() { TypeAccess = tTypeAccess.Read }); } if (p.Update) { permission.Access.Add(new Access() { TypeAccess = tTypeAccess.Update }); } addedObjects.Add(permission); } DataObject[] dataObjects = deletedObjects.Union(addedObjects).ToArray(); if (dataObjects.Length > 0) { BridgeToDS.GetDataService().UpdateObjects(ref dataObjects); } #endregion } GenerateClassesTable(permissions); }
private void ServiceInit() { AuditSetter.InitAuditService(BridgeToDS.GetDataService()); // Инициализация сервиса аудита }