From 3893ebdb1903f451c0c8aac98204dddc66fe1373 Mon Sep 17 00:00:00 2001 From: kotcheshir73 Date: Sat, 27 Mar 2021 23:50:29 +0400 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20=D1=81=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20+=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=B7=D0=BE=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...327194001_ChangeSecurityFields.Designer.cs | 217 ++ .../20210327194001_ChangeSecurityFields.cs | 66 + .../DatabaseContextModelSnapshot.cs | 18 +- .../DatabaseCore/Models/Security/Access.cs | 2 +- .../Common/DatabaseCore/SecurityManager.cs | 28 +- ...tractGenerticControlEntityList.Designer.cs | 330 +++ .../AbstractGenerticControlEntityList.cs | 333 +++ .../AbstractGenerticControlEntityList.resx | 60 + .../ControlViewEntityList.Designer.cs | 45 + .../Controls/ControlViewEntityList.cs | 68 + .../Controls/ControlViewEntityList.resx | 60 + .../Common/DesktopTools/DesktopTools.csproj | 27 + .../ControlViewEntityListConfiguration.cs | 41 + .../Properties/Resources.Designer.cs | 173 ++ .../DesktopTools/Properties/Resources.resx | 154 ++ .../Common/DesktopTools/Resources/Add.png | Bin 0 -> 1497 bytes .../Common/DesktopTools/Resources/Clear.png | Bin 0 -> 3906 bytes .../Common/DesktopTools/Resources/Close.png | Bin 0 -> 412 bytes .../Common/DesktopTools/Resources/Del.png | Bin 0 -> 1395 bytes .../Common/DesktopTools/Resources/Down.jpg | Bin 0 -> 19246 bytes .../Common/DesktopTools/Resources/Left.jpg | Bin 0 -> 2668 bytes .../Common/DesktopTools/Resources/Ref.png | Bin 0 -> 5126 bytes .../Common/DesktopTools/Resources/Right.jpg | Bin 0 -> 2668 bytes .../Common/DesktopTools/Resources/Search.png | Bin 0 -> 1567 bytes .../Common/DesktopTools/Resources/Up.jpg | Bin 0 -> 2668 bytes .../Common/DesktopTools/Resources/Upd.png | Bin 0 -> 563 bytes ...cs => ViewModelOnListPropertyAttribute.cs} | 26 +- .../BusinessLogics/BusinessLogicCore.cs | 4 +- .../ModelTools/BusinessLogics/Mapper.cs | 2 +- .../BusinessLogics/ServiceProviderLoader.cs | 49 +- .../UnityContainerConfigurator.cs | 4 +- .../Common/ModelTools/Enums/AccessType.cs | 4 +- .../ModelTools/Interfaces/IEntityService.cs | 2 +- ...ensions.cs => IImplementationExtension.cs} | 2 +- .../ModelTools/Interfaces/ISecurityManager.cs | 10 +- .../Interfaces/IWindowDesktopExtension.cs | 17 + .../OperationResultModel.cs | 4 +- .../Models/SecurityManagerCheckAccessModel.cs | 39 + .../WindowDesktopExtensionControlModel.cs | 19 + .../ModelTools/ViewModels/ElementViewModel.cs | 2 +- DepartmentPortal/DepartmentPortal.sln | 16 +- .../DepartmentPortalDesctop.csproj | 1 + .../FormMain.Designer.cs | 56 +- .../DepartmentPortalDesctop/FormMain.cs | 130 +- .../DepartmentPortalDesctop/FormMain.resx | 6 + .../DepartmentPortalDesctop/Program.cs | 1 + .../Extensions/net5.0/DatabaseCore.dll | Bin 47616 -> 47616 bytes .../Extensions/net5.0/ModelTools.dll | Bin 19968 -> 19456 bytes .../net5.0/SecurityBusinessLogic.dll | Bin 19968 -> 19456 bytes .../net5.0/SecurityImplementation.dll | Bin 22016 -> 22016 bytes .../net5.0/DatabaseCore.dll | Bin 0 -> 51200 bytes .../net5.0/ModelTools.dll | Bin 0 -> 21504 bytes .../net5.0/SecurityBusinessLogic.dll | Bin 0 -> 19456 bytes .../net5.0/SecurityImplementation.deps.json | 1782 +++++++++++++++++ .../net5.0/SecurityImplementation.dll | Bin 0 -> 22016 bytes .../net5.0/ref/SecurityImplementation.dll | Bin 0 -> 7168 bytes .../BindingModels/AccessBindingModels.cs | 5 + .../BusinessLogics/AccessBusinessLogic.cs | 2 +- .../EnviromentSettingBusinessLogic.cs | 2 +- .../BusinessLogics/RoleBusinessLogic.cs | 2 +- .../BusinessLogics/UserBusinessLogic.cs | 2 +- .../ViewModels/AccessViewModels.cs | 9 +- .../ViewModels/EnviromentSettingViewModels.cs | 4 +- .../ViewModels/RoleViewModels.cs | 4 +- .../ViewModels/UserViewModels.cs | 15 +- .../Implementations/AccessService.cs | 11 +- .../EnviromentSettingService.cs | 2 +- .../Implementations/RoleService.cs | 2 +- .../Implementations/UserService.cs | 2 +- .../SecurityImplementation.csproj | 2 +- .../SecurityLoaderExtensions.cs | 2 +- .../Controls/AccessesControl.Designer.cs | 33 + .../Controls/AccessesControl.cs | 43 + .../Controls/AccessesControl.resx | 120 ++ .../EnviromentSettingControl.Designer.cs | 33 + .../Controls/EnviromentSettingControl.cs | 37 + .../Controls/EnviromentSettingControl.resx | 120 ++ .../Controls/RolesControl.Designer.cs | 33 + .../Controls/RolesControl.cs | 37 + .../Controls/RolesControl.resx | 120 ++ .../Controls/UsersControl.Designer.cs | 33 + .../Controls/UsersControl.cs | 42 + .../Controls/UsersControl.resx | 120 ++ .../SecurityWindowDesktopExtension.cs | 59 + .../SecurityWindowsDesktop.csproj | 24 + .../net5.0-windows/DesktopTools.dll | Bin 0 -> 67584 bytes .../net5.0-windows/ModelTools.dll | Bin 0 -> 21504 bytes .../net5.0-windows/SecurityBusinessLogic.dll | Bin 0 -> 19456 bytes .../SecurityWindowsDesktop.deps.json | 96 + .../net5.0-windows/SecurityWindowsDesktop.dll | Bin 0 -> 11264 bytes .../ref/SecurityWindowsDesktop.dll | Bin 0 -> 6656 bytes 91 files changed, 4697 insertions(+), 117 deletions(-) create mode 100644 DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.Designer.cs create mode 100644 DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.Designer.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.resx create mode 100644 DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.Designer.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.resx create mode 100644 DepartmentPortal/Common/DesktopTools/DesktopTools.csproj create mode 100644 DepartmentPortal/Common/DesktopTools/Models/ControlViewEntityListConfiguration.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Properties/Resources.Designer.cs create mode 100644 DepartmentPortal/Common/DesktopTools/Properties/Resources.resx create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Add.png create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Clear.png create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Close.png create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Del.png create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Down.jpg create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Left.jpg create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Ref.png create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Right.jpg create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Search.png create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Up.jpg create mode 100644 DepartmentPortal/Common/DesktopTools/Resources/Upd.png rename DepartmentPortal/Common/ModelTools/Attributes/{ViewModelPropertyAttribute.cs => ViewModelOnListPropertyAttribute.cs} (50%) rename DepartmentPortal/Common/ModelTools/Interfaces/{ILoaderExtensions.cs => IImplementationExtension.cs} (86%) create mode 100644 DepartmentPortal/Common/ModelTools/Interfaces/IWindowDesktopExtension.cs rename DepartmentPortal/Common/ModelTools/{OperationResultModels => Models}/OperationResultModel.cs (97%) create mode 100644 DepartmentPortal/Common/ModelTools/Models/SecurityManagerCheckAccessModel.cs create mode 100644 DepartmentPortal/Common/ModelTools/Models/WindowDesktopExtensionControlModel.cs create mode 100644 DepartmentPortal/ImplementationExtensions/net5.0/DatabaseCore.dll create mode 100644 DepartmentPortal/ImplementationExtensions/net5.0/ModelTools.dll create mode 100644 DepartmentPortal/ImplementationExtensions/net5.0/SecurityBusinessLogic.dll create mode 100644 DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.deps.json create mode 100644 DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.dll create mode 100644 DepartmentPortal/ImplementationExtensions/net5.0/ref/SecurityImplementation.dll create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.Designer.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.resx create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.Designer.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.resx create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.Designer.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.resx create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.Designer.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.resx create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs create mode 100644 DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowsDesktop.csproj create mode 100644 DepartmentPortal/WindowDestopExtensions/net5.0-windows/DesktopTools.dll create mode 100644 DepartmentPortal/WindowDestopExtensions/net5.0-windows/ModelTools.dll create mode 100644 DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityBusinessLogic.dll create mode 100644 DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.deps.json create mode 100644 DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.dll create mode 100644 DepartmentPortal/WindowDestopExtensions/net5.0-windows/ref/SecurityWindowsDesktop.dll diff --git a/DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.Designer.cs b/DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.Designer.cs new file mode 100644 index 0000000..755f5e4 --- /dev/null +++ b/DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.Designer.cs @@ -0,0 +1,217 @@ +// +using System; +using DatabaseCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace DatabaseCore.Migrations +{ + [DbContext(typeof(DatabaseContext))] + [Migration("20210327194001_ChangeSecurityFields")] + partial class ChangeSecurityFields + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.4") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("DatabaseCore.Models.Security.Access", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AccessOperation") + .HasColumnType("int"); + + b.Property("AccessType") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateDelete") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("Accesses"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.EnviromentSetting", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(max)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("EnviromentSettings"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.Role", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateDelete") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("RoleName") + .HasColumnType("nvarchar(max)"); + + b.Property("RolePriority") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Roles"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.User", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Avatar") + .HasColumnType("varbinary(max)"); + + b.Property("CountAttempt") + .HasColumnType("int"); + + b.Property("DateBanned") + .HasColumnType("datetime2"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateDelete") + .HasColumnType("datetime2"); + + b.Property("DateLastVisit") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsBanned") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LecturerId") + .HasColumnType("uniqueidentifier"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("StudentId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.UserRole", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateDelete") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("UserRoles"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.Access", b => + { + b.HasOne("DatabaseCore.Models.Security.Role", "Role") + .WithMany("Access") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.UserRole", b => + { + b.HasOne("DatabaseCore.Models.Security.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DatabaseCore.Models.Security.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.Role", b => + { + b.Navigation("Access"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("DatabaseCore.Models.Security.User", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.cs b/DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.cs new file mode 100644 index 0000000..4b37ee3 --- /dev/null +++ b/DepartmentPortal/Common/DatabaseCore/Migrations/20210327194001_ChangeSecurityFields.cs @@ -0,0 +1,66 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DatabaseCore.Migrations +{ + public partial class ChangeSecurityFields : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DateLocked", + table: "Users"); + + migrationBuilder.RenameColumn( + name: "Operation", + table: "Accesses", + newName: "AccessOperation"); + + migrationBuilder.AddColumn( + name: "DateCreate", + table: "UserRoles", + type: "datetime2", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + migrationBuilder.AddColumn( + name: "DateDelete", + table: "UserRoles", + type: "datetime2", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "UserRoles", + type: "bit", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DateCreate", + table: "UserRoles"); + + migrationBuilder.DropColumn( + name: "DateDelete", + table: "UserRoles"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "UserRoles"); + + migrationBuilder.RenameColumn( + name: "AccessOperation", + table: "Accesses", + newName: "Operation"); + + migrationBuilder.AddColumn( + name: "DateLocked", + table: "Users", + type: "datetime2", + nullable: true); + } + } +} diff --git a/DepartmentPortal/Common/DatabaseCore/Migrations/DatabaseContextModelSnapshot.cs b/DepartmentPortal/Common/DatabaseCore/Migrations/DatabaseContextModelSnapshot.cs index fe854ca..00acc4a 100644 --- a/DepartmentPortal/Common/DatabaseCore/Migrations/DatabaseContextModelSnapshot.cs +++ b/DepartmentPortal/Common/DatabaseCore/Migrations/DatabaseContextModelSnapshot.cs @@ -24,6 +24,9 @@ namespace DatabaseCore.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); + b.Property("AccessOperation") + .HasColumnType("int"); + b.Property("AccessType") .HasColumnType("int"); @@ -36,9 +39,6 @@ namespace DatabaseCore.Migrations b.Property("IsDeleted") .HasColumnType("bit"); - b.Property("Operation") - .HasColumnType("int"); - b.Property("RoleId") .HasColumnType("uniqueidentifier"); @@ -113,9 +113,6 @@ namespace DatabaseCore.Migrations b.Property("DateLastVisit") .HasColumnType("datetime2"); - b.Property("DateLocked") - .HasColumnType("datetime2"); - b.Property("EmployeeId") .HasColumnType("uniqueidentifier"); @@ -147,6 +144,15 @@ namespace DatabaseCore.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateDelete") + .HasColumnType("datetime2"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + b.Property("RoleId") .HasColumnType("uniqueidentifier"); diff --git a/DepartmentPortal/Common/DatabaseCore/Models/Security/Access.cs b/DepartmentPortal/Common/DatabaseCore/Models/Security/Access.cs index c4a0b5c..aa77122 100644 --- a/DepartmentPortal/Common/DatabaseCore/Models/Security/Access.cs +++ b/DepartmentPortal/Common/DatabaseCore/Models/Security/Access.cs @@ -22,7 +22,7 @@ namespace DatabaseCore.Models.Security [Required] [DataMember] [MapConfiguration("Operation")] - public AccessOperation Operation { get; set; } + public AccessOperation AccessOperation { get; set; } [Required] [DataMember] diff --git a/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs b/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs index 2ed76c5..e31ad93 100644 --- a/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs +++ b/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs @@ -1,7 +1,7 @@ using DatabaseCore.Models.Security; -using ModelTools.BindingModels; using ModelTools.Enums; using ModelTools.Interfaces; +using ModelTools.Models; using SecurityBusinessLogic.BusinessLogics; using System.Linq; @@ -11,52 +11,52 @@ namespace DatabaseCore { public string ErrorMessage { get; set; } - public bool CheckAccess(AccessBindingModel model, AccessOperation operation, AccessType type, string entity) + public bool CheckAccess(SecurityManagerCheckAccessModel model) { using var context = DatabaseManager.GetContext; Access access; if (model != null) { // простой просмотр возможен - if (model.SkipCheck && type == AccessType.SimpleView) + if (model.Model.SkipCheck && model.Type == AccessType.SimpleView) { return true; } // если не указан идентификатор пользователя, то смотрим, может он авторизован - if (!model.UserId.HasValue && UserManager.GetInstance.User != null) + if (!model.Model.UserId.HasValue && UserManager.GetInstance.User != null) { - model.UserId = UserManager.GetInstance.UserId; + model.Model.UserId = UserManager.GetInstance.UserId; } - var roles = context.UserRoles.Where(x => x.UserId == model.UserId).Select(x => x.Role).OrderByDescending(x => x.RolePriority).ToList(); + var roles = context.UserRoles.Where(x => x.UserId == model.Model.UserId).Select(x => x.Role).OrderByDescending(x => x.RolePriority).ToList(); if (roles == null) { ErrorMessage = $"Не верный пользователь"; return false; } - access = context.Accesses.FirstOrDefault(a => a.Operation == operation && roles.Contains(a.Role)); + access = context.Accesses.FirstOrDefault(a => a.AccessOperation == model.Operation && roles.Contains(a.Role)); } else { - access = context.Accesses.FirstOrDefault(a => a.Operation == operation && UserManager.GetInstance.Roles.Contains(a.RoleId)); + access = context.Accesses.FirstOrDefault(a => a.AccessOperation == model.Operation && UserManager.GetInstance.Roles.Contains(a.RoleId)); } if (access != null) { - if (access.AccessType >= type) return true; + if (access.AccessType >= model.Type) return true; } - switch (type) + switch (model.Type) { case AccessType.FullView: - ErrorMessage = $"Нет доступа на чтение данных по сущности '{entity}'"; + ErrorMessage = $"Нет доступа на чтение данных по сущности '{model.Entity}'"; return false; case AccessType.Change: - ErrorMessage = $"Нет доступа на изменение данных по сущности '{entity}'"; + ErrorMessage = $"Нет доступа на изменение данных по сущности '{model.Entity}'"; return false; case AccessType.Delete: - ErrorMessage = $"Нет доступа на удаление данных по сущности '{entity}'"; + ErrorMessage = $"Нет доступа на удаление данных по сущности '{model.Entity}'"; return false; default: - ErrorMessage = $"Нет доступа по сущности '{entity}'"; + ErrorMessage = $"Нет доступа по сущности '{model.Entity}'"; return false; } } diff --git a/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.Designer.cs b/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.Designer.cs new file mode 100644 index 0000000..1e33f0d --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.Designer.cs @@ -0,0 +1,330 @@ +namespace DesktopTools.Controls +{ + partial class AbstractGenerticControlEntityList + { + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.toolStripMenu = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonAdd = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonUpd = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonDel = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonSearch = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButtonRef = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripSplitButtonActions = new System.Windows.Forms.ToolStripSplitButton(); + this.toolStripButtonClose = new System.Windows.Forms.ToolStripButton(); + this.panelSearch = new System.Windows.Forms.Panel(); + this.buttonCancelSearch = new System.Windows.Forms.Button(); + this.buttonSearch = new System.Windows.Forms.Button(); + this.toolStripFooter = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonPrev = new System.Windows.Forms.ToolStripButton(); + this.toolStripLabelPage = new System.Windows.Forms.ToolStripLabel(); + this.toolStripTextBoxPage = new System.Windows.Forms.ToolStripTextBox(); + this.toolStripLabelCountPages = new System.Windows.Forms.ToolStripLabel(); + this.toolStripButtonNext = new System.Windows.Forms.ToolStripButton(); + this.toolStripLabelPageName = new System.Windows.Forms.ToolStripLabel(); + this.toolStripComboBoxPageNames = new System.Windows.Forms.ToolStripComboBox(); + this.contextMenuStripDataGrid = new System.Windows.Forms.ContextMenuStrip(this.components); + this.dataGridViewList = new System.Windows.Forms.DataGridView(); + this.toolStripMenu.SuspendLayout(); + this.panelSearch.SuspendLayout(); + this.toolStripFooter.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewList)).BeginInit(); + this.SuspendLayout(); + // + // toolStripMenu + // + this.toolStripMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButtonAdd, + this.toolStripSeparator1, + this.toolStripButtonUpd, + this.toolStripSeparator2, + this.toolStripButtonDel, + this.toolStripSeparator3, + this.toolStripButtonSearch, + this.toolStripSeparator4, + this.toolStripButtonRef, + this.toolStripSeparator5, + this.toolStripSplitButtonActions, + this.toolStripButtonClose}); + this.toolStripMenu.Location = new System.Drawing.Point(0, 0); + this.toolStripMenu.Name = "toolStripMenu"; + this.toolStripMenu.Size = new System.Drawing.Size(1000, 25); + this.toolStripMenu.TabIndex = 0; + this.toolStripMenu.Text = "Главное меню"; + // + // toolStripButtonAdd + // + this.toolStripButtonAdd.Image = global::DesktopTools.Properties.Resources.Add; + this.toolStripButtonAdd.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonAdd.Name = "toolStripButtonAdd"; + this.toolStripButtonAdd.Size = new System.Drawing.Size(79, 22); + this.toolStripButtonAdd.Text = "Добавить"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // toolStripButtonUpd + // + this.toolStripButtonUpd.Image = global::DesktopTools.Properties.Resources.Upd; + this.toolStripButtonUpd.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonUpd.Name = "toolStripButtonUpd"; + this.toolStripButtonUpd.Size = new System.Drawing.Size(81, 22); + this.toolStripButtonUpd.Text = "Изменить"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // toolStripButtonDel + // + this.toolStripButtonDel.Image = global::DesktopTools.Properties.Resources.Del; + this.toolStripButtonDel.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonDel.Name = "toolStripButtonDel"; + this.toolStripButtonDel.Size = new System.Drawing.Size(71, 22); + this.toolStripButtonDel.Text = "Удалить"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25); + // + // toolStripButtonSearch + // + this.toolStripButtonSearch.Image = global::DesktopTools.Properties.Resources.Search; + this.toolStripButtonSearch.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonSearch.Name = "toolStripButtonSearch"; + this.toolStripButtonSearch.Size = new System.Drawing.Size(62, 22); + this.toolStripButtonSearch.Text = "Поиск"; + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25); + // + // toolStripButtonRef + // + this.toolStripButtonRef.Image = global::DesktopTools.Properties.Resources.Ref; + this.toolStripButtonRef.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonRef.Name = "toolStripButtonRef"; + this.toolStripButtonRef.Size = new System.Drawing.Size(81, 22); + this.toolStripButtonRef.Text = "Обновить"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); + // + // toolStripSplitButtonActions + // + this.toolStripSplitButtonActions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.toolStripSplitButtonActions.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripSplitButtonActions.Name = "toolStripSplitButtonActions"; + this.toolStripSplitButtonActions.Size = new System.Drawing.Size(74, 22); + this.toolStripSplitButtonActions.Text = "Действия"; + // + // toolStripButtonClose + // + this.toolStripButtonClose.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripButtonClose.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonClose.Image = global::DesktopTools.Properties.Resources.Close; + this.toolStripButtonClose.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonClose.Name = "toolStripButtonClose"; + this.toolStripButtonClose.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonClose.Text = "Закрть"; + // + // panelSearch + // + this.panelSearch.Controls.Add(this.buttonCancelSearch); + this.panelSearch.Controls.Add(this.buttonSearch); + this.panelSearch.Dock = System.Windows.Forms.DockStyle.Top; + this.panelSearch.Location = new System.Drawing.Point(0, 25); + this.panelSearch.Name = "panelSearch"; + this.panelSearch.Size = new System.Drawing.Size(1000, 87); + this.panelSearch.TabIndex = 1; + this.panelSearch.Visible = false; + // + // buttonCancelSearch + // + this.buttonCancelSearch.Location = new System.Drawing.Point(11, 47); + this.buttonCancelSearch.Name = "buttonCancelSearch"; + this.buttonCancelSearch.Size = new System.Drawing.Size(89, 24); + this.buttonCancelSearch.TabIndex = 1; + this.buttonCancelSearch.Text = "Скрыть"; + this.buttonCancelSearch.UseVisualStyleBackColor = true; + // + // buttonSearch + // + this.buttonSearch.Location = new System.Drawing.Point(11, 13); + this.buttonSearch.Name = "buttonSearch"; + this.buttonSearch.Size = new System.Drawing.Size(89, 24); + this.buttonSearch.TabIndex = 0; + this.buttonSearch.Text = "Запуск"; + this.buttonSearch.UseVisualStyleBackColor = true; + // + // toolStripFooter + // + this.toolStripFooter.Dock = System.Windows.Forms.DockStyle.Bottom; + this.toolStripFooter.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButtonPrev, + this.toolStripLabelPage, + this.toolStripTextBoxPage, + this.toolStripLabelCountPages, + this.toolStripButtonNext, + this.toolStripLabelPageName, + this.toolStripComboBoxPageNames}); + this.toolStripFooter.Location = new System.Drawing.Point(0, 775); + this.toolStripFooter.Name = "toolStripFooter"; + this.toolStripFooter.Size = new System.Drawing.Size(1000, 25); + this.toolStripFooter.TabIndex = 2; + this.toolStripFooter.Text = "Пагинация"; + // + // toolStripButtonPrev + // + this.toolStripButtonPrev.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonPrev.Image = global::DesktopTools.Properties.Resources.Left; + this.toolStripButtonPrev.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonPrev.Name = "toolStripButtonPrev"; + this.toolStripButtonPrev.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonPrev.Text = "Назад"; + // + // toolStripLabelPage + // + this.toolStripLabelPage.Name = "toolStripLabelPage"; + this.toolStripLabelPage.Size = new System.Drawing.Size(60, 22); + this.toolStripLabelPage.Text = "Страница"; + // + // toolStripTextBoxPage + // + this.toolStripTextBoxPage.Name = "toolStripTextBoxPage"; + this.toolStripTextBoxPage.Size = new System.Drawing.Size(30, 25); + this.toolStripTextBoxPage.Text = "1"; + // + // toolStripLabelCountPages + // + this.toolStripLabelCountPages.Name = "toolStripLabelCountPages"; + this.toolStripLabelCountPages.Size = new System.Drawing.Size(28, 22); + this.toolStripLabelCountPages.Text = "из 0"; + // + // toolStripButtonNext + // + this.toolStripButtonNext.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonNext.Image = global::DesktopTools.Properties.Resources.Right; + this.toolStripButtonNext.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonNext.Name = "toolStripButtonNext"; + this.toolStripButtonNext.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonNext.Text = "Вперед"; + // + // toolStripLabelPageName + // + this.toolStripLabelPageName.Name = "toolStripLabelPageName"; + this.toolStripLabelPageName.Size = new System.Drawing.Size(62, 22); + this.toolStripLabelPageName.Text = "Параметр"; + // + // toolStripComboBoxPageNames + // + this.toolStripComboBoxPageNames.Name = "toolStripComboBoxPageNames"; + this.toolStripComboBoxPageNames.Size = new System.Drawing.Size(200, 25); + this.toolStripComboBoxPageNames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + // + // contextMenuStripDataGrid + // + this.contextMenuStripDataGrid.Name = "contextMenuStripDataGrid"; + this.contextMenuStripDataGrid.Size = new System.Drawing.Size(61, 4); + // + // dataGridViewList + // + this.dataGridViewList.AllowUserToAddRows = false; + this.dataGridViewList.AllowUserToDeleteRows = false; + this.dataGridViewList.AllowUserToResizeRows = false; + this.dataGridViewList.BackgroundColor = System.Drawing.SystemColors.ControlLightLight; + this.dataGridViewList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridViewList.ContextMenuStrip = this.contextMenuStripDataGrid; + this.dataGridViewList.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridViewList.Location = new System.Drawing.Point(0, 112); + this.dataGridViewList.Name = "dataGridViewList"; + this.dataGridViewList.ReadOnly = true; + this.dataGridViewList.RowHeadersVisible = false; + this.dataGridViewList.RowTemplate.Height = 25; + this.dataGridViewList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridViewList.Size = new System.Drawing.Size(1000, 663); + this.dataGridViewList.TabIndex = 3; + // + // AbstractControlEntityList + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.dataGridViewList); + this.Controls.Add(this.toolStripFooter); + this.Controls.Add(this.panelSearch); + this.Controls.Add(this.toolStripMenu); + this.Name = "AbstractControlEntityList"; + this.Size = new System.Drawing.Size(1000, 800); + this.toolStripMenu.ResumeLayout(false); + this.toolStripMenu.PerformLayout(); + this.panelSearch.ResumeLayout(false); + this.toolStripFooter.ResumeLayout(false); + this.toolStripFooter.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewList)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStripMenu; + private System.Windows.Forms.ToolStripButton toolStripButtonAdd; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripButton toolStripButtonUpd; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton toolStripButtonDel; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripButton toolStripButtonSearch; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripButton toolStripButtonRef; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButtonActions; + private System.Windows.Forms.ToolStripButton toolStripButtonClose; + protected System.Windows.Forms.Panel panelSearch; + private System.Windows.Forms.Button buttonCancelSearch; + private System.Windows.Forms.Button buttonSearch; + private System.Windows.Forms.ToolStrip toolStripFooter; + private System.Windows.Forms.ToolStripButton toolStripButtonPrev; + private System.Windows.Forms.ToolStripLabel toolStripLabelPage; + private System.Windows.Forms.ToolStripTextBox toolStripTextBoxPage; + private System.Windows.Forms.ToolStripLabel toolStripLabelCountPages; + private System.Windows.Forms.ToolStripButton toolStripButtonNext; + private System.Windows.Forms.ToolStripLabel toolStripLabelPageName; + private System.Windows.Forms.ToolStripComboBox toolStripComboBoxPageNames; + private System.Windows.Forms.ContextMenuStrip contextMenuStripDataGrid; + private System.Windows.Forms.DataGridView dataGridViewList; + } +} diff --git a/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.cs b/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.cs new file mode 100644 index 0000000..f96e77a --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.cs @@ -0,0 +1,333 @@ +using DesktopTools.Models; +using ModelTools.Attributes; +using ModelTools.BindingModels; +using ModelTools.BusinessLogics; +using ModelTools.Extensions; +using ModelTools.ViewModels; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Windows.Forms; + +namespace DesktopTools.Controls +{ + public partial class AbstractGenerticControlEntityList : ControlViewEntityList + where G : GetBindingModel + where S : SetBindingModel + where L: ListViewModel + where E : ElementViewModel + where BL : BusinessLogicCore + { + /// + /// Объект бизнес-логики для получения данных + /// + protected BL _businessLogic; + + /// + /// Констркутор + /// + public AbstractGenerticControlEntityList() + { + InitializeComponent(); + InitEvents(); + } + + public override void Open() + { + base.Open(); + if (dataGridViewList.Columns.Count == 0) + { + Configurate(GetConfig()); + } + LoadList(); + } + + public override void Close() + { + base.Close(); + } + + /// + /// Конфигуратор контрола + /// + /// Настройки + private void Configurate(ControlViewEntityListConfiguration config) + { + if(config == null) + { + return; + } + // формирование таблицы на основе модели + dataGridViewList.Columns.Clear(); + var properties = typeof(E).GetProperties(); + foreach (var property in properties) + { + var attr = property.GetCustomAttribute(); + if (attr != null) + { + dataGridViewList.Columns.Add(new DataGridViewTextBoxColumn + { + HeaderText = attr.DisplayName, + Name = string.Format("Column{0}", property.Name), + ReadOnly = true, + Visible = !attr.IsHide, + Width = attr.ColumnWidth ?? 0, + AutoSizeMode = attr.ColumnWidth.HasValue ? DataGridViewAutoSizeColumnMode.None : DataGridViewAutoSizeColumnMode.Fill + }); + } + } + // настройка отображения основных кнопок + if (config.ShowToolStripButton != null) + { + foreach (ToolStripItem button in toolStripMenu.Items) + { + if (config.ShowToolStripButton.Contains(button.Name)) + { + button.Visible = false; + switch (button.Name) + { + case "toolStripButtonUpd": + toolStripSeparator1.Visible = false; + break; + case "toolStripButtonDel": + toolStripSeparator2.Visible = false; + break; + case "toolStripButtonRef": + toolStripSeparator3.Visible = false; + break; + case "toolStripButtonSearch": + toolStripSeparator4.Visible = false; + break; + } + } + } + } + // Загрузка подпунктов в контекстное меню и в пункт меню "Действие" + if (config.ControlOnMoveElem != null) + { + foreach (var elem in config.ControlOnMoveElem) + { + ToolStripMenuItem item = new() { Text = elem.Value.Title, Name = elem.Key }; + item.Click += elem.Value.Event; + toolStripSplitButtonActions.DropDownItems.Add(item); + contextMenuStripDataGrid.Items.Add(item); + } + } + // либо скрытие пункта, если не предусмотренно подпунктов + else + { + toolStripSplitButtonActions.Visible = false; + toolStripSeparator3.Visible = false; + } + + // Пагинация + if (config.PaginationOn) + { + if (config.CountElementsOnPage.HasValue) + { + toolStripTextBoxPage.Tag = config.CountElementsOnPage.Value; + } + // пагинация по названиям + if (config.PageNamesForPagination != null) + { + toolStripButtonPrev.Visible = toolStripLabelPage.Visible = toolStripTextBoxPage.Visible = toolStripLabelCountPages.Visible = + toolStripButtonNext.Visible = false; + toolStripComboBoxPageNames.Items.AddRange(config.PageNamesForPagination.ToArray()); + toolStripComboBoxPageNames.SelectedIndex = 0; + } + // пагинация по страницам + else + { + toolStripLabelPageName.Visible = toolStripComboBoxPageNames.Visible = false; + } + } + // нет пагинации + else + { + toolStripFooter.Visible = false; + } + } + + /// + /// Инициализация событий к контролам + /// + private void InitEvents() + { + toolStripButtonAdd.Click += (object sender, EventArgs e) => { CallAddElementEvent(); }; + toolStripButtonUpd.Click += (object sender, EventArgs e) => { CallUpdElementEvent(); }; + toolStripButtonDel.Click += (object sender, EventArgs e) => { CallDelElementEvent(); }; + toolStripButtonSearch.Click += (object sender, EventArgs e) => { panelSearch.Visible = !panelSearch.Visible; }; + toolStripButtonRef.Click += (object sender, EventArgs e) => { LoadList(); }; + toolStripButtonClose.Click += (object sender, EventArgs e) => { Close(); }; + + buttonSearch.Click += (object sender, EventArgs e) => { LoadList(); }; + buttonCancelSearch.Click += (object sender, EventArgs e) => { panelSearch.Visible = false; }; + + dataGridViewList.KeyDown += (object sender, KeyEventArgs e) => + { + switch (e.KeyCode) + { + case Keys.Insert: + CallAddElementEvent(); + break; + case Keys.Enter: + CallUpdElementEvent(); + break; + case Keys.Delete: + CallDelElementEvent(); + break; + } + }; + dataGridViewList.CellDoubleClick += (object sender, DataGridViewCellEventArgs e) => + { + CallUpdElementEvent(); + }; + + toolStripButtonPrev.Click += (object sender, EventArgs e) => + { + if (int.TryParse(toolStripTextBoxPage.Text, out int page)) + { + toolStripTextBoxPage.Text = (page - 1).ToString(); + LoadList(); + } + }; + toolStripButtonNext.Click += (object sender, EventArgs e) => + { + if (int.TryParse(toolStripTextBoxPage.Text, out int page)) + { + toolStripTextBoxPage.Text = (page + 1).ToString(); + LoadList(); + } + }; + toolStripTextBoxPage.KeyDown += (object sender, KeyEventArgs e) => + { + if (e.KeyData == Keys.Enter) + { + LoadList(); + } + }; + + toolStripComboBoxPageNames.SelectedIndexChanged += (object sender, EventArgs e) => { LoadList(); }; + } + + /// + /// Вызов события загрузки данных на datagrid + /// + private void LoadList() + { + var cursor = Cursor.Current; + L data = null; + try + { + Cursor.Current = Cursors.WaitCursor; + // если включена пагинация + if (toolStripFooter.Visible) + { + // постраничная + if (toolStripTextBoxPage.Visible) + { + if (int.TryParse(toolStripTextBoxPage.Text, out int page) && int.TryParse(toolStripTextBoxPage.Tag.ToString(), out int count)) + { + data = GetDataWithPageNumber(page, count); + } + } + // поименная + else if (toolStripComboBoxPageNames.Visible) + { + var key = toolStripComboBoxPageNames.Text; + if (key.IsNotEmpty()) + { + data = GetDataWithPageName(key); + } + } + } + else + { + data = GetData(); + } + + if (data == null) + { + // TODO вывод сообщения об ощибок + return; + } + + toolStripLabelCountPages.Text = $"из {data.MaxCount}"; + FillDataOnGrid(data.List); + } + finally + { + Cursor.Current = cursor; + } + } + + /// + /// Заполнение таблицы + /// + /// + private void FillDataOnGrid(List data) + { + if (data == null) + { + return; + } + dataGridViewList.Rows.Clear(); + foreach (var elem in data) + { + var mas = new List(); + foreach (DataGridViewColumn column in dataGridViewList.Columns) + { + mas.Add(elem.GetType().GetProperty(column.Name["Column".Length..])?.GetValue(elem)); + } + + dataGridViewList.Rows.Add(mas.ToArray()); + } + } + + /// + /// Вызов события при добавлении элемента + /// + private void CallAddElementEvent() => AddElement(); + + /// + /// Вызов события при изменении элемента + /// + private void CallUpdElementEvent() + { + foreach (DataGridViewRow selected in dataGridViewList.SelectedRows) + { + var id = new Guid(selected.Cells[0].Value.ToString()); + UpdElement(id); + } + } + + /// + /// Вызов события при удалении элемента + /// + private void CallDelElementEvent() + { + if (MessageBox.Show("Удалить выбранные записи?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + foreach (DataGridViewRow selected in dataGridViewList.SelectedRows) + { + var id = new Guid(selected.Cells[0].Value.ToString()); + DelElement(id); + } + } + } + + protected virtual void AddElement() { } + + protected virtual void UpdElement(Guid id) { } + + protected virtual void DelElement(Guid id) { } + + protected virtual ControlViewEntityListConfiguration GetConfig() { return null; } + + protected virtual L GetData() { return null; } + + protected virtual L GetDataWithPageName(string key) { return null; } + + protected virtual L GetDataWithPageNumber(int page, int count) { return null; } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.resx b/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Controls/AbstractGenerticControlEntityList.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.Designer.cs b/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.Designer.cs new file mode 100644 index 0000000..61cf166 --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.Designer.cs @@ -0,0 +1,45 @@ + +namespace DesktopTools.Controls +{ + partial class ControlViewEntityList + { + /// + /// Обязательная переменная конструктора. + /// + protected System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ControlViewEntityList + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "ControlViewEntityList"; + this.Size = new System.Drawing.Size(1116, 747); + this.ResumeLayout(false); + } + + #endregion + } +} diff --git a/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.cs b/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.cs new file mode 100644 index 0000000..597e374 --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.cs @@ -0,0 +1,68 @@ +using ModelTools.Enums; +using System; +using System.Windows.Forms; + +namespace DesktopTools.Controls +{ + public partial class ControlViewEntityList : UserControl + { + /// + /// Событие, вызываемое при закрытии контрола + /// + protected event Action CloseEvent; + + /// + /// Событие, вызываемое при закрытии контрола + /// + public event Action CloseEventAdd { add { CloseEvent += value; } remove { CloseEvent -= value; } } + + /// + /// Открытие формы + /// + public virtual void Open() { } + + /// + /// Закрытие формы + /// + public virtual void Close() + { + CloseEvent?.Invoke(Id); + Dispose(); + } + + /// + /// Дубликат контрола + /// + /// + public virtual ControlViewEntityList Clone() { return null; } + + /// + /// Идентификатор контрола + /// + public Guid Id { get; protected set; } + + /// + /// Заголовок контрола + /// + public string Title { get; protected set; } + + /// + /// Порядок контрола в меню + /// + public int Order { get; protected set; } + + /// + /// Операция в системе + /// + public AccessOperation AccessOperation { get; protected set; } + + + /// + /// Констркутор + /// + public ControlViewEntityList() + { + InitializeComponent(); + } + } +} diff --git a/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.resx b/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Controls/ControlViewEntityList.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DepartmentPortal/Common/DesktopTools/DesktopTools.csproj b/DepartmentPortal/Common/DesktopTools/DesktopTools.csproj new file mode 100644 index 0000000..6af57c1 --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/DesktopTools.csproj @@ -0,0 +1,27 @@ + + + + net5.0-windows + true + + + + + + + + + True + True + Resources.resx + + + + + + PublicResXFileCodeGenerator + Resources.Designer.cs + + + + diff --git a/DepartmentPortal/Common/DesktopTools/Models/ControlViewEntityListConfiguration.cs b/DepartmentPortal/Common/DesktopTools/Models/ControlViewEntityListConfiguration.cs new file mode 100644 index 0000000..5d52330 --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Models/ControlViewEntityListConfiguration.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace DesktopTools.Models +{ + /// + /// Настройки для таблицы вывода списка записей сущности + /// + public class ControlViewEntityListConfiguration + { + /// + /// Тип класса, который будет выводится + /// + public Type EntityType { get; set; } + + /// + /// Список названий кнопок, которые надо скрыть + /// + public List ShowToolStripButton { get; set; } + + /// + /// Перечень действий для контектснго меню и выпадающего в верхнем меню пункта "Действия" + /// + public Dictionary ControlOnMoveElem { get; set; } = null; + + /// + /// Есть пагинация + /// + public bool PaginationOn { get; set; } = true; + + /// + /// Перечень значений для выбора при выводе пагинации по названиям + /// + public List PageNamesForPagination { get; set; } = null; + + /// + /// Количество записей на странице (для пагинации) + /// + public int? CountElementsOnPage { get; set; } = null; + } +} \ No newline at end of file diff --git a/DepartmentPortal/Common/DesktopTools/Properties/Resources.Designer.cs b/DepartmentPortal/Common/DesktopTools/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3e6b29a --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Properties/Resources.Designer.cs @@ -0,0 +1,173 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace DesktopTools.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DesktopTools.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Add { + get { + object obj = ResourceManager.GetObject("Add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Clear { + get { + object obj = ResourceManager.GetObject("Clear", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Close { + get { + object obj = ResourceManager.GetObject("Close", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Del { + get { + object obj = ResourceManager.GetObject("Del", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Down { + get { + object obj = ResourceManager.GetObject("Down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Left { + get { + object obj = ResourceManager.GetObject("Left", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Ref { + get { + object obj = ResourceManager.GetObject("Ref", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Right { + get { + object obj = ResourceManager.GetObject("Right", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Search { + get { + object obj = ResourceManager.GetObject("Search", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Up { + get { + object obj = ResourceManager.GetObject("Up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Upd { + get { + object obj = ResourceManager.GetObject("Upd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/DepartmentPortal/Common/DesktopTools/Properties/Resources.resx b/DepartmentPortal/Common/DesktopTools/Properties/Resources.resx new file mode 100644 index 0000000..7708092 --- /dev/null +++ b/DepartmentPortal/Common/DesktopTools/Properties/Resources.resx @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Clear.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Del.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Down.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Left.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Ref.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Right.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Search.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Up.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Upd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Add.png b/DepartmentPortal/Common/DesktopTools/Resources/Add.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a65a4aa216dc1c8c5659994d1c463303fe0dc8 GIT binary patch literal 1497 zcmV;~1t$85P)WfrC-&9;GD76-~Ehsudu%;~(N!6Alb~2M$?mdeS z_s-0n%#5*udf;U4x#v6I|98Lhoh9%;7Xe_5`AehU=MV7Q+oKjR0&D@U1=avPzR3)5 z0yqqO2po7}+iR*azQ1!*b8#V-21rgMLck6o#7nFChFLqfj=`RbSkci-TXY!!h4KP( zxf!NsPBJw;$;s2l(MCTF?0SCNtMdHLk$(n|oJc%m32V<4Yu0o9x|@lF%jBJ3D9JN8 zY96Ia0N7THh}}Uf)JJ>dLR>e>SCjks{`g_E(GRCnne;gWBqtK%y^t%iQ>P|(r&F0nmjp;oB*upa){WhI)h4F1Utn+> zgqzFPf)E4|gc$0&na{pGz_C-4b&+TQNKPak?CxCo#@3B@Go9TJ!uVfaFWe#k1azw} zi~)>bsOuKqJNP~`^QV*PRAx^DKyo5s3t`E7N47KLe2u|v5U&Uyojt?!e6~(}u(OLx zx>q)W_z;2+z0n(acmJChqeJObMhPJZ1$>NNw(3f<@<$w1!m@l>;|Yt3Mc(6fp;=jW;u z*Jz~i9Jqlhjc%R*fHaG2eS6QB2R~c-iNW600GomUoBMkD$(3huwZc^jsk~oTDbJx& zNWZUD3EEV~)cMkiyz>Wr-F*O?focwHh{QB`twDfg`H5%XR4&VGvCvX9Sibvpx~|2LaA2$g{Y{2M`qiFB0W)xxslj9Ik6OvjK3m#$f6I3MLD%JP2TlvValI z0Tzp$OL4Vo0C3GhwZ8&z)^Sunp??8DH3A?tz+4buO1f6Ruw3u~D!X7j9Om)QuWE3- z`;JUq`;mQ#2Ag;|>@8b=H>_+*Mn(aS1pyA}a%iIt6|2dI4-vCN#BJZq--_poMQqz{ z5L^+Ddk=xF*p<>3rkadaDFpCM5a6Tof_%!v7EM8ugQ(?Eh?j6daqq#@0Q@Pi3JTzp zAi&r8{5+8ku)?At3Jnk~id4F_xZj~&gOkew90Y$SOs6sic#M1m>F-=p*LF3jr1$K< zYY7mrkxEu~Mz8Hv@)3Y1e9gM!*aD$UkA#S+o%z+v$kLH$`0~I@V*p1WW_(pObjj}|*h7-0faun45(6x41-!U*EI7`AJ@ zmQH0J3)(MrEq_tl=Bb6YA~K{Jmtm`Gd0-iaq|LHI97~Cp(y7eTi#7hvKPLABdrJ|A zLZpne)sjom0JgSSR*n*LA^_Xdsm$JHwslF^tfW(!w*WilL>^g@@0eVkZzo=gV!Jjd z?|j$VfCAgKiI<`*&$rW^>o^*7BBOwP&uu%KidP~2Dgu@A>D1c*y!ZL|df-lA1F#n8 z^nGN3Dc}(B@zz_Pth=$^zII!4@m9(FUzR@s<$#4+s#A?#00000NkvXXu0mjfh_S{h literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Clear.png b/DepartmentPortal/Common/DesktopTools/Resources/Clear.png new file mode 100644 index 0000000000000000000000000000000000000000..13a8f6b6fd61a520383bd9ea6aaa41af9609f553 GIT binary patch literal 3906 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 QB>(^b07*qoM6N<$f;f&(F8}}l literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Close.png b/DepartmentPortal/Common/DesktopTools/Resources/Close.png new file mode 100644 index 0000000000000000000000000000000000000000..d88c7a055642de864a7a7717223aa40c2ee98ee1 GIT binary patch literal 412 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 StR!8-3SQT!m!z{4{r?91ucht) literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Left.jpg b/DepartmentPortal/Common/DesktopTools/Resources/Left.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2751d9e2029452f04652233612015e10a239d24f GIT binary patch literal 2668 zcmbW1c|6qX9>;%U#yWO0QMMBbX()+~Wb9H0hm#yzSrXYMWsoLYQK-g}wGeX1p*hni z6b30|PqrD$jFIJ7njvGv%;84`{XXC4ujl(buh0AYd|qF045R_lXKd_j z00;yEc=HzkQUOZQTSJ;D4kVPO7yN^Ji{5vo~Q9(gbgaljy@jnOH0?3E}mjGobL=6y-fk0&- zU^}1+01!dG+Fil_3Wxw-qmZzOs2H4I@JbpGfIy)FFzBvoe)TQ>IRKLpl-+;STu9Ez zM_4T!p`VaZBBE|VY(+W`GBu9*UP}}e+as^Aci(}7np)b242~Nbo%qq%(#qP#_O#uZ zU(UIlcm37P-S3kB<$%B|LDwU&kx|h%Vs76_O1^t9B{ehaQFcylUVcGo*|YNBDk`5> zy(HDXdR?{Yx|qWBvs0~6eTR7lp`N!TY`PE9{S1Ywa;LTnXPKjzFt z`d%9p+oNGXKfu~W`v=*72bTDMk^K$!Z!QWT4u$YP4=Mwo0j`q^)uA+fKvDugTZs*lv4V~q!d2a!EH zb}V)-v#!M$1k$h#&Hd#IBhFJ3rlKdE>{_6i4#twf<%Dh!;2f@45g&QukiZPE$$MOQ z`nQ_uD*Tr33+qPD7m|wzvbe}vuDX<&isrWX&Z*(J&^YQ@Pfo?m(nYk*r>~NAF_~J? z_Z!}qzlaR=E^$qUUbC27S|(Gocw*)tAYROZ+A<#|(Wz);P?nowuX$Kl5hSR3?4CfC zIqJ2Aty9v*3j*7gbMaYhyDG6e*i_5h=Q(_@iS>-O`?0yQyv@U~P^r9uL(B7$mpY~h z9h0tYAbYK@zDxCc0P6WI*`aaYn!5 zl{kqV#y|zD0*A2hU*ALUtzM z_Km!$&%PO!?II^bs?%=V^aSpScpG)V3YVtIG!nYjk*${$p?W*!ClFYS8R_-&pcuQ` z%rCQ)o(tnT`?I~f+1SqZ?61W{$2Mghwhk9x?8SygolRhWq53y)JKbnWsHsHvFn)F-7(YA|!rRNX0qSx#9{wz#u3Y! z+Y)~+(cU(ZnYn??>BY`|Mg2+3L!PMW2XBMw3Z>HLBc)fDUcXVLda$F?*ah4ooGo3U z?EI*Y)APWG9g3LJ^J}9yE-JpY8L}N>2T=Db2}x+$Lvn2hMWu;=lVT}%TWQ`njuO>X zO3c!FKm2kvjBZtx+H^irvj8Xu0hm8$(vKb|A5Er95`#m1o(Fy9KCkesJ*%{CFBVcX zJXY9a0Z}`6zF1HSFyo};acCm@*1qxBi@(J(2}|v>4tXjCVbG&G&cnVXitsML=Z@7w5Q<_3zQs^ z51SS4j|n?>>PfwSz2)4IwoGFB)2mZH=$NLPJW=SjrDrtygF6VcfPkFC$P!i~x4p#S*W>ehRAGFed^@d8%CAq98Pzk ze~ie|gzC23q5#~-&&o^V(fjyvek&H)z>HV03kFOLILENr%?*)n(lg+KY0fDL`5qGW z)$z%vAX6VtAitL|r5Hllta-X>a$|T|y&30C*)l&=5P4}EsEr<@&mM2z7?=^ZC_c|a=eJJ$&pdM-k zQz2qEZ9){v=yN=8GH4CNf#WfpRmM#2at#9`9nEkY;0bK@) zJ%_Ton)526Xy$B=6$xIjwmW_GcBJ2ROf$`I*;;cZnRN`qr&EY#7Gxj-Wzjb`Z_SFl z8;%uvIwOZ_R?j>d0C}+Lmno6Kjx?ZLzpkIvRlvz$3k)rP#Gh$a zgOd%*$0dSohe`)`oXRJxHcdl}Vy+rD-+?mF3zKwYOz?;xNp zSVu2*iBr{ba8c7evZ;o}=~z9z41=SdmxhW~8gY0s-dFdK`_8 zmWv$iilhtuGj$0O+_N631C%Q~%|AfEV)R?OY`A=OGyv!?4-08;Lo4xPW;&(G| z_D<)JF}F~zQh3A5I_@wU9!Fbqq%iosOE?_yz{8${W<0Ry?^(w-VcyjpnVwqBcyc4n YKPoiDPzR>ssl8U3GeONy1;FvY0HkmDa{vGU literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Ref.png b/DepartmentPortal/Common/DesktopTools/Resources/Ref.png new file mode 100644 index 0000000000000000000000000000000000000000..bba907b69ad5176f663b2515801e4708bf3f3d2d GIT binary patch literal 5126 zcmV+h6#46kP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z2{TDVK~#9!q?c=qT~~F-fBSLHx#!+<@7$R?_INxqo{94?X@Z>?;ou?&q=Y~cry*&I zDz(VaFDVkms{DZ<_(qk2A~iusArcrXi73uXkq}6bw!%~@!9)q3#5Rtd*yEWy56_J6 z%-rXB?7jJLooidTFrr6VIyz@R)_<@6+Up^lbFAli@TF6C8e=|dGP5hovN4mH$Qr8= z0_~|xX|JJuHLbNiqLe=L+@6V7*0ZnpQvmLN?!>+{N%!^#>U}%L`hy#XA}0EB4COT? zPXMr%Iu=?PQ)@9N7n@AZ)#H`K{!aVe!58k^`uLv(;IDsl{Pr|S9vv@-J3qEk2GUsDBTFa=m>>tb>)+u+D>O52HCs2kyKV_ttv85mx^aI{LZ+U)l zd0Kh;+b`a~^|3z*;L`_>expC99{$YEu}ZNJ^6L47nX4!U_+Y-pC(0c%FXV}7pHLf0 zxs1UuV>Gf{Q&bdHj+s@D1FtPDug31XFFkPW*Dl{fUjFf^AN+QI$&(N7xphmWA$$(K z+h(PmV63}Bd<+ltt?=neLSHe$%SRXs#zAHTnT5naD-$HnF%((;?v@ReqAwo)%uDa= zzp4d3b>O$Rr=89-5AD8wEcHWPTS^%Z5_T6m{Aj7vTQKUUJXonSRPZSj3WQ;Z(wcLt z9nRF6%ym-MB=~`2V_s3x8c-yeX0~Q|adLiIdHz4V{J_@30Q$X+<7WHOkKMF+EcJ36 zSxA@&Qts$$v#sp$!-X!$50_eeaxkF~<|z~kgmVzEdVhG?x3qI(s!)`S1oH<^c4|!%vlUUJHe1$_viBbyR_X)$0 z?HfznHjpE4V7V!1C5|(zmeFz)WJ$UgK>cFy?mKmsd}(BSRL`_vgJ-yVC}l&bYi6xA z&%NEoIdBfDEjY4}azhcyIfayx|DNvfgX2vWnkl|;^yef}c4aX1(9UwaW>||Q_1IC) zX;xP2<)`1O9Z@59eD158%Y|KWp+YBf+)_&T&_+oVMFc^>nKjGL&UShLoP&A_hi5Y) zkugzHOfF^o=ed|;7Yrws6RgSDT2eg_!v#&PnQ`ob#ac+MAQXvSYp01$+nrr%(*U(r zh5*JxgYSoUo`;l@U(dBL<`09FG4Ry!lsA`GDF>=I=Ug40J(-YYhI_7y@H`Kt6t|Cs z{A#XFwFR}dp&~s@+T5knc6%&U0oH+*Fj^43MF2+^lB)uE@A;ou2V5Dbng)J)Hf17e za`SK(#AwOqrUA{ldI~@y61q@nuVrBm_Z# zl#;FeKGrn47O)bVrdqo!!x}>%HNJwCR5HXRqJ8${pn7l zj!QGNa#Y(e-^#G2Yqo6zK6hUm5NOe*0k94}Ig;_A4cQ-c#BF`Hmn#5HFD1P(o3wDq zX(_aSq*be7vJ53Hs|Ma!%1DjDT8ET^J=f*=+>IW?1+W+CDFyK54`{x)L!h`ifLk{> zwAM)3&H9t`T>zedtkb|abwmyB{`+=kt@e>N$9$kUlQ=eM*b-@^5J)MxVZh^> zqNAuYjI~_fC-{rukei0{+%_zDt(vkLb4A2_cn7_#IkRRs@S8O*v@B&WV`Xu+V@2>a z`MZC=_m$MhlPoR~)Dw)b%sa>P^D%EMwJ{exUTekn%>}-2Yl&}tyuiKN@&tZBE|=q` zkrGesDe;jJafJn>lsyalpr{^3_7fbjDNmu6<;feS5Kt4)k> zOtv$=f40RhXB(J{*T~bFFqb2WB8tT#xm9?K$z$xs-!PR;boeCd!JWwm`j=zVX(--tqVq6_E(?kG%cv z%(J)l6-LJtRLeP}*32cAgQx2JVyel`N{;sr=D2wdTK0*7@p>7g+6BxGaPZ6$A@SxN#^Tuq}?AIJwlZ>YJyYxaYB} zR>f1_|J%pfnfmUVM^7yW=j-h3WP~eiOq$|shA}BFOR!mjOn*omcP!c&(k|34d(vCkjcZ{y~dw{II8-7-EzT??um!&>4X zb(q-k#9f1Y=hqD;s|nTuLUzw11eJo%#Gp@q0MqBDId*D#S_JuTpMCQF$JX7NjeX&T z+il!L7sduO1 zrF#0h%ten(J$3)#KdU(%*?VZ8i<^5R&u$wT-jEyKG{}a5BIRP9eCPp!Rwrep5wp0w z#{9w})w#t^GnFSrP&hb!;GxI=U)^yJ$md_U(`E5zNjtk-+8!hAL@tXpfY3pPmum<= oKaCEK2roEPJ@7Z{YR`W^0Gwtx#@xv`#Q*>R07*qoM6N<$g71v-&j0`b literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Right.jpg b/DepartmentPortal/Common/DesktopTools/Resources/Right.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98f4e4ed36fdc4ab2f1c40ec273e988b88328610 GIT binary patch literal 2668 zcmbW2cU03^7RP@fAprs;fq+tjQWX)xATSmpNQBP9XFU=p%nchBrO``7N?ci&&{zIX5E``$fI{6WkDkVhTy zjsOS*0{kQc5Ho=z09ZqK@p`0ha**y zC}p&Yii$j9+jdp-b|th5dg~AnSh5EqEh{Z8i&lUup#NtRw*e>_AP~?3gLVQ^C=eJ0 z5_bU@002o#s@*F1Uj~wr)Ch&i$jZSb0gXsN3IqmALBLy8OQI7c>i`5Lt+WGc3srXa zhwY3)n^W>CWOVK7+EqM;xq3gGzjQ-ZPIcRMHFbRhL!({0E%sSjS^v2Ih`ocOlQaJ4 z$y2A#oIU616%ZH{OuP^hdO12KHZK0k)uiN<)U@=BOltn^g2JNWlF|ncE32w&9{uv` zllq3nCi>InXC0kg-7kAyz3v?uef#eH*oX0nSvF_xkNJgV5C|9o+u{OA#YrX@1(Du?g(}&)!~CO^cbZdV&~|whb?vgcKX`Ce z&R-gqQ`NJW)#q)Y{e$ek1H18mk^KesZ>|YI9t@IP9vB7SfG#m`!&Z1Dzx}?&*fnH4 zMZKGL?{B|7EV0}_X(XBp4ERxpNX2G~!WHsI80unxRf&;_L5vrzQ@LWGdq&1~{SfX{ zvrD&GPjc$Axz#T~z=G!Li7RZzX&Wh_*J!IX$&fpfW6`4k{pG?F=Z9r`-Mi9Hz;;ly zu!pr%9MEpC-Wl}s1G6hk!Mau0fR^rBql+p1Q%iH0_lI`TctrCc>y@+Cpz)k3U(dBC zivi)Ub>Se-UFN-B^izNOG&ERgan_w@agLc+pf-2iQrkQf!`CzH`CJC$kNNUV*p7w6 zG;Nm`mhb|m-dXpXGaa@Xl-(`AUxXD-4P0VyJ>Dd%7cGtoj>RW%Fv&XwD!H`SBDV7b z=^by+@2HfwT#~X)?NmBfV$Hse3jzn<^CfdJ?7*eRZ*fJh+h`*& zn+lD68Z-!Sa*c>JXVDJ#B+qd^*wlhuHoTk&XKXZi< zwlcoXTrc3uvR$Fi97MnI5^4CSMc~)1*~+L%+X)Q=OC4h1&D_QfF(3vYWWFGVB?h$k zMXa<864Q!74HNC1o|VHZEE;D$zSI&2#a0WkAX1u^*L92}K8gP=hDFon=d;Ke_Jtn4 zE++GLA}^+B8^5A#L#i;JDrL0H>zGnI)j~xVRO$QDhzvi^Dr?F+<-R|b% zb~Am0MZLpu6pw|yXoOEj#v0y&_EJ&{nuYC|wb3a&CGwN4re}6mx;0<$) zc?ed}Z;ZwsA$pkP&l1Q8aTV=s9RFx_SbS4NeN%x3DT^Tr>P&yfbzRwej+LD$aM_d_ z6F7^34jSJO)48O*(#u0+(~m^`(WZq=+eaC!HbP-%g6h}K3JA6)6# z+=&XAU}Wj4S9N#yLA)bu_89=@>fGdtZqqfLTUwWZ%Q&tlE~^wu;X2v#6ZC7VtJpYX zsB9wQ?ysvML*5H99a>DPQ!w&|t$dF4pT?sMRzaEE*RmAG6W^k}jk}cN?{5;2%!yXq z@KSZIUUDE7cGccs>87<52+F`&6h}&WuL?sK=1-|ra>Gw<Oa2kmnzo|cI)jT z`dcTY`e6z5rY7D*$E~g#)*QFY%yMbKPd-ud8WHw4-6V}py*6DIe)rfkBG=#8aRWmf z@$+xQw(JhnBZgRq6z3W*()hbqmK3&iU?}S|iqY_thWDhCnDHu?xQX}QFGcBesj}pfFNxFQ57?AzB23Ev2 zRSSO+(NnxQW@C4;OEWdZ9NYOwH&c*6tmqjjA6?q
Uv6vWMrf`U1?w_yrA%Mla? z>oK{(o-Er6X9^Du5xpbAy87nuTFn!FPYA7Ml@U`Nlx)d0IzNn^li{apQNJ*+%x%MTynRzp$nOR zcPf+|NM+sKTtXwuW9LdmYQEK(Mxb|apF@w~~SV%ZEOKzj+l(k{NTIHs$Wk4p?=Pn}}JuqY-C@O-+^}Yh>^< z2kW4DgRW-|4m$v3@%UB#GKXEXSj&k-#&cYUHs8eri88K!H_f#$Qa`}J2CVux%$wL> zENqOv&vq%auZNeeiUIx}Qz5dmXNGH==;Xkk;?g;m<78L_6 zXDgeu>Qb>pP|k7yRay7g=k@3lt+NunK8k^)0a6@yY;hAKsuJ!J18@zz&kXN0|NO*^ z>zG7{n;E!7V)5egrGW^gjo{I~T&vi%$yHE=K#tr#i$mjxH&uM%5$g?H#R~Roiv!Jz z`xL^QMjs3d-K!?;zuAOaUA??vS?~O00~t=JEB4r>*0p+(e3=nIW3I7gglKSEetZ^d zrOOn-=eX80*I(7@U5NZLFmhaz99m!EG0*J3V1V5it|@-xX|;DdPYiI~B>z)S8-c&8 zCdKy+n@))qxp-#|O@wS3{w@aW#=hKAirQ8Xo0QbGHca!f+Nw6vL`yn`#2xR$+3IWzZUZ%vXgE$GrgR5_exe!Ttv8~ TF+}^PU8@fYCz&OgfO!1xb}!#^ literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Search.png b/DepartmentPortal/Common/DesktopTools/Resources/Search.png new file mode 100644 index 0000000000000000000000000000000000000000..f4099aa4a149018fa0f1bf697678bfa9c5bb62fa GIT binary patch literal 1567 zcmV+)2H^RLP)R9J<*mrZOG$rXUVs_O1(2IQHs2ixOeiLqJM!owz(xPT(z z6G@Ob_F;3|z3t|lpG|TiN_L|hqb0ZGfD{gWGlC>HpAZsAV+Sh`1XydBu{|D-y@T!P z>A%Wh#)HjbW`eXl>8Yywsj9wuUGKeWp|$29aa}h9d<6Ui_z)NdeBe3o82ATp-Eo|a z11ISs;&lM7>!yKUn5Ox8KA&fBaFD*fJ`#xpaUA1$9^2d7R4Nrpr4m69d;$FFZ9u*S z;JWT-Qp&H!#>N;M8$$>|6h%Z)gw`4%1VRX;lqjXpTJ!YjQx+E&iK6Idj^kW?YXH}E zf1OMwe}DGuSrUl^K@d={*I8RzqgJcYXfyygbm$QM{rzOKSyHJKrfJe_Ho1529y>cb zzi}Mr5C1oS>$)G?w*A-h=g$+zG0kR^M~@y6Mll1~qomUPBoYE&}YZyv$ z>eML`i3CzgZr{F*=Xswvj`O#k0bJKjNhvqaojZqN80_rqP%IXC?|Wn9Mvft+KuL)Z z0syTwQ5+M;n&t9yo_+n4si`TF$s}PIa_7z+qA1EZjD_&mY4y6bZ}3vJ5PCCnx(& z)4Xx|^l6k*EG#TAl*==m%VQV@rfFar3PUNBQYa;nQX<=j5d?>lhmlh9Z0T!8Mn*Vt za`?VaqtQSJ$w>Y^l#&>RYAt?%?%I@UjS)i9Xf*JB zpIj~ntsK(z6Z|NZN?{lV<#L&$gF^@*FqFbj5~XBk=SsG9&pSg&45bi4aCC5pa=DCQ z7^G4ufFJh)@B_=Tuq=yewMshEj}!taTe03!ffVg_Uw^M%kk0f|tybBc5BPpJ00S7( zT4Pxjp66lPb}QK+I!UM1rxOLB5&BiTz_x8X&%?4T+TlIaiwBxv7G-PeC<7Xs?_Z^&dagkiXww&!~R_}A9f7M|yk%jH-p zFJl@;Ye!K`6vgdg6cfd5-SaMtVl-eH1}o(POErEab0&sm}V}p9VPBxpx_nVYT zOBn4+7laYv0UCs@3TY}ux%3R*_sM3n)a!LNHZ}mRcLi`9rxu3cm!(n(tu=*0frk$s zP_0%l4Fy0H$AnQt5QGFlNEk&#aSVWID5}*84<7u7LZN`xno_Am7=~Xuj#KN!0|0-l z)oPSVC6dV`Q&UsS&lM>>e@4PGky7p(BxvP;gk@5C{*3v#Vy770y?d8xwF)rUZE@IN zjz6_5>*|>^XBZe5V0(L;g@pxd+a@=XC!5W7PPo@-uwJXNTrS~x9)&`I!-o%3EEZW? zTjTQO%iOqe1K=-?<9yZ=KpWz>rfL4JP$-biW)VWLzP`@t>MHB&>v*1rloH#v$z(DN z4Gl3cFo4#YVzEfITIJHEOKfg#l1`_&b?X+6S&@vccpYt54< zPgq=B1GFJBz|WOZpAQcYcP^!-X|^IG2zc@0 z1(iyLm6a8uDEfj{+Wq9@$&);O{Fs|JZ*u(jaUMQ=_(q7=0=xq9Q(9H+Lm<~SEd&3i z73Y87y$!prdlmTf+O=!gwoNjb>1o~9*Vh$dW@ZL?@HB5Pv$M0JUa#YM z9y>cbEG;cDF)@K{+W`A^Z1g&*>$*JyIF7^Y?5vocp6)ER3(@w3rtOLE!~?t1izmL5 zGw`as=}f#6fL9>^CMG7ha^;G6X8^kpgM))qDivmDXJ7v1yi2`s;ey`#{6F_laf6_& Ropvanrh*og9 zf-DNwVpO1rSi+7dr~zfiEFef5FaeAoWclvLy`A2f``2BbbI#0}Iq!Ss`Mqa>h9Ewm zwbRST3qT+cKnUCbXcX8Es2~t4{ZAoPktrxrIQksC4xqGEb-uQDSJT~d6m1f(xA}ZQDaO>} zQH%awuGq}s*r^NZ*wqGKtufqSZeeM)k?2Tr+VZXQ_8p#H6mOrM-|gFfAmHGk!=cAd zgoQ^$o;;n9n3SB7dM4vyW>$7iZrx_13WS$V~syOmYzZsnkJ0leD1FqTZtAdCtbgnj7rWYwDA*ub zLHh^Ue+G8pe|b0XfCdr)A0AR0AOi~dTC8PRI@XfiLjWx~@^$gDEy@mF1eb

qEE8fz~}mW zf!{WE?EUEM+Ej{e9cc9R^XRAexRCia*7t|jqz!JZaTOJihv$^9t&0M*=L+~ab}z`g z$ov~*aRjA>GkjBK(LrA4hzEm=N%ixwoW~?bc4orxpr~(l-eHQjbeiHE`{WyxxHs3j zWzB7T5d?&?LD!Ow1Mj!q;7QMedjzsi8sjnZY^8Cc#;(3C}D^=wbUc8pf#tpn`U#D-2wr|^j7qp!yg9>Ic>j%HUHj(t z4iqEax*RgkPIk>It&UhuI84qXHs%yh_hxyDflo1=w$EL41 z-it=jidztH?taW=^Kp$neVNG-p|`OW?aFicCPf8@{|f}v5#$C=6Q44ax*((LFg5F$QLo~Puq6LRw%nFw6u9IRJZxk**!nd34{2o5(wc=hc|-Xvrz83o zQo`B`Lw+3OLV)-n9<5KUHjRJ6cgM$s~-=Vv*d=_;y7uT zvRgv!^4qR7pfIcDH`yX4GfEIdN|X^BX+JL2E01tr-F$#;ad9~2yU8o+b7O0oZl7FL z5ai_XrnZ;t$t4DQ|3Xx3YaO?#jQh@R-qW0{QR>e!VLga0s3Zgt%cmMO?HId z;+k*{Ei7um8_`?ig)#V@vIF-Z0OL6OiXrsF&Q!;48~K&s+?^V0YP_@7wkSYtI-~}f zcqUt91()ff++R`bvOkee9_ep(&SsdsnVWw2*0Gwfn?aFy6~*h0Ej=8cc|AGOYw~i^ z{ZU%yQSXXy-R>48W41IOe&}bwxd~yBsCpt!D`kTE zM)@xBgd+FMvRyvW(r_!sK6F0FbINAN4~2CJ#X{f09W}Tc^RR1cJGoX{7f2~O?yg`vf~rgZVPp7noKX-ha;GCp_g?{cl{wv*xdyGD5#I{ zkI+j?77vP)1jQXWTt}RdPY_SCA3Qd~qYjoq04tY#F8rEk?o@A#&Qe(a%Y3J#g|T@= zsSHbR5s>xB;Vk{26uh)nysA{#P2Acba@35X^p|nvd+vCEXRQjPcHC9UY- zN7wdRt!bbCfqt43${t!$;W&`$CIc3^Cb4yr<^RH=W z;L?Ih$Aa9ewp@G}moxd}q2|!D*CsDM?{`+*(yc;&4)Ua1lW}zZJauFOuHAX-1ZJQg uNS3aB{Cc$!{MnLO$fAH*A+n! zAcPQGueQDU#XK?`GWZ-q?Cld5=UIeB-~#{;uf3$(?Ggk5y|Fi;`;O7CJDG=`0lw8|{_ET~zD@J3FSF{GUnr{L4zP33tctYS~aD(l} zvq)kV@C3kd90hRm@+a!myA&%s#^CWElK=JB>j!npYFMtmFxvnC002ovPDHLkV1n*L B{;B`~ literal 0 HcmV?d00001 diff --git a/DepartmentPortal/Common/ModelTools/Attributes/ViewModelPropertyAttribute.cs b/DepartmentPortal/Common/ModelTools/Attributes/ViewModelOnListPropertyAttribute.cs similarity index 50% rename from DepartmentPortal/Common/ModelTools/Attributes/ViewModelPropertyAttribute.cs rename to DepartmentPortal/Common/ModelTools/Attributes/ViewModelOnListPropertyAttribute.cs index a8358fb..2c48936 100644 --- a/DepartmentPortal/Common/ModelTools/Attributes/ViewModelPropertyAttribute.cs +++ b/DepartmentPortal/Common/ModelTools/Attributes/ViewModelOnListPropertyAttribute.cs @@ -5,19 +5,9 @@ namespace ModelTools.Attributes ///

/// Настройка отображения элемента в контролах /// - [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)] - public class ViewModelPropertyAttribute : Attribute + [AttributeUsage(AttributeTargets.Property)] + public class ViewModelOnListPropertyAttribute : Attribute { - /// - /// Используется при выводе списка - /// - public bool UseOnList { get; set; } - - /// - /// Используется при выводе элемента - /// - public bool UseOnElement { get; set; } - /// /// Название на форме /// @@ -37,14 +27,10 @@ namespace ModelTools.Attributes /// Настройка отображения элемента в контролах /// /// Название на форме - /// Используется при выводе списка - /// Используется при выводе элемента /// Скрывать или нет - public ViewModelPropertyAttribute(string displayName, bool useOnList, bool useOnElement, bool isHide = false) + public ViewModelOnListPropertyAttribute(string displayName, bool isHide = false) { DisplayName = displayName; - UseOnList = useOnList; - UseOnElement = useOnElement; ColumnWidth = null; IsHide = isHide; } @@ -53,14 +39,10 @@ namespace ModelTools.Attributes /// Конструктор /// /// Название на форме - /// Используется при выводе списка - /// Используется при выводе элемента /// Ширина колонки - public ViewModelPropertyAttribute(string displayName, bool useOnList, bool useOnElement, int columnWidth) + public ViewModelOnListPropertyAttribute(string displayName, int columnWidth) { DisplayName = displayName; - UseOnList = useOnList; - UseOnElement = useOnElement; ColumnWidth = columnWidth; IsHide = false; } diff --git a/DepartmentPortal/Common/ModelTools/BusinessLogics/BusinessLogicCore.cs b/DepartmentPortal/Common/ModelTools/BusinessLogics/BusinessLogicCore.cs index f6adbd0..935401f 100644 --- a/DepartmentPortal/Common/ModelTools/BusinessLogics/BusinessLogicCore.cs +++ b/DepartmentPortal/Common/ModelTools/BusinessLogics/BusinessLogicCore.cs @@ -1,7 +1,7 @@ using ModelTools.BindingModels; using ModelTools.Enums; using ModelTools.Interfaces; -using ModelTools.OperationResultModels; +using ModelTools.Models; using ModelTools.ViewModels; using System; using System.Collections.Generic; @@ -51,7 +51,7 @@ namespace ModelTools.BusinessLogics /// protected bool NoAccess(AccessBindingModel model, AccessType type) { - if (Security.CheckAccess(model, _serviceOperation, type, _entity)) + if (Security.CheckAccess(new SecurityManagerCheckAccessModel(model, _serviceOperation, type, _entity))) { return false; } diff --git a/DepartmentPortal/Common/ModelTools/BusinessLogics/Mapper.cs b/DepartmentPortal/Common/ModelTools/BusinessLogics/Mapper.cs index b576561..109b791 100644 --- a/DepartmentPortal/Common/ModelTools/BusinessLogics/Mapper.cs +++ b/DepartmentPortal/Common/ModelTools/BusinessLogics/Mapper.cs @@ -65,7 +65,7 @@ namespace ModelTools.BusinessLogics var bindingProperty = value.GetType().GetProperty(prop); if (bindingProperty != null) { - value = bindingProperty.GetValue(obj); + value = bindingProperty.GetValue(value); if (value is null) { break; diff --git a/DepartmentPortal/Common/ModelTools/BusinessLogics/ServiceProviderLoader.cs b/DepartmentPortal/Common/ModelTools/BusinessLogics/ServiceProviderLoader.cs index 9386353..6e096ab 100644 --- a/DepartmentPortal/Common/ModelTools/BusinessLogics/ServiceProviderLoader.cs +++ b/DepartmentPortal/Common/ModelTools/BusinessLogics/ServiceProviderLoader.cs @@ -16,7 +16,9 @@ namespace ModelTools.BusinessLogics { private static readonly string _configFileName = "DepartmentPortal.config"; - private static readonly string _pathToLoaderExt = "..\\..\\..\\..\\Extensions\\"; + private static readonly string _pathToImplementationExt = "..\\..\\..\\..\\ImplementationExtensions\\"; + + private static readonly string _pathToWindowDestopExt = "..\\..\\..\\..\\WindowDestopExtensions\\"; /// /// Получение данных с файла настроек @@ -39,15 +41,15 @@ namespace ModelTools.BusinessLogics } /// - /// Загрузка всех классов-реализаций ILoaderExtensions + /// Загрузка всех классов-реализаций IImplementationExtension /// /// - public static List GetLoaderExtensions() + public static List GetImplementationExtensions() { - var list = new List(); - if(Directory.Exists(_pathToLoaderExt)) + var list = new List(); + if(Directory.Exists(_pathToImplementationExt)) { - var files = Directory.GetFiles(_pathToLoaderExt, "*.dll", SearchOption.AllDirectories); + var files = Directory.GetFiles(_pathToImplementationExt, "*.dll", SearchOption.AllDirectories); var loadedFiles = new List(); foreach(var file in files.Distinct()) { @@ -58,9 +60,40 @@ namespace ModelTools.BusinessLogics Assembly asm = Assembly.LoadFrom(file); foreach (var t in asm.GetExportedTypes()) { - if (t.IsClass && typeof(ILoaderExtensions).IsAssignableFrom(t)) + if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t)) { - list.Add((ILoaderExtensions)Activator.CreateInstance(t)); + list.Add((IImplementationExtension)Activator.CreateInstance(t)); + } + } + loadedFiles.Add(file.GetFileName()); + } + } + return list; + } + + /// + /// Загрузка всех классов-реализаций IWindowDesktopExtension + /// + /// + public static List GetWindowDesktopExtensions() + { + var list = new List(); + if (Directory.Exists(_pathToWindowDestopExt)) + { + var files = Directory.GetFiles(_pathToWindowDestopExt, "*.dll", SearchOption.AllDirectories); + var loadedFiles = new List(); + foreach (var file in files.Distinct()) + { + if (loadedFiles.Contains(file.GetFileName())) + { + continue; + } + Assembly asm = Assembly.LoadFrom(file); + foreach (var t in asm.GetExportedTypes()) + { + if (t.IsClass && typeof(IWindowDesktopExtension).IsAssignableFrom(t)) + { + list.Add((IWindowDesktopExtension)Activator.CreateInstance(t)); } } loadedFiles.Add(file.GetFileName()); diff --git a/DepartmentPortal/Common/ModelTools/BusinessLogics/UnityContainerConfigurator.cs b/DepartmentPortal/Common/ModelTools/BusinessLogics/UnityContainerConfigurator.cs index 4c03192..47d5b64 100644 --- a/DepartmentPortal/Common/ModelTools/BusinessLogics/UnityContainerConfigurator.cs +++ b/DepartmentPortal/Common/ModelTools/BusinessLogics/UnityContainerConfigurator.cs @@ -22,7 +22,7 @@ namespace ModelTools.BusinessLogics /// public static void InitServices() { - var ext = ServiceProviderLoader.GetLoaderExtensions(); + var ext = ServiceProviderLoader.GetImplementationExtensions(); if (ext.Count == 0) { throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям"); @@ -38,6 +38,8 @@ namespace ModelTools.BusinessLogics public static void PublishService() => Container.RegisterType(new HierarchicalLifetimeManager()); + public static void PublishService(Type t) => Container.RegisterType(t); + public static T Resolve() => Container.Resolve(); } } \ No newline at end of file diff --git a/DepartmentPortal/Common/ModelTools/Enums/AccessType.cs b/DepartmentPortal/Common/ModelTools/Enums/AccessType.cs index d6f0f00..6482bbe 100644 --- a/DepartmentPortal/Common/ModelTools/Enums/AccessType.cs +++ b/DepartmentPortal/Common/ModelTools/Enums/AccessType.cs @@ -27,8 +27,8 @@ // TODO убрать /// - /// Доступ к админке + /// Доступ к меню /// - Administrator = 8 + Menu = 8 } } \ No newline at end of file diff --git a/DepartmentPortal/Common/ModelTools/Interfaces/IEntityService.cs b/DepartmentPortal/Common/ModelTools/Interfaces/IEntityService.cs index 2ab6242..0e35b3d 100644 --- a/DepartmentPortal/Common/ModelTools/Interfaces/IEntityService.cs +++ b/DepartmentPortal/Common/ModelTools/Interfaces/IEntityService.cs @@ -1,5 +1,5 @@ using ModelTools.BindingModels; -using ModelTools.OperationResultModels; +using ModelTools.Models; namespace ModelTools.Interfaces { diff --git a/DepartmentPortal/Common/ModelTools/Interfaces/ILoaderExtensions.cs b/DepartmentPortal/Common/ModelTools/Interfaces/IImplementationExtension.cs similarity index 86% rename from DepartmentPortal/Common/ModelTools/Interfaces/ILoaderExtensions.cs rename to DepartmentPortal/Common/ModelTools/Interfaces/IImplementationExtension.cs index 1316e47..5107249 100644 --- a/DepartmentPortal/Common/ModelTools/Interfaces/ILoaderExtensions.cs +++ b/DepartmentPortal/Common/ModelTools/Interfaces/IImplementationExtension.cs @@ -3,7 +3,7 @@ /// /// Интерфейс для регистрации зависомстей в модулях /// - public interface ILoaderExtensions + public interface IImplementationExtension { /// /// Регистрация сервисов diff --git a/DepartmentPortal/Common/ModelTools/Interfaces/ISecurityManager.cs b/DepartmentPortal/Common/ModelTools/Interfaces/ISecurityManager.cs index 78156d4..cce0ac4 100644 --- a/DepartmentPortal/Common/ModelTools/Interfaces/ISecurityManager.cs +++ b/DepartmentPortal/Common/ModelTools/Interfaces/ISecurityManager.cs @@ -1,5 +1,4 @@ -using ModelTools.BindingModels; -using ModelTools.Enums; +using ModelTools.Models; namespace ModelTools.Interfaces { @@ -13,11 +12,8 @@ namespace ModelTools.Interfaces /// /// Авторизация пользователя к операции /// - /// Данные по пользователю - /// Операция, которую хотят выполнить - /// Тип операции - /// Для какой сущности + /// Данные по операции /// - bool CheckAccess(AccessBindingModel model, AccessOperation operation, AccessType type, string entity); + bool CheckAccess(SecurityManagerCheckAccessModel model); } } \ No newline at end of file diff --git a/DepartmentPortal/Common/ModelTools/Interfaces/IWindowDesktopExtension.cs b/DepartmentPortal/Common/ModelTools/Interfaces/IWindowDesktopExtension.cs new file mode 100644 index 0000000..5b6896f --- /dev/null +++ b/DepartmentPortal/Common/ModelTools/Interfaces/IWindowDesktopExtension.cs @@ -0,0 +1,17 @@ +using ModelTools.Models; +using System.Collections.Generic; + +namespace ModelTools.Interfaces +{ + /// + /// Получение контролов для основной формы + /// + public interface IWindowDesktopExtension + { + /// + /// Получение списка контролов модуля, доступных для работы по авторизованному пользователю + /// + /// + List GetListControlEntityList(); + } +} \ No newline at end of file diff --git a/DepartmentPortal/Common/ModelTools/OperationResultModels/OperationResultModel.cs b/DepartmentPortal/Common/ModelTools/Models/OperationResultModel.cs similarity index 97% rename from DepartmentPortal/Common/ModelTools/OperationResultModels/OperationResultModel.cs rename to DepartmentPortal/Common/ModelTools/Models/OperationResultModel.cs index 9036f76..7b0d4b7 100644 --- a/DepartmentPortal/Common/ModelTools/OperationResultModels/OperationResultModel.cs +++ b/DepartmentPortal/Common/ModelTools/Models/OperationResultModel.cs @@ -2,10 +2,10 @@ using System; using System.Collections.Generic; -namespace ModelTools.OperationResultModels +namespace ModelTools.Models { /// - /// Результат любой операции + /// Результат любой операции с сущностью /// public class OperationResultModel { diff --git a/DepartmentPortal/Common/ModelTools/Models/SecurityManagerCheckAccessModel.cs b/DepartmentPortal/Common/ModelTools/Models/SecurityManagerCheckAccessModel.cs new file mode 100644 index 0000000..f541df1 --- /dev/null +++ b/DepartmentPortal/Common/ModelTools/Models/SecurityManagerCheckAccessModel.cs @@ -0,0 +1,39 @@ +using ModelTools.BindingModels; +using ModelTools.Enums; + +namespace ModelTools.Models +{ + /// + /// Данные для проверки доступа + /// + public class SecurityManagerCheckAccessModel + { + /// + /// Данные по пользователю + /// + public AccessBindingModel Model { get; set; } + + /// + /// Операция, которую хотят выполнить + /// + public AccessOperation Operation { get; set; } + + /// + /// Тип операции + /// + public AccessType Type { get; set; } + + /// + /// Для какой сущности + /// + public string Entity { get; set; } + + public SecurityManagerCheckAccessModel(AccessBindingModel model, AccessOperation operation, AccessType type, string entity) + { + Model = model; + Operation = operation; + Type = type; + Entity = entity; + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Common/ModelTools/Models/WindowDesktopExtensionControlModel.cs b/DepartmentPortal/Common/ModelTools/Models/WindowDesktopExtensionControlModel.cs new file mode 100644 index 0000000..23cd82a --- /dev/null +++ b/DepartmentPortal/Common/ModelTools/Models/WindowDesktopExtensionControlModel.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ModelTools.Models +{ + public class WindowDesktopExtensionControlModel + { + public Guid Id { get; set; } + + public int Order { get; set; } + + public string Title { get; set; } + + public object Control { get; set; } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Common/ModelTools/ViewModels/ElementViewModel.cs b/DepartmentPortal/Common/ModelTools/ViewModels/ElementViewModel.cs index dfe800e..c603eb1 100644 --- a/DepartmentPortal/Common/ModelTools/ViewModels/ElementViewModel.cs +++ b/DepartmentPortal/Common/ModelTools/ViewModels/ElementViewModel.cs @@ -8,7 +8,7 @@ namespace ModelTools.ViewModels /// public class ElementViewModel { - [ViewModelProperty("Идентификатор", useOnList: true, useOnElement: false, isHide: true)] + [ViewModelOnListProperty("Идентификатор", isHide: true)] [MapConfiguration("Id")] public Guid Id { get; set; } } diff --git a/DepartmentPortal/DepartmentPortal.sln b/DepartmentPortal/DepartmentPortal.sln index 3c23c6f..05a2337 100644 --- a/DepartmentPortal/DepartmentPortal.sln +++ b/DepartmentPortal/DepartmentPortal.sln @@ -15,7 +15,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecurityBusinessLogic", "Se EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DepartmentPortalDesctop", "DepartmentPortalDesctop\DepartmentPortalDesctop.csproj", "{B6CE93CB-998F-4F2D-BE9E-6FDF37FDFD0E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SecurityImplementation", "Security\SecurityImplementation\SecurityImplementation.csproj", "{24D7BD00-EC45-4B98-92BB-C6FFB01F66ED}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecurityImplementation", "Security\SecurityImplementation\SecurityImplementation.csproj", "{24D7BD00-EC45-4B98-92BB-C6FFB01F66ED}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopTools", "Common\DesktopTools\DesktopTools.csproj", "{6B923E2B-85EE-4490-81BA-C7AB5DB582AC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SecurityWindowsDesktop", "Security\SecurityWindowsDesktop\SecurityWindowsDesktop.csproj", "{40F7C37A-3544-4A6A-893D-D611DE100036}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -43,6 +47,14 @@ Global {24D7BD00-EC45-4B98-92BB-C6FFB01F66ED}.Debug|Any CPU.Build.0 = Debug|Any CPU {24D7BD00-EC45-4B98-92BB-C6FFB01F66ED}.Release|Any CPU.ActiveCfg = Release|Any CPU {24D7BD00-EC45-4B98-92BB-C6FFB01F66ED}.Release|Any CPU.Build.0 = Release|Any CPU + {6B923E2B-85EE-4490-81BA-C7AB5DB582AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B923E2B-85EE-4490-81BA-C7AB5DB582AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B923E2B-85EE-4490-81BA-C7AB5DB582AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B923E2B-85EE-4490-81BA-C7AB5DB582AC}.Release|Any CPU.Build.0 = Release|Any CPU + {40F7C37A-3544-4A6A-893D-D611DE100036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40F7C37A-3544-4A6A-893D-D611DE100036}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40F7C37A-3544-4A6A-893D-D611DE100036}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40F7C37A-3544-4A6A-893D-D611DE100036}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -52,6 +64,8 @@ Global {8BE3C29B-6E9F-4DFC-BAC3-14229D58616F} = {6F154F8D-3437-45EE-9D89-02B96BDF3E8E} {D424B54F-AF26-4A39-8D2B-CF874F31DE42} = {7DA26C36-778E-4563-9AEC-966E26EA7B2A} {24D7BD00-EC45-4B98-92BB-C6FFB01F66ED} = {7DA26C36-778E-4563-9AEC-966E26EA7B2A} + {6B923E2B-85EE-4490-81BA-C7AB5DB582AC} = {6F154F8D-3437-45EE-9D89-02B96BDF3E8E} + {40F7C37A-3544-4A6A-893D-D611DE100036} = {7DA26C36-778E-4563-9AEC-966E26EA7B2A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FBA0CB49-EF2D-4538-9D00-FCEDA24879A9} diff --git a/DepartmentPortal/DepartmentPortalDesctop/DepartmentPortalDesctop.csproj b/DepartmentPortal/DepartmentPortalDesctop/DepartmentPortalDesctop.csproj index 9b4d650..ced7a4a 100644 --- a/DepartmentPortal/DepartmentPortalDesctop/DepartmentPortalDesctop.csproj +++ b/DepartmentPortal/DepartmentPortalDesctop/DepartmentPortalDesctop.csproj @@ -15,6 +15,7 @@ + diff --git a/DepartmentPortal/DepartmentPortalDesctop/FormMain.Designer.cs b/DepartmentPortal/DepartmentPortalDesctop/FormMain.Designer.cs index 39fe88e..8b58a4d 100644 --- a/DepartmentPortal/DepartmentPortalDesctop/FormMain.Designer.cs +++ b/DepartmentPortal/DepartmentPortalDesctop/FormMain.Designer.cs @@ -31,10 +31,13 @@ namespace DepartmentPortalDesctop { this.menuMain = new System.Windows.Forms.MenuStrip(); this.panelControls = new System.Windows.Forms.Panel(); - this.listBoxControls = new System.Windows.Forms.ListBox(); + this.dataGridViewControls = new System.Windows.Forms.DataGridView(); + this.ColumnControlId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ColumnControlName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.splitContainerMain = new System.Windows.Forms.SplitContainer(); this.ButtonShowHideControlList = new System.Windows.Forms.Button(); this.panelControls.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewControls)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).BeginInit(); this.splitContainerMain.SuspendLayout(); this.SuspendLayout(); @@ -49,22 +52,50 @@ namespace DepartmentPortalDesctop // // panelControls // - this.panelControls.Controls.Add(this.listBoxControls); + this.panelControls.Controls.Add(this.dataGridViewControls); this.panelControls.Dock = System.Windows.Forms.DockStyle.Left; this.panelControls.Location = new System.Drawing.Point(0, 24); this.panelControls.Name = "panelControls"; this.panelControls.Size = new System.Drawing.Size(191, 426); this.panelControls.TabIndex = 1; // - // listBoxControls + // dataGridViewControls // - this.listBoxControls.Dock = System.Windows.Forms.DockStyle.Fill; - this.listBoxControls.FormattingEnabled = true; - this.listBoxControls.ItemHeight = 15; - this.listBoxControls.Location = new System.Drawing.Point(0, 0); - this.listBoxControls.Name = "listBoxControls"; - this.listBoxControls.Size = new System.Drawing.Size(191, 426); - this.listBoxControls.TabIndex = 0; + this.dataGridViewControls.AllowUserToAddRows = false; + this.dataGridViewControls.AllowUserToDeleteRows = false; + this.dataGridViewControls.AllowUserToResizeColumns = false; + this.dataGridViewControls.AllowUserToResizeRows = false; + this.dataGridViewControls.BackgroundColor = System.Drawing.SystemColors.ControlLightLight; + this.dataGridViewControls.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridViewControls.ColumnHeadersVisible = false; + this.dataGridViewControls.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ColumnControlId, + this.ColumnControlName}); + this.dataGridViewControls.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridViewControls.Location = new System.Drawing.Point(0, 0); + this.dataGridViewControls.MultiSelect = false; + this.dataGridViewControls.Name = "dataGridViewControls"; + this.dataGridViewControls.ReadOnly = true; + this.dataGridViewControls.RowHeadersVisible = false; + this.dataGridViewControls.RowTemplate.Height = 25; + this.dataGridViewControls.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dataGridViewControls.Size = new System.Drawing.Size(191, 426); + this.dataGridViewControls.TabIndex = 0; + this.dataGridViewControls.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DataGridViewControls_CellClick); + // + // ColumnControlId + // + this.ColumnControlId.HeaderText = "Id"; + this.ColumnControlId.Name = "ColumnControlId"; + this.ColumnControlId.ReadOnly = true; + this.ColumnControlId.Visible = false; + // + // ColumnControlName + // + this.ColumnControlName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ColumnControlName.HeaderText = "ControlName"; + this.ColumnControlName.Name = "ColumnControlName"; + this.ColumnControlName.ReadOnly = true; // // splitContainerMain // @@ -106,6 +137,7 @@ namespace DepartmentPortalDesctop this.Text = "Кафедральный портал"; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.panelControls.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewControls)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).EndInit(); this.splitContainerMain.ResumeLayout(false); this.ResumeLayout(false); @@ -117,9 +149,11 @@ namespace DepartmentPortalDesctop private System.Windows.Forms.MenuStrip menuMain; private System.Windows.Forms.Panel panelControls; - private System.Windows.Forms.ListBox listBoxControls; private System.Windows.Forms.SplitContainer splitContainerMain; private System.Windows.Forms.Button ButtonShowHideControlList; + private System.Windows.Forms.DataGridView dataGridViewControls; + private System.Windows.Forms.DataGridViewTextBoxColumn ColumnControlId; + private System.Windows.Forms.DataGridViewTextBoxColumn ColumnControlName; } } diff --git a/DepartmentPortal/DepartmentPortalDesctop/FormMain.cs b/DepartmentPortal/DepartmentPortalDesctop/FormMain.cs index 86a3111..91d99f3 100644 --- a/DepartmentPortal/DepartmentPortalDesctop/FormMain.cs +++ b/DepartmentPortal/DepartmentPortalDesctop/FormMain.cs @@ -1,16 +1,138 @@ -using System; +using DesktopTools.Controls; +using ModelTools.BusinessLogics; +using System; using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; namespace DepartmentPortalDesctop { public partial class FormMain : Form { - private Dictionary controls; + private Dictionary _baseControls; + + private Dictionary _controls; + public FormMain() { InitializeComponent(); - controls = new Dictionary(); + _baseControls = new Dictionary(); + _controls = new Dictionary(); + + var extensions = ServiceProviderLoader.GetWindowDesktopExtensions(); + foreach (var extens in extensions) + { + var list = extens?.GetListControlEntityList()?.OrderBy(x => x.Order).ToList(); + if (list != null && list.Count > 0) + { + var menu = new ToolStripMenuItem { Text = list[0].Title }; + for (int i = 0; i < list.Count; i++) + { + if (list[i].Control is ControlViewEntityList control) + { + if (_baseControls.ContainsKey(list[i].Id)) + { + continue; + } + + _baseControls.Add(list[i].Id, control); + var submenu = new ToolStripMenuItem { Text = list[i].Title, Tag = list[i].Id }; + submenu.Click += (object sender, EventArgs e) => + { + OpenControl(new Guid((sender as ToolStripMenuItem).Tag.ToString())); + }; + menu.DropDownItems.Add(submenu); + } + } + + menuMain.Items.Add(menu); + } + } + } + + /// + /// Добавление нового контрола + /// + /// + private void OpenControl(Guid id) + { + if (!_baseControls.ContainsKey(id)) + { + return; + } + if (_baseControls[id] == null) + { + return; + } + + var ctrl = _baseControls[id].Clone(); + if (!_controls.ContainsKey(ctrl.Id)) + { + ctrl.CloseEventAdd += CloseControl; + ctrl.Dock = DockStyle.Fill; + ctrl.Open(); + _controls.Add(ctrl.Id, ctrl); + + splitContainerMain.Panel1.Controls.Clear(); + splitContainerMain.Panel1.Controls.Add(ctrl); + dataGridViewControls.Rows.Add(new object[] { ctrl.Id, ctrl.Title }); + dataGridViewControls.Rows[dataGridViewControls.Rows.Count - 1].Selected = true; + } + } + + /// + /// Закрытие контрола + /// + /// + private void CloseControl(Guid id) + { + if (!_controls.ContainsKey(id)) + { + return; + } + var ctrl = _controls[id]; + if (ctrl == null) + { + return; + } + for (int i = 0; i < dataGridViewControls.Rows.Count; ++i) + { + if (dataGridViewControls.Rows[i].Cells[0].Value.ToString() == ctrl.Id.ToString()) + { + dataGridViewControls.Rows.RemoveAt(i); + if (i < dataGridViewControls.Rows.Count - 1) + { + dataGridViewControls.Rows[i].Selected = true; + ShowControl(new Guid(dataGridViewControls.Rows[i].Cells[0].Value.ToString())); + } + else if (i > 0) + { + dataGridViewControls.Rows[i - 1].Selected = true; + ShowControl(new Guid(dataGridViewControls.Rows[i - 1].Cells[0].Value.ToString())); + } + break; + } + } + _controls.Remove(ctrl.Id); + } + + /// + /// Отображение контрола + /// + /// + private void ShowControl(Guid id) + { + if (!_controls.ContainsKey(id)) + { + return; + } + var ctrl = _controls[id]; + if (ctrl == null) + { + return; + } + splitContainerMain.Panel1.Controls.Clear(); + splitContainerMain.Panel1.Controls.Add(ctrl); } private void ButtonShowHideControlList_Click(object sender, EventArgs e) @@ -18,5 +140,7 @@ namespace DepartmentPortalDesctop ButtonShowHideControlList.Text = panelControls.Visible ? ">" : "<"; panelControls.Visible = !panelControls.Visible; } + + private void DataGridViewControls_CellClick(object sender, DataGridViewCellEventArgs e) => ShowControl(new Guid(dataGridViewControls.Rows[e.RowIndex].Cells[0].Value.ToString())); } } \ No newline at end of file diff --git a/DepartmentPortal/DepartmentPortalDesctop/FormMain.resx b/DepartmentPortal/DepartmentPortalDesctop/FormMain.resx index f298a7b..3f841b6 100644 --- a/DepartmentPortal/DepartmentPortalDesctop/FormMain.resx +++ b/DepartmentPortal/DepartmentPortalDesctop/FormMain.resx @@ -57,4 +57,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True + + + True + \ No newline at end of file diff --git a/DepartmentPortal/DepartmentPortalDesctop/Program.cs b/DepartmentPortal/DepartmentPortalDesctop/Program.cs index 2f29dcd..7a80e1d 100644 --- a/DepartmentPortal/DepartmentPortalDesctop/Program.cs +++ b/DepartmentPortal/DepartmentPortalDesctop/Program.cs @@ -1,4 +1,5 @@ using DatabaseCore; +using DesktopTools.Controls; using ModelTools.BusinessLogics; using ModelTools.Interfaces; using SecurityBusinessLogic.BusinessLogics; diff --git a/DepartmentPortal/Extensions/net5.0/DatabaseCore.dll b/DepartmentPortal/Extensions/net5.0/DatabaseCore.dll index c57f744f73a30d891447af7d26760140ab0f91c2..a92f19ba69abec654b6ee38e750d9b34d74c0198 100644 GIT binary patch delta 112 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 IT5=-(2ds9mH2?qr delta 5455 zcma)=32;9_N{E1lLz+yOr)bO5@U>GPQbM*5vH z$oTxXho;h)_OStDIW_aDk%?*`;9L%*4YxW2scV25dXFYhJf&t?)uMUJ<-S~`{dirF zS2hJN4ghTOQg1FBmrw5piT67*f&+Td&7hiI@}1@ZZ6F?^7u^@XdeZwaXHT$4Rp#xI!OxQtXmm@>VV%rsvj4d${aL{H#S6YvQAaG4O0qk8egTew5LC7o|cyCTcC0bMbK)TEz9IsGw1W-3X-X6C1>}Is#s+kN>Ahfe#d=!~e$Bf9H=xm&<1-QU?+ciCoLjV68<2t|T8fEx z=>`&U#P^dc5zBm!QMbjmbRG!ov=i|P`@-n%le@iC3N2eiNNluvF306cWTFKSX)u_M zcs?aE;6W1&8HpbBak!DhG&c~VZcJx=G3t(bVWY&G9mu81o)Gj2ukm&X%pgi(>SszC zNEDIDEJNZT!g^ZFEL`yCVuUOu%JWMaL&dV`4quGqVr{&}xdIGfs_?u?3oWE2%G?T~ zQS@7!&vYMC5sI05TD#*OqIeR-U@CplEpZa2#Rf9ng4>vuaA_&Zi4ue`1afpa-9%?~ zhaQn|htDuITG~Qz>I&p^u ztdFoii~Z->X^!x)z6?Q57qRmoYaedy;{ornlgl+1SSwh+=CPk}%~sY+wp{eR?5~TB z<#+|h<ZE;FS*p-bIL zDsV>ILOVKIJV_eS_aF_`-p@$ivOl4ZJ=rC7G{y1g?YF6Zf!2vMERvk0P7|yOT~ea% z{Grp}n@{-#{ou||mOtI=th2!qqGgIM23u}s`qwX47V%S&7Wd+w8U7)4N(#<$---{mbDrzOV0SSt- zBCZClCsG*KS#p1pk->Bi?@tKXik{MgA_YSgy{x}Pzv=mkcH3Vd6-A2n*++@WnAXwW zZ8FmEXe@_LK|}PxH?bUs*n@T%VeC(pD_w{E!Do#O+@BVsQuAda6JvYDsFr{^z&2H}i0VgRr=mKlAAx5T6;N&@niZ8& zZX{k;birGPQFvPsd^XXCF`|3y>KcvnDtC;!~lsDRw{ZR*d~e*RkSU5&M3wMiZ;?+OhluiU33!@u}#redYdT0PDSVSb4CfCRU|xa z*CaG6iuc$N!q;O+YwPEl46PsU1yQc6j6#7wS-+*S>UzJQM>@6iM5n1yv3RB*&@tAK zSsBMvBPVioz_mr+bE98tY$?*$@UT}l9c9wvFAmX^0^f1#tNL3@jCJ@>mmO$Sgjy`5 zMgp;>vRy3x|1@^TQZ?Kflw+@r<=qPmqi6iz+r`N5CH~i6Pc1aeCDmd3u5Wjqv%mI> zJ+`gkFmL;Be~9$-7EA2q76WL#I-U*Mwt=5$iv<4Hms=h3cp!gi<4IlU!f}YyOK0pU zzfA|b)X}WtSSPd2U@d1|N-9uK8cD!bdh3RGamt^GDo%9gN2KnUs1Kt<{3M;hY3%nU zy@TR5EW*>6LdVY2IO&ZdBtD>{gubh2;(_8n9HG^r!9P>GhwA5(pAlHBeTyt_E$NoHRoVfx1=_@c2!?p;wQAnd8rDW3r`akB zOo4B4mwg`%m`&e{P2wOO&`qMV*{D5DTPCS^T0WV=mJ5kkSPhV1{w4-axA9FPQz|qilb4 z#3omNbi;PiRJ=i&iNmDXXd@j8KUI!F66pk_kxpTMCg~{dJX)#jU(Rtk7Tit{WvEvw z(>pkB!gBi9np7ig)Ar~DM)WKPm93EI=-mR@diTNaHm3fGC znc1q#8qlL!x^5V9u4InWWbAxQqXwHTZn-rrZaGUU$ETG_2bRnVrQ|pRLg5HivU6G~ zS9-WosdSP#4k?w+D2_)fmChWF%aux}p5uCtjCXL{q*OWwWgO94*lOXT(;T1X7+zk4 zQaK=*1n^^OjywYl6XyLe(5znXN6M~=FHwWJqWH~AVUK5R)%a>=n5A?J#6Je}3>RppWORXb3;&m&9! zY{+)KY^mFWQg?IB54wyKJPpmSrcM?~8s=d*eWl+?s?j&C{3~}pMmp|ZgZcylpua}0 zUh%qz4#MlbeNI!aj^PXRIB@_B%z$@s8nTvj$s6>n_70**VkGOe!@721mYYA!0)s-T}IXR~1 zO#-m!Z_aTQR3xv4)^o506yaBQD9yyY!t>8s9~OcQ_0Fs91RBxb`{57T?wL1_F6&fDZcqPa%ru*4Nf7y}OQwJv{;lDe~sem7$bI z-Zk^fxziIg)l1IUkl&BI3yZzKHv|+3b23JIn!<7Nms7V z!VRM5oE-Zl-YB|^91qqa6!gIKhJqG`I(fFwtOrQv(`*)$xz+1|*EgDKPFbvDTm^Q( zgVU~pfQ1@t^;%eCaZwB6eh*$jCFvf|uPFOcaH}_f@1av!_&wEF*dPo1NTxpI{&%YR zzRa-A;)T!oSjYLevQ^^WQKbi0c=pqZ+ey=q?yL&h7TUbBu$ve5`z!tZQQ|LjdvL_P zpC+B`ZVU~?!@fPCA=u&F6SD9#S|%3*th?wM)JsEIv3G%; zq+yKE-afRW553$&Hg~#RP4*9!flPCWh7(;SOB4|m5ls-PB`PK=6?)Y-*?%w56rpTS zb6_X3Fh^(&Q7g4MSLj1G=dy9TP`TuCa3|;k6vA&MnTtwEmPj%ei-f!~>E-x0p?f^d zu?cC@>?aI`-2i}}(5Nt;F<8q(tYzvL=|k#QMk*4%U)#oLJRkfmm2OWtMS3jd9nwx|C|9P= zHMzxUf7jfl7P+D12_##5)I3A=$wv3cJU^8=dplpB0Nu2Ieg+o4N7uu`vcRtm3kmO0 zx}g{FC!;?m;~Y6|=RVQ{zQ5^g?|Owh08`N&Niq9Y@@&eM#GD*{ l&!259NRlht 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 rh8+OTuqS2!bj2fP%PC#DpZZ!HALsgr<+1 z1O-zl5{HVYltfBvbUh3p$d3mk6Sch6k> zjha#znbYsdmjil-Qob{m5tt%Aixmcjnh$#@lU@eOob5gXM_F?nD|`XKFa5_HIW7Y` zo#|c!ce8%(khYKQ4Xlrm$BkOJ18#inb_WdfcgWtZ8Y@Weq23G#eWS+>yLT|A(I;LuFs9*SV-FFeutv_0~r0rC^w^ zzsrpyuGgs3F|Mj$FVuP)gBkdVr!i2|P{{@Lpkd@13SLS9`7ek$o{QA} z23>Jq^p7UeI2NK9tp)rh<8cn!5n%FD&<_WCFzx4<11U_CDV7Wu(wWY4%!NK^q~TB6 zn|werMlrp73%zg){j!rxS?Lxr#@C-4N}5YFh$x$f$Rf%j8pl*lG?Hi{(=qQD-y=km znbO?r{oBwRvzb;BHBy;#nLc*OSYO=7l*h3U9)K851I9TR!D0>$<6s0uOm^|P%mmz-zr(ge=yr^vU+wukJm^!=n6cIoM1JJcB+Wta94oAl4ukB~i{)nGMkZ;_|N zc7pWBdV+MBE^Sb&Fm`ED^MX=y#A(te#0Odu+PvpXZ3K1)+9`F5?SDw$wS7w3$^}KZ z>xeE(%=^3IZj>ksvL;}a_+$Mu%C`#r1^4qG+-FzM%?Z$^{qq?Zc!t))z!LvC%|M&y z6m96&xTd9G60VcSw_}$Hbq;5L82^0Upm|9)X7#P zTw*LO>tsf22nVKHL0$_7X5T^!R70A5Y*>#p^JuV5I8m;=C+VbiqKe7t&4o2x+Pkpf z7W#>5_lD;z9Ru4GwR(a?KUY+$MRhlJDSBMHF5GxS(P)!`9vo9Rm4Y6;qexK9i@2g7 z#k@G9sLVT3_n|}42n2dE+jCUj%n>uN> zsVAe6@i^RKzTOSH6!jGk=-qL+GqqUnf%iHym*^=t)0w$U?}<-3Ggs=V__8x|wVnoB zrkw9_^c7F)y^zEtzkwTcvo|6t=oZiD=@{0Tx>fIkiA*(IcLvIso^^g=Z_qRF9@ARq z2i~1Tr>#t9hxZkt4^=GSZ`S+bf{La24-)-B#je@UA{2YGXIfEI4`WC_YfD~mokSR8 zEy6kRCdD==`c&kLOvDvEZg0~waqn%i-Lo)Vzta0-B~v{%y8lZbfTaF1R-Zc1_fc$e zYHu^D55!pZt#uBfuhT%}TEz2<;yWrPPmL(P+nE_7x?fR(PKH4!Qgq&vN>rxkZ6iY; zj7mlFC>V@?w@8j)VhGl%puEC|V51^=g%81&o2eLzhAx>y@p6~Uq1dhHOXpc+;h-Yn z3KIR&BA(JPv~?kK7*4BHdG-y%IYsj98-@#t zjsbF&*V4swi72Q@o(Ln6sz{y)BTa-A&Y`Uzg{Y!M_8`$nMRmSr{dSC3wAFWzD9<7u zel%vPm>gm><|&dxjK%|s2UX&f3A$pdLTniRCCgQXr zc?3w$#|9M6DI3VSuQ?TF`1c*19Yo@BQuvQfm9c% zX?^@Z>PL1tSc&JRcJ<_2fv&Fq%ft2FQfM1>s?m*%?7A)XT6#~@YWw$@{~}MaT+&-g zd^&b-p8;mXC;tS=TcI>kH=?9Lj9?wdn#-EcI)`-u>oQUUHKgfu-yZQr&_p_j?cw-> z?49_E)Ibt{C6f57FhWRAKC2fIlVFZ0bM3(b@k-zg`Y|QL-C5IF`>~e6L#O=$(H=a7 zGJNU$4G!Wyx=ETz(ep^)O5hKe$M!ncix@VP~)_+21Ll;V$~zo?|B zIaox+?~QEIdBKUKue~3~j4866i--6r83t(Eu5m5EH!LC%xufrlpB5 z=y-^V-)fJO{TKQr8x>jJA8Apc(Nz|v8{^BiF#R~GwMX$V){|D?MZ1{=52o9)&<(Rm zd*e~kOspgwj9sLoaDsFKPLt-*Z;mX?VE6mCc&SpJp^svw=nn`&*UD=m{EfoYBsn4yDq6ky_0# zE>f$7h7fZ0LP)<$RN;GuOH`oN2nmyyg~MSEN5#X~XhbR8Y~-*%SE+2APmPZm`4s)o zC}e*jw<@JppBts*Pjb|-zlQyF$o@w5H<5q3qe)blSmJ2qKr07MP@u|j zf*L&QXlH+iQl1kJSU|*Gp!15Ib2!=E;vH$4=a_?sP-_vazrVb;>=-x zKINOYIZNr|4$=zDch-^p5UHGB6E!fMO=RzPws3=XR_HviQrUHg?XXhm$z?lNmv$lB zg=`nGU89turhN@V18bvF*=z^fEv&6drTE!bD)4dg-WHrl>OE0sZlEZb?k3oPoq-lZ(+Mtsr0n7-Jw)^VCO%%TxA-2Oxr6+3VO4*aERQmJTU&x+9Zd=WEjZ&G@z;>fj>1k!VmGj%#?y&Rszk^*c zxFV&pL745ZA?=V;MsrvTSgTnZSX)>_t~L0=7ILkZnPiW%=dj)Gl5OFZ8e%PAt#;pU zlB8xHERQF3u`+of}GEq!&<;vEj46oNZKJ6Ct2zdXd*?7 z5VOPru~BRl3$^;#`~60n*L7gI@eQfnOV122i|sRplk5p>Zwtz3vdc#vEAv!P+HZNJ zze-CY`!3e*tX1A#NP0?>nL9M;8NhvJa}Ss7LrijA@Qxtu>-Ul746+OVV>QTk8$D+@uTs>i4D9KUV2FP-ABtx@{6g;Ze5~+ zZiD2Dd_I|wCFS1=A1R>~Or-~~@t?+z#rGwuWl-Rp+*v&s+6a3AIe>j0^hFC|^8*=c)XSiFNeM z4sZ$RGfGyG)mv7zC4Ph|S{L6(p9kXmgs^5o|9xPeUsz@=m%WB#@8+ft;nq}u^Txy| z(nlaUzMYCZ5I-t4QA<;-6(Z)Jl4geJjyk^GTD$lg^tp#dq6E2?ot@oNQBp2fi8@OW z@W&eywTU(H*JVA4TApM;z%{pWd2z|oN?!DcKrbG1A1&xnN^S1iap$_sG)syqmzS56 zbE96e&_*hBy6%&(YIxO8cW zTy@%ZU)S8M8(sDk@Wwau;x&ij^;uAxB)4A<)!Dt|WRiME@^UMDIIei}F&8 z=gEBj&e#v~B0WZAU!Ah9<+HoCH@sNTv1#=I`8Asw+nx8sNEKQ6po+-;hL68+=I+l2 zJ-9jk{udXilN&ExmKv%Lr)YmJ+G|dITEtqWZrz2) diff --git a/DepartmentPortal/Extensions/net5.0/SecurityImplementation.dll b/DepartmentPortal/Extensions/net5.0/SecurityImplementation.dll index 1af8b4b5c4945d83eb2cee8826f85e1a1b5e4a4e..efea6bebb17a25cd0a0b2f1ef9f26009c38a7485 100644 GIT binary patch delta 110 zcmZoz!`QHfaY6@+=!O+78+%$@1YY>N+$y;B(PabIp;?@|l~IcoTsfF$9eOfZ**8!$ zHh1@$oGXrg(`v7OmsbyRXJlYtNSWN}+ok}Oxd)R0>UewNu;jfTYj*U%c~&=Nv%cR& Fb^xLHG&TSL delta 110 zcmZoz!`QHfaY6^nq+o%E8+%$@1Z?e_1K-Lz21MSJkw$YR}N;+tCEwIeFH^b zEtArleZthSUos}Nv> FI{<{DEeZet diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/DatabaseCore.dll b/DepartmentPortal/ImplementationExtensions/net5.0/DatabaseCore.dll new file mode 100644 index 0000000000000000000000000000000000000000..5dd125783a5a11574837b1d9c686930672b8d6c9 GIT binary patch literal 51200 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 literal 0 HcmV?d00001 diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.deps.json b/DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.deps.json new file mode 100644 index 0000000..d56a467 --- /dev/null +++ b/DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.deps.json @@ -0,0 +1,1782 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v5.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v5.0": { + "SecurityImplementation/1.0.0": { + "dependencies": { + "DatabaseCore": "1.0.0", + "SecurityBusinessLogic": "1.0.0" + }, + "runtime": { + "SecurityImplementation.dll": {} + } + }, + "Microsoft.CSharp/4.5.0": {}, + "Microsoft.Data.SqlClient/2.0.1": { + "dependencies": { + "Microsoft.Data.SqlClient.SNI.runtime": "2.0.1", + "Microsoft.Identity.Client": "4.14.0", + "Microsoft.IdentityModel.JsonWebTokens": "5.6.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "5.6.0", + "Microsoft.Win32.Registry": "4.7.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Diagnostics.DiagnosticSource": "5.0.1", + "System.Runtime.Caching": "4.7.0", + "System.Security.Principal.Windows": "4.7.0", + "System.Text.Encoding.CodePages": "4.7.0" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll": { + "assemblyVersion": "2.0.20168.4", + "fileVersion": "2.0.20168.4" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "2.0.20168.4", + "fileVersion": "2.0.20168.4" + }, + "runtimes/win/lib/netcoreapp3.1/Microsoft.Data.SqlClient.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "2.0.20168.4", + "fileVersion": "2.0.20168.4" + } + } + }, + "Microsoft.Data.SqlClient.SNI.runtime/2.0.1": { + "runtimeTargets": { + "runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.dll": { + "rid": "win-arm", + "assetType": "native", + "fileVersion": "2.0.1.0" + }, + "runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.pdb": { + "rid": "win-arm", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.dll": { + "rid": "win-arm64", + "assetType": "native", + "fileVersion": "2.0.1.0" + }, + "runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.pdb": { + "rid": "win-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "2.0.1.0" + }, + "runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.pdb": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.dll": { + "rid": "win-x86", + "assetType": "native", + "fileVersion": "2.0.1.0" + }, + "runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.pdb": { + "rid": "win-x86", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "Microsoft.EntityFrameworkCore/5.0.4": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "5.0.4", + "Microsoft.EntityFrameworkCore.Analyzers": "5.0.4", + "Microsoft.Extensions.Caching.Memory": "5.0.0", + "Microsoft.Extensions.DependencyInjection": "5.0.1", + "Microsoft.Extensions.Logging": "5.0.0", + "System.Collections.Immutable": "5.0.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.Diagnostics.DiagnosticSource": "5.0.1" + }, + "runtime": { + "lib/netstandard2.1/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "5.0.4.0", + "fileVersion": "5.0.421.11803" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/5.0.4": { + "runtime": { + "lib/netstandard2.1/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "5.0.4.0", + "fileVersion": "5.0.421.11803" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/5.0.4": {}, + "Microsoft.EntityFrameworkCore.Relational/5.0.4": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "5.0.4", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0" + }, + "runtime": { + "lib/netstandard2.1/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "5.0.4.0", + "fileVersion": "5.0.421.11803" + } + } + }, + "Microsoft.EntityFrameworkCore.SqlServer/5.0.4": { + "dependencies": { + "Microsoft.Data.SqlClient": "2.0.1", + "Microsoft.EntityFrameworkCore.Relational": "5.0.4" + }, + "runtime": { + "lib/netstandard2.1/Microsoft.EntityFrameworkCore.SqlServer.dll": { + "assemblyVersion": "5.0.4.0", + "fileVersion": "5.0.421.11803" + } + } + }, + "Microsoft.Extensions.Caching.Abstractions/5.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.Caching.Memory/5.0.0": { + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/5.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.DependencyInjection/5.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + }, + "runtime": { + "lib/net5.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "5.0.0.1", + "fileVersion": "5.0.120.57516" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.Logging/5.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "5.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + }, + "runtime": { + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/5.0.0": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.Options/5.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + }, + "runtime": { + "lib/net5.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Extensions.Primitives/5.0.0": { + "runtime": { + "lib/netcoreapp3.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.Identity.Client/4.14.0": { + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "System.ComponentModel.TypeConverter": "4.3.0", + "System.Net.NameResolution": "4.3.0", + "System.Private.Uri": "4.3.2", + "System.Runtime.Serialization.Formatters": "4.3.0", + "System.Runtime.Serialization.Json": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Security.SecureString": "4.3.0", + "System.Xml.XDocument": "4.3.0" + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.Identity.Client.dll": { + "assemblyVersion": "4.14.0.0", + "fileVersion": "4.14.0.0" + } + } + }, + "Microsoft.IdentityModel.JsonWebTokens/5.6.0": { + "dependencies": { + "Microsoft.IdentityModel.Tokens": "5.6.0", + "Newtonsoft.Json": "10.0.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "assemblyVersion": "5.6.0.0", + "fileVersion": "5.6.0.61018" + } + } + }, + "Microsoft.IdentityModel.Logging/5.6.0": { + "runtime": { + "lib/netstandard2.0/Microsoft.IdentityModel.Logging.dll": { + "assemblyVersion": "5.6.0.0", + "fileVersion": "5.6.0.61018" + } + } + }, + "Microsoft.IdentityModel.Protocols/5.6.0": { + "dependencies": { + "Microsoft.IdentityModel.Logging": "5.6.0", + "Microsoft.IdentityModel.Tokens": "5.6.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.dll": { + "assemblyVersion": "5.6.0.0", + "fileVersion": "5.6.0.61018" + } + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect/5.6.0": { + "dependencies": { + "Microsoft.IdentityModel.Protocols": "5.6.0", + "Newtonsoft.Json": "10.0.1", + "System.IdentityModel.Tokens.Jwt": "5.6.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": { + "assemblyVersion": "5.6.0.0", + "fileVersion": "5.6.0.61018" + } + } + }, + "Microsoft.IdentityModel.Tokens/5.6.0": { + "dependencies": { + "Microsoft.IdentityModel.Logging": "5.6.0", + "Newtonsoft.Json": "10.0.1", + "System.Security.Cryptography.Cng": "4.5.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.dll": { + "assemblyVersion": "5.6.0.0", + "fileVersion": "5.6.0.61018" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": {}, + "Microsoft.NETCore.Targets/1.1.3": {}, + "Microsoft.Win32.Registry/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "Newtonsoft.Json/10.0.1": { + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "System.Collections": "4.3.0", + "System.ComponentModel.TypeConverter": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Runtime.Serialization.Formatters": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Newtonsoft.Json.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1.20720" + } + } + }, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable/5.0.0": {}, + "System.Collections.NonGeneric/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Collections.Specialized/4.3.0": { + "dependencies": { + "System.Collections.NonGeneric": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.ComponentModel/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.Annotations/5.0.0": {}, + "System.ComponentModel.Primitives/4.3.0": { + "dependencies": { + "System.ComponentModel": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.TypeConverter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.NonGeneric": "4.3.0", + "System.Collections.Specialized": "4.3.0", + "System.ComponentModel": "4.3.0", + "System.ComponentModel.Primitives": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "dependencies": { + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Security.Permissions": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource/5.0.1": { + "runtime": { + "lib/net5.0/System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.220.61120" + } + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Drawing.Common/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.Win32.SystemEvents": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Drawing.Common.dll": { + "assemblyVersion": "4.0.0.1", + "fileVersion": "4.6.26919.2" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + }, + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Dynamic.Runtime/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IdentityModel.Tokens.Jwt/5.6.0": { + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "5.6.0", + "Microsoft.IdentityModel.Tokens": "5.6.0", + "Newtonsoft.Json": "10.0.1" + }, + "runtime": { + "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.dll": { + "assemblyVersion": "5.6.0.0", + "fileVersion": "5.6.0.61018" + } + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Net.NameResolution/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Principal.Windows": "4.7.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Private.DataContractSerialization/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0", + "System.Xml.XmlSerializer": "4.3.0" + } + }, + "System.Private.Uri/4.3.2": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "System.Runtime.Caching/4.7.0": { + "dependencies": { + "System.Configuration.ConfigurationManager": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Runtime.Caching.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netstandard2.0/System.Runtime.Caching.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/4.5.2": {}, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.Serialization.Formatters/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0" + } + }, + "System.Runtime.Serialization.Json/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Private.DataContractSerialization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Serialization.Primitives/4.3.0": { + "dependencies": { + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, + "System.Security.Cryptography.Cng/4.5.0": {}, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "runtime": { + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "assemblyVersion": "4.0.5.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.5.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Permissions/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Windows.Extensions": "4.7.0" + }, + "runtime": { + "lib/netcoreapp3.0/System.Security.Permissions.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Principal.Windows/4.7.0": {}, + "System.Security.SecureString/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0" + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.3", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Windows.Extensions/4.7.0": { + "dependencies": { + "System.Drawing.Common": "4.7.0" + }, + "runtime": { + "lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlSerializer/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + } + }, + "Unity/5.11.10": { + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + }, + "runtime": { + "lib/netcoreapp3.0/Unity.Abstractions.dll": { + "assemblyVersion": "5.11.7.0", + "fileVersion": "5.11.7.0" + }, + "lib/netcoreapp3.0/Unity.Container.dll": { + "assemblyVersion": "5.11.11.0", + "fileVersion": "5.11.11.0" + } + } + }, + "DatabaseCore/1.0.0": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "5.0.4", + "Microsoft.EntityFrameworkCore.SqlServer": "5.0.4", + "ModelTools": "1.0.0", + "SecurityBusinessLogic": "1.0.0" + }, + "runtime": { + "DatabaseCore.dll": {} + } + }, + "ModelTools/1.0.0": { + "dependencies": { + "Unity": "5.11.10" + }, + "runtime": { + "ModelTools.dll": {} + } + }, + "SecurityBusinessLogic/1.0.0": { + "dependencies": { + "ModelTools": "1.0.0" + }, + "runtime": { + "SecurityBusinessLogic.dll": {} + } + } + } + }, + "libraries": { + "SecurityImplementation/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.CSharp/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==", + "path": "microsoft.csharp/4.5.0", + "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512" + }, + "Microsoft.Data.SqlClient/2.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cff+ug/XZnGmX6DFgLY92t7G9W3i8r23w5Qnuby41l9rS+X+f7Y51hV5glvIrmsu3tIcnxbR+Z4CQ2zGhksIJw==", + "path": "microsoft.data.sqlclient/2.0.1", + "hashPath": "microsoft.data.sqlclient.2.0.1.nupkg.sha512" + }, + "Microsoft.Data.SqlClient.SNI.runtime/2.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MalWSIMdwLZoNXxjmFmeRrFgaUXbEADkYNGm6HM33pculFv8gKt53s1Frs+kTfVPWMYjocd4gqwz92KrkcLfXA==", + "path": "microsoft.data.sqlclient.sni.runtime/2.0.1", + "hashPath": "microsoft.data.sqlclient.sni.runtime.2.0.1.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/5.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-upRpXluUeONMYO+O3RU8G+ZZcrnDrnNVWg4eJmSfertTdw7Hc5tgIeg/O8+oBKqf+OvBrQKW0U3PI9yoTsuPYg==", + "path": "microsoft.entityframeworkcore/5.0.4", + "hashPath": "microsoft.entityframeworkcore.5.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/5.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4y+y28SHjniLIqj7M7YNRO8khBnCBtkM6TJG8oX0wyEZuLum+3e9vqqna1naaV6Hi4BhXBHcD/sjhIfW1u0ZfQ==", + "path": "microsoft.entityframeworkcore.abstractions/5.0.4", + "hashPath": "microsoft.entityframeworkcore.abstractions.5.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Analyzers/5.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-z8OMwlXcUZJCArcDdhR0NRkmS0UyNg08l1LXPZCgYqjBeW8RvNXshH3H5ru/7IOVpyOfKrG5Q3nsgdD18OFG/g==", + "path": "microsoft.entityframeworkcore.analyzers/5.0.4", + "hashPath": "microsoft.entityframeworkcore.analyzers.5.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/5.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9Qa6SqX+hJZogo99bICsS6kgQ1C5RtEjPrsvQxjInVdY9QSWsXWIYfem0rv3wi+htwkJuMHVHGSaqG1oeAwe+w==", + "path": "microsoft.entityframeworkcore.relational/5.0.4", + "hashPath": "microsoft.entityframeworkcore.relational.5.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.SqlServer/5.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wFn6lYyezhTIWpEB85NYn0TmVs0GiTQBbgKxK4/BmeEXBoLdltOngosey1u9t1+c2xjxuis1V7fP3wcLVSf+jg==", + "path": "microsoft.entityframeworkcore.sqlserver/5.0.4", + "hashPath": "microsoft.entityframeworkcore.sqlserver.5.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Abstractions/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==", + "path": "microsoft.extensions.caching.abstractions/5.0.0", + "hashPath": "microsoft.extensions.caching.abstractions.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Memory/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/1qPCleFOkJe0O+xmFqCNLFYQZTJz965sVw8CUB/BQgsApBwzAUsL2BUkDvQW+geRUVTXUS9zLa0pBjC2VJ1gA==", + "path": "microsoft.extensions.caching.memory/5.0.0", + "hashPath": "microsoft.extensions.caching.memory.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==", + "path": "microsoft.extensions.configuration.abstractions/5.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/5.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-//mDNrYeiJ0eh/awFhDFJQzkRVra/njU5Y4fyK7X29g5HScrzbUkKOKlyTtygthcGFt4zNC8G5CFCjb/oizomA==", + "path": "microsoft.extensions.dependencyinjection/5.0.1", + "hashPath": "microsoft.extensions.dependencyinjection.5.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==", + "path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==", + "path": "microsoft.extensions.logging/5.0.0", + "hashPath": "microsoft.extensions.logging.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w==", + "path": "microsoft.extensions.logging.abstractions/5.0.0", + "hashPath": "microsoft.extensions.logging.abstractions.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Options/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==", + "path": "microsoft.extensions.options/5.0.0", + "hashPath": "microsoft.extensions.options.5.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==", + "path": "microsoft.extensions.primitives/5.0.0", + "hashPath": "microsoft.extensions.primitives.5.0.0.nupkg.sha512" + }, + "Microsoft.Identity.Client/4.14.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Etqux6Zuuv1yEN4UwKbAn6EZv0Rooc+vM4N9z7gxmeT7dyoKlXIRN44DQPzD9LV1CW0KsTVqH+2B42p1NKqPlQ==", + "path": "microsoft.identity.client/4.14.0", + "hashPath": "microsoft.identity.client.4.14.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.JsonWebTokens/5.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0q0U1W+gX1jmfmv7uU7GXFGB518atmSwucxsVwPGpuaGS3jwd2tUi+Gau+ezxR6oAFEBFKG9lz/fxRZzGMeDXg==", + "path": "microsoft.identitymodel.jsonwebtokens/5.6.0", + "hashPath": "microsoft.identitymodel.jsonwebtokens.5.6.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Logging/5.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zEDrfEVW5x5w2hbTV94WwAcWvtue5hNTXYqoPh3ypF6U8csm09JazEYy+VPp2RtczkyMfcsvWY9Fea17e+isYQ==", + "path": "microsoft.identitymodel.logging/5.6.0", + "hashPath": "microsoft.identitymodel.logging.5.6.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Protocols/5.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ei7YqYx0pIFL6JjK8ZnPK0MXZRWUNHtJPUl3KqSvj9+2f5CMa6GRSEC+BMDHr17tP6yujYUg0IQOcKzmC7qN5g==", + "path": "microsoft.identitymodel.protocols/5.6.0", + "hashPath": "microsoft.identitymodel.protocols.5.6.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect/5.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yh3n+uXiwpBy/5+t67tYcmRxb9kwQdaKRyG/DNipRMF37bg5Jr0vENOo1BQz6OySMl5WIK544SzPjtr7/KkucA==", + "path": "microsoft.identitymodel.protocols.openidconnect/5.6.0", + "hashPath": "microsoft.identitymodel.protocols.openidconnect.5.6.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Tokens/5.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-C3OqR3QfBQ7wcC7yAsdMQqay87OsV6yWPYG/Ai3n7dvmWIGkouQhXoVxRP0xz3cAFL4hxZBXyw4aLTC421PaMg==", + "path": "microsoft.identitymodel.tokens/5.6.0", + "hashPath": "microsoft.identitymodel.tokens.5.6.0.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "path": "microsoft.netcore.platforms/3.1.0", + "hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==", + "path": "microsoft.netcore.targets/1.1.3", + "hashPath": "microsoft.netcore.targets.1.1.3.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", + "path": "microsoft.win32.registry/4.7.0", + "hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512" + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mtVirZr++rq+XCDITMUdnETD59XoeMxSpLRIII7JRI6Yj0LEDiO1pPn0ktlnIj12Ix8bfvQqQDMMIF9wC98oCA==", + "path": "microsoft.win32.systemevents/4.7.0", + "hashPath": "microsoft.win32.systemevents.4.7.0.nupkg.sha512" + }, + "Newtonsoft.Json/10.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ebWzW9j2nwxQeBo59As2TYn7nYr9BHicqqCwHOD1Vdo+50HBtLPuqdiCYJcLdTRknpYis/DSEOQz5KmZxwrIAg==", + "path": "newtonsoft.json/10.0.1", + "hashPath": "newtonsoft.json.10.0.1.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", + "path": "system.collections.immutable/5.0.0", + "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512" + }, + "System.Collections.NonGeneric/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", + "path": "system.collections.nongeneric/4.3.0", + "hashPath": "system.collections.nongeneric.4.3.0.nupkg.sha512" + }, + "System.Collections.Specialized/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==", + "path": "system.collections.specialized/4.3.0", + "hashPath": "system.collections.specialized.4.3.0.nupkg.sha512" + }, + "System.ComponentModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", + "path": "system.componentmodel/4.3.0", + "hashPath": "system.componentmodel.4.3.0.nupkg.sha512" + }, + "System.ComponentModel.Annotations/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==", + "path": "system.componentmodel.annotations/5.0.0", + "hashPath": "system.componentmodel.annotations.5.0.0.nupkg.sha512" + }, + "System.ComponentModel.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", + "path": "system.componentmodel.primitives/4.3.0", + "hashPath": "system.componentmodel.primitives.4.3.0.nupkg.sha512" + }, + "System.ComponentModel.TypeConverter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==", + "path": "system.componentmodel.typeconverter/4.3.0", + "hashPath": "system.componentmodel.typeconverter.4.3.0.nupkg.sha512" + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/anOTeSZCNNI2zDilogWrZ8pNqCmYbzGNexUnNhjW8k0sHqEZ2nHJBp147jBV3hGYswu5lINpNg1vxR7bnqvVA==", + "path": "system.configuration.configurationmanager/4.7.0", + "hashPath": "system.configuration.configurationmanager.4.7.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/5.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uXQEYqav2V3zP6OwkOKtLv+qIi6z3m1hsGyKwXX7ZA7htT4shoVccGxnJ9kVRFPNAsi1ArZTq2oh7WOto6GbkQ==", + "path": "system.diagnostics.diagnosticsource/5.0.1", + "hashPath": "system.diagnostics.diagnosticsource.5.0.1.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Drawing.Common/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-v+XbyYHaZjDfn0ENmJEV1VYLgGgCTx1gnfOBcppowbpOAriglYgGCvFCPr2EEZyBvXlpxbEsTwkOlInl107ahA==", + "path": "system.drawing.common/4.7.0", + "hashPath": "system.drawing.common.4.7.0.nupkg.sha512" + }, + "System.Dynamic.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==", + "path": "system.dynamic.runtime/4.3.0", + "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IdentityModel.Tokens.Jwt/5.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMvPpX4exs2fe7Upq5zHMSR4yupc+jy8WG8yjucZL0XvT+r/T0hRvLIe9fP/SeN8/UVxFYBRAkRI5k1zbRGqmA==", + "path": "system.identitymodel.tokens.jwt/5.6.0", + "hashPath": "system.identitymodel.tokens.jwt.5.6.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Net.NameResolution/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==", + "path": "system.net.nameresolution/4.3.0", + "hashPath": "system.net.nameresolution.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Private.DataContractSerialization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yDaJ2x3mMmjdZEDB4IbezSnCsnjQ4BxinKhRAaP6kEgL6Bb6jANWphs5SzyD8imqeC/3FxgsuXT6ykkiH1uUmA==", + "path": "system.private.datacontractserialization/4.3.0", + "hashPath": "system.private.datacontractserialization.4.3.0.nupkg.sha512" + }, + "System.Private.Uri/4.3.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", + "path": "system.private.uri/4.3.2", + "hashPath": "system.private.uri.4.3.2.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.Caching/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NdvNRjTPxYvIEhXQszT9L9vJhdQoX6AQ0AlhjTU+5NqFQVuacJTfhPVAvtGWNA2OJCqRiR/okBcZgMwI6MqcZg==", + "path": "system.runtime.caching/4.7.0", + "hashPath": "system.runtime.caching.4.7.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/4.5.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==", + "path": "system.runtime.compilerservices.unsafe/4.5.2", + "hashPath": "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Formatters/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==", + "path": "system.runtime.serialization.formatters/4.3.0", + "hashPath": "system.runtime.serialization.formatters.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Json/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CpVfOH0M/uZ5PH+M9+Gu56K0j9lJw3M+PKRegTkcrY/stOIvRUeonggxNrfBYLA5WOHL2j15KNJuTuld3x4o9w==", + "path": "system.runtime.serialization.json/4.3.0", + "hashPath": "system.runtime.serialization.json.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==", + "path": "system.runtime.serialization.primitives/4.3.0", + "hashPath": "system.runtime.serialization.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "path": "system.security.accesscontrol/4.7.0", + "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==", + "path": "system.security.cryptography.cng/4.5.0", + "hashPath": "system.security.cryptography.cng.4.5.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==", + "path": "system.security.cryptography.protecteddata/4.7.0", + "hashPath": "system.security.cryptography.protecteddata.4.7.0.nupkg.sha512" + }, + "System.Security.Permissions/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==", + "path": "system.security.permissions/4.7.0", + "hashPath": "system.security.permissions.4.7.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "path": "system.security.principal.windows/4.7.0", + "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512" + }, + "System.Security.SecureString/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PnXp38O9q/2Oe4iZHMH60kinScv6QiiL2XH54Pj2t0Y6c2zKPEiAZsM/M3wBOHLNTBDFP0zfy13WN2M0qFz5jg==", + "path": "system.security.securestring/4.3.0", + "hashPath": "system.security.securestring.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aeu4FlaUTemuT1qOd1MyU4T516QR4Fy+9yDbwWMPHOHy7U8FD6SgTzdZFO7gHcfAPHtECqInbwklVvUK4RHcNg==", + "path": "system.text.encoding.codepages/4.7.0", + "hashPath": "system.text.encoding.codepages.4.7.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Windows.Extensions/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CeWTdRNfRaSh0pm2gDTJFwVaXfTq6Xwv/sA887iwPTneW7oMtMlpvDIO+U60+3GWTB7Aom6oQwv5VZVUhQRdPQ==", + "path": "system.windows.extensions/4.7.0", + "hashPath": "system.windows.extensions.4.7.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XmlDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==", + "path": "system.xml.xmldocument/4.3.0", + "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" + }, + "System.Xml.XmlSerializer/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MYoTCP7EZ98RrANESW05J5ZwskKDoN0AuZ06ZflnowE50LTpbR5yRg3tHckTVm5j/m47stuGgCrCHWePyHS70Q==", + "path": "system.xml.xmlserializer/4.3.0", + "hashPath": "system.xml.xmlserializer.4.3.0.nupkg.sha512" + }, + "Unity/5.11.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-B4+Ps3oqI78hJ+dAFsJhPkJT6qycsNExgLbtw7CEHSzKc2ac3YyUR8SHQ+ZyTwld/y5IbDx/aNOHnKE9Em1zWA==", + "path": "unity/5.11.10", + "hashPath": "unity.5.11.10.nupkg.sha512" + }, + "DatabaseCore/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "ModelTools/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "SecurityBusinessLogic/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.dll b/DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.dll new file mode 100644 index 0000000000000000000000000000000000000000..515f3ebfac45363d4fa0144c3ca1b123d84e7991 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/ref/SecurityImplementation.dll b/DepartmentPortal/ImplementationExtensions/net5.0/ref/SecurityImplementation.dll new file mode 100644 index 0000000000000000000000000000000000000000..12920806231a1d0da0771640eeff929c330f0a76 GIT binary patch literal 7168 zcmeHLU5pdg6+YwfdcB4eQ6&`zjJ0h z9`8abA|X`~*E-+5=V!iq@40ubXXe1MZ<9_$Nywc$L|0IA85I0@I1hLBv8!2nr|aGI zSG4hW*H4`^y?otus;*JXmkrx?{QRuSyA3;U+WFCgrF_k)s6uylW(3`p4?^+~_HdmD#?1yEzmzwCp`z1?7lnj*m`v)ZVk1?+ zdypF^h~DHxEG*}VmcsTd;y$y`_i_4QG<1ndLw`0FU#OiiE6`;~c{DJW=D5+4GDtLB z@YOjV+Ap&J803N!>R8ER^aa;*%dp8DPN2a#SP6-hK`<0tWjP4sInj9t_qzrXD}(4a zrao+biZk$c^Z4(7^S3|jdn+?@ZS6CEyznWW>cgqsB?GVXxr)MPQ-V5ZYLMuk-9#E2 zKS9a#eT{}o`-ioVfzO#U+X@4Ptpi&(?_k0XvVbQ$iTb}z^e5Es;H>H|`L1bKJ&t%8 z7xD4cKV6~=X!9A_zi+xYiuw}tBN$x&u;t7`=Yk_ldu|n_yZ9{ox3-nfJs$r$2p?^I zkk3JwrwalKdJMvSa2y}|97FU4J(zcju4*6ZDcYD|?9+azFQat`PtiwW-=mEsQj|@+ z0`K=U#v_6a!M_M@68uTBq-W@u{%1W)zonm{Jx$zxGqF3FrA~c!GDGY1r;{oA7kvo( z_YspNPrUC5en%`b(*CvJFU0byv_As!$WJj~HvH?MTGG?EN80b`r6g;*_}&P$v}oTA zwQkX_hFXqvtp^q&zHXIh{AaQqxn3>WQ=;kg2dyWoqI_Rdh6gx!=wU<_3(p%b1?H0L_@1}N}=CNAM>n=jmBkcwvlWi;=k?$6r z$35D-?lyfBBWP+Dp>;;u4Me6xEf`BzkG%mkkkTX5(-C``}}?6qBx6n5D(B!eAg zK(esZAUW)fOE_zLfhn9JmvAmVDecX`9$e2jBv=&uvfxocL+}T{6cw3YTR6^*!xt5Ibs)|^`1w3NF~*~*2zGUVe)Wws#^vyE!in6*^P zHspD#HfzmKnSR_nWw=%4@5O7eI_tP!T^zp`eH>P+?wITX;}A+8gcA7 zv)aHQ+em^5h;dR`#yM$ui#s{wBJX9t<(O1+%2jq*HRsfFH7(3-*z+w%m`btx=B#O9 z?ONXUd>6u*V6lkTa-Z^tO}hdWJ3v{qXh|0a@X9W<1q-~;8f=ySL642o)_<^Z+HKAK z({4Rj=dFRPPb#lr`N8n{ONSM0;9{+ADc+tESEyKU$?l_KyKC&6uWa51_qa5?tbo6N08zEe{Hdg82UIU3|JAPF(?s3PcC^yPTi>Ezhg?81WgR`fQ8acKWz27GD znwHk{q;;Ut+skS;y&^Z1$c^QSLE~udc+gNeGiaR7HPUbInfXTV`kk#Msn`mEdh2i@wOt zVf^jj$O(MMUAqE*C~)(PlE;NIY?EBz|@kN*VEKg}nZpxzVm z@Iy`_Y&WY>G&Hapc#GLfCcY;qaN2lVawKE}o^6Px;5A_N;5W!eoC7T=Zzq2YQVnDB z5oN+&y$jRJ5;K5jwBWZ5?`p^aM!yQzj)1R5b?IXsHUpXx`V#6gHH6v6dsk87c$6Gr zqtEv792UOjOhyso;d&ldy=~n0%R7JrM2qHi7`!f+TY1=w=i`A$c(v9do-^r7tc`J6 zv6 + /// Для вывода списка доступов по роли в контроле десктопном + /// + public string RoleName { get; set; } } ///

diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/AccessBusinessLogic.cs b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/AccessBusinessLogic.cs index 0c7cfec..25e4196 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/AccessBusinessLogic.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/AccessBusinessLogic.cs @@ -1,6 +1,6 @@ using ModelTools.BusinessLogics; using ModelTools.Enums; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/EnviromentSettingBusinessLogic.cs b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/EnviromentSettingBusinessLogic.cs index 7f54e26..c4f0a1f 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/EnviromentSettingBusinessLogic.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/EnviromentSettingBusinessLogic.cs @@ -1,6 +1,6 @@ using ModelTools.BusinessLogics; using ModelTools.Enums; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/RoleBusinessLogic.cs b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/RoleBusinessLogic.cs index 26a4e15..b9e212a 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/RoleBusinessLogic.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/RoleBusinessLogic.cs @@ -1,6 +1,6 @@ using ModelTools.BusinessLogics; using ModelTools.Enums; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/UserBusinessLogic.cs b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/UserBusinessLogic.cs index ff84eaf..649a73a 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/UserBusinessLogic.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/BusinessLogics/UserBusinessLogic.cs @@ -1,6 +1,6 @@ using ModelTools.BusinessLogics; using ModelTools.Enums; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/AccessViewModels.cs b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/AccessViewModels.cs index 3ae3438..5289215 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/AccessViewModels.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/AccessViewModels.cs @@ -15,26 +15,23 @@ namespace SecurityBusinessLogic.ViewModels /// public class AccessViewModel : ElementViewModel { - [ViewModelProperty("Роль", false, true)] [MapConfiguration("RoleId")] public Guid RoleId { get; set; } - [ViewModelProperty("Роль", true, false, 100)] + [ViewModelOnListProperty("Роль", 100)] [MapConfiguration("Role.RoleName", true)] public string RoleName { get; set; } - [ViewModelProperty("Операция", false, true)] [MapConfiguration("AccessOperation")] public AccessOperation AccessOperation { get; set; } - [ViewModelProperty("Операция", true, false)] + [ViewModelOnListProperty("Операция")] public string AccessOperationTitle => AccessOperation.ToString("G"); - [ViewModelProperty("Тип", false, true)] [MapConfiguration("AccessType")] public AccessType AccessType { get; set; } - [ViewModelProperty("Тип", true, false, 50)] + [ViewModelOnListProperty("Тип", 150)] public string AccessTypeTitle => AccessType.ToString("G"); public override string ToString() => $"{RoleName}-{AccessOperationTitle}({AccessTypeTitle})"; diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/EnviromentSettingViewModels.cs b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/EnviromentSettingViewModels.cs index 20d6262..912ac96 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/EnviromentSettingViewModels.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/EnviromentSettingViewModels.cs @@ -13,11 +13,11 @@ namespace SecurityBusinessLogic.ViewModels /// public class EnviromentSettingViewModel : ElementViewModel { - [ViewModelProperty("Ключ", true, true)] + [ViewModelOnListProperty("Ключ")] [MapConfiguration("Key")] public string Key { get; set; } - [ViewModelProperty("Значение", true, true, 100)] + [ViewModelOnListProperty("Значение", 100)] [MapConfiguration("Value")] public int Value { get; set; } diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/RoleViewModels.cs b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/RoleViewModels.cs index e55dad6..bee9b6f 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/RoleViewModels.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/RoleViewModels.cs @@ -13,11 +13,11 @@ namespace SecurityBusinessLogic.ViewModels /// public class RoleViewModel : ElementViewModel { - [ViewModelProperty("Название роли", true, true)] + [ViewModelOnListProperty("Название роли")] [MapConfiguration("RoleName")] public string RoleName { get; set; } - [ViewModelProperty("Приоритет", true, true, 100)] + [ViewModelOnListProperty("Приоритет", 100)] [MapConfiguration("RolePriority")] public int RolePriority { get; set; } diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/UserViewModels.cs b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/UserViewModels.cs index 56c8933..e6e4a36 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/UserViewModels.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/ViewModels/UserViewModels.cs @@ -14,45 +14,38 @@ namespace SecurityBusinessLogic.ViewModels /// public class UserViewModel : ElementViewModel { - [ViewModelProperty("Пользователь", true, true)] + [ViewModelOnListProperty("Пользователь")] [MapConfiguration("UserName")] public string Login { get; set; } - [ViewModelProperty("Студент", false, true)] [MapConfiguration("StudentId")] public Guid? StudentId { get; set; } - [ViewModelProperty("Преподаватель", false, true)] [MapConfiguration("LecturerId")] public Guid? LecturerId { get; set; } - [ViewModelProperty("Сотрудник", false, true)] [MapConfiguration("EmployeeId")] public Guid? EmployeeId { get; set; } - [ViewModelProperty("Фото", false, true)] [MapConfiguration("Avatar")] public byte[] Avatar { get; set; } - [ViewModelProperty("Посл. визит", true, false, 100)] + [ViewModelOnListProperty("Посл. визит", 100)] [MapConfiguration("DateLastVisit")] public DateTime? DateLastVisit { get; set; } - [ViewModelProperty("Блокировка", false, true)] [MapConfiguration("IsBanned")] public bool IsBanned { get; set; } - [ViewModelProperty("Блокир.", true, false, 100)] + [ViewModelOnListProperty("Блокир.", 80)] public string Banned => IsBanned ? "Да" : "Нет"; - [ViewModelProperty("Дата Б.", false, true, 100)] [MapConfiguration("DateBanned")] public DateTime? DateBanned { get; set; } - [ViewModelProperty("Дата Б.", true, false, 100)] + [ViewModelOnListProperty("Дата Б.", 100)] public string DateBannedTitle => DateBanned.HasValue ? DateBanned.Value.ToShortDateString() : string.Empty; - [ViewModelProperty("Количество попыток входа", false, false)] [MapConfiguration("CountAttempt")] public int CountAttempt { get; set; } diff --git a/DepartmentPortal/Security/SecurityImplementation/Implementations/AccessService.cs b/DepartmentPortal/Security/SecurityImplementation/Implementations/AccessService.cs index 27caa61..a5a3495 100644 --- a/DepartmentPortal/Security/SecurityImplementation/Implementations/AccessService.cs +++ b/DepartmentPortal/Security/SecurityImplementation/Implementations/AccessService.cs @@ -3,7 +3,8 @@ using DatabaseCore.Models.Security; using Microsoft.EntityFrameworkCore; using ModelTools.BusinessLogics; using ModelTools.Enums; -using ModelTools.OperationResultModels; +using ModelTools.Extensions; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; @@ -21,7 +22,7 @@ namespace SecurityImplementation.Implementations { using var context = DatabaseManager.GetContext; - var exsistEntity = context.Accesses.FirstOrDefault(x => x.Operation == model.Operation && x.RoleId == model.RoleId && x.AccessType == model.AccessType); + var exsistEntity = context.Accesses.FirstOrDefault(x => x.AccessOperation == model.Operation && x.RoleId == model.RoleId && x.AccessType == model.AccessType); if (exsistEntity == null) { var entity = Mapper.MapToClass(model); @@ -86,8 +87,12 @@ namespace SecurityImplementation.Implementations { query = query.Where(x => x.RoleId == model.RoleId); } + if(model.RoleName.IsNotEmpty()) + { + query = query.Where(x => x.Role.RoleName == model.RoleName); + } - query = query.OrderBy(x => x.Role.RoleName).ThenBy(x => x.Operation).ThenBy(x => x.AccessType); + query = query.OrderBy(x => x.Role.RoleName).ThenBy(x => x.AccessOperation).ThenBy(x => x.AccessType); if (model.PageNumber.HasValue && model.PageSize.HasValue) { diff --git a/DepartmentPortal/Security/SecurityImplementation/Implementations/EnviromentSettingService.cs b/DepartmentPortal/Security/SecurityImplementation/Implementations/EnviromentSettingService.cs index 01ea3d0..885bed4 100644 --- a/DepartmentPortal/Security/SecurityImplementation/Implementations/EnviromentSettingService.cs +++ b/DepartmentPortal/Security/SecurityImplementation/Implementations/EnviromentSettingService.cs @@ -3,7 +3,7 @@ using DatabaseCore.Models.Security; using ModelTools.BusinessLogics; using ModelTools.Enums; using ModelTools.Extensions; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityImplementation/Implementations/RoleService.cs b/DepartmentPortal/Security/SecurityImplementation/Implementations/RoleService.cs index 80b19b4..b9f0267 100644 --- a/DepartmentPortal/Security/SecurityImplementation/Implementations/RoleService.cs +++ b/DepartmentPortal/Security/SecurityImplementation/Implementations/RoleService.cs @@ -2,7 +2,7 @@ using DatabaseCore.Models.Security; using ModelTools.BusinessLogics; using ModelTools.Enums; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityImplementation/Implementations/UserService.cs b/DepartmentPortal/Security/SecurityImplementation/Implementations/UserService.cs index 142698c..613e2d9 100644 --- a/DepartmentPortal/Security/SecurityImplementation/Implementations/UserService.cs +++ b/DepartmentPortal/Security/SecurityImplementation/Implementations/UserService.cs @@ -3,7 +3,7 @@ using DatabaseCore.Models.Security; using ModelTools.BusinessLogics; using ModelTools.Enums; using ModelTools.Extensions; -using ModelTools.OperationResultModels; +using ModelTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using SecurityBusinessLogic.ViewModels; diff --git a/DepartmentPortal/Security/SecurityImplementation/SecurityImplementation.csproj b/DepartmentPortal/Security/SecurityImplementation/SecurityImplementation.csproj index d808588..643705d 100644 --- a/DepartmentPortal/Security/SecurityImplementation/SecurityImplementation.csproj +++ b/DepartmentPortal/Security/SecurityImplementation/SecurityImplementation.csproj @@ -5,7 +5,7 @@ - ..\..\Extensions\ + ..\..\ImplementationExtensions\ diff --git a/DepartmentPortal/Security/SecurityImplementation/SecurityLoaderExtensions.cs b/DepartmentPortal/Security/SecurityImplementation/SecurityLoaderExtensions.cs index b9767c4..217b093 100644 --- a/DepartmentPortal/Security/SecurityImplementation/SecurityLoaderExtensions.cs +++ b/DepartmentPortal/Security/SecurityImplementation/SecurityLoaderExtensions.cs @@ -6,7 +6,7 @@ using SecurityImplementation.Implementations; namespace SecurityImplementation { - public class SecurityLoaderExtensions : ILoaderExtensions + public class SecurityLoaderExtensions : IImplementationExtension { public void RegisterServices() { diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.Designer.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.Designer.cs new file mode 100644 index 0000000..b6b52e0 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.Designer.cs @@ -0,0 +1,33 @@ + +namespace SecurityWindowsDesktop.Controls +{ + partial class AccessesControl + { + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.cs new file mode 100644 index 0000000..c31c219 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.cs @@ -0,0 +1,43 @@ +using DesktopTools.Controls; +using DesktopTools.Models; +using ModelTools.BusinessLogics; +using ModelTools.Enums; +using SecurityBusinessLogic.BindingModels; +using SecurityBusinessLogic.BusinessLogics; +using SecurityBusinessLogic.ViewModels; +using System; +using System.Data; +using System.Linq; + +namespace SecurityWindowsDesktop.Controls +{ + public partial class AccessesControl : AbstractGenerticControlEntityList + { + private readonly RoleBusinessLogic _roleBusinessLogic; + + public AccessesControl() + { + InitializeComponent(); + _businessLogic = UnityContainerConfigurator.Resolve(); + _roleBusinessLogic = UnityContainerConfigurator.Resolve(); + Title = "Доступы"; + Id = new Guid("6eebc4c4-cb86-4368-93e0-33dbdbb7409a"); + Order = 1; + AccessOperation = AccessOperation.Доступы; + } + + public override ControlViewEntityList Clone() => new AccessesControl() { Id = Guid.NewGuid() }; + + protected override ControlViewEntityListConfiguration GetConfig() => new() + { + PaginationOn = true, + PageNamesForPagination = _roleBusinessLogic.GetList(new RoleGetBindingModel())?.List?.Select(x => x.RoleName)?.ToList() + }; + + protected override AccessListViewModel GetDataWithPageName(string key) + { + var list = _businessLogic.GetList(new AccessGetBindingModel { RoleName = key }); + return list; + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.resx b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/AccessesControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.Designer.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.Designer.cs new file mode 100644 index 0000000..8027646 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.Designer.cs @@ -0,0 +1,33 @@ + +namespace SecurityWindowsDesktop.Controls +{ + partial class EnviromentSettingControl + { + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.cs new file mode 100644 index 0000000..af9e597 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.cs @@ -0,0 +1,37 @@ +using DesktopTools.Controls; +using DesktopTools.Models; +using ModelTools.BusinessLogics; +using ModelTools.Enums; +using SecurityBusinessLogic.BindingModels; +using SecurityBusinessLogic.BusinessLogics; +using SecurityBusinessLogic.ViewModels; +using System; + +namespace SecurityWindowsDesktop.Controls +{ + public partial class EnviromentSettingControl : AbstractGenerticControlEntityList + { + public EnviromentSettingControl() + { + InitializeComponent(); + _businessLogic = UnityContainerConfigurator.Resolve(); + Title = "Настройки Среды"; + Id = new Guid("b3865c23-b1db-475b-b95c-aa51edc60388"); + Order = 1; + AccessOperation = AccessOperation.НастройкиСреды; + } + + public override ControlViewEntityList Clone() => new EnviromentSettingControl() { Id = Guid.NewGuid() }; + + protected override ControlViewEntityListConfiguration GetConfig() => new() + { + PaginationOn = false + }; + + protected override EnviromentSettingListViewModel GetData() + { + var list = _businessLogic.GetList(new EnviromentSettingGetBindingModel()); + return list; + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.resx b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/EnviromentSettingControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.Designer.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.Designer.cs new file mode 100644 index 0000000..83fd87c --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.Designer.cs @@ -0,0 +1,33 @@ + +namespace SecurityWindowsDesktop.Controls +{ + partial class RolesControl + { + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.cs new file mode 100644 index 0000000..3f78267 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.cs @@ -0,0 +1,37 @@ +using DesktopTools.Controls; +using DesktopTools.Models; +using ModelTools.BusinessLogics; +using ModelTools.Enums; +using SecurityBusinessLogic.BindingModels; +using SecurityBusinessLogic.BusinessLogics; +using SecurityBusinessLogic.ViewModels; +using System; + +namespace SecurityWindowsDesktop.Controls +{ + public partial class RolesControl : AbstractGenerticControlEntityList + { + public RolesControl() : base() + { + InitializeComponent(); + _businessLogic = UnityContainerConfigurator.Resolve(); + Title = "Роли"; + Id = new Guid("6a33ce5c-e950-4294-9f75-2a0b35941bf7"); + Order = 1; + AccessOperation = AccessOperation.Роли; + } + + public override ControlViewEntityList Clone() => new RolesControl() { Id = Guid.NewGuid() }; + + protected override ControlViewEntityListConfiguration GetConfig() => new() + { + PaginationOn = false + }; + + protected override RoleListViewModel GetData() + { + var list = _businessLogic.GetList(new RoleGetBindingModel()); + return list; + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.resx b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/RolesControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.Designer.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.Designer.cs new file mode 100644 index 0000000..cda88f6 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.Designer.cs @@ -0,0 +1,33 @@ + +namespace SecurityWindowsDesktop.Controls +{ + partial class UsersControl + { + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.cs new file mode 100644 index 0000000..72a06de --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.cs @@ -0,0 +1,42 @@ +using DesktopTools.Controls; +using DesktopTools.Models; +using ModelTools.BusinessLogics; +using ModelTools.Enums; +using SecurityBusinessLogic.BindingModels; +using SecurityBusinessLogic.BusinessLogics; +using SecurityBusinessLogic.ViewModels; +using System; + +namespace SecurityWindowsDesktop.Controls +{ + public partial class UsersControl : AbstractGenerticControlEntityList + { + public UsersControl() : base() + { + InitializeComponent(); + _businessLogic = UnityContainerConfigurator.Resolve(); + Title = "Пользователи"; + Id = new Guid("d5596997-d1f5-4e5e-b94b-6bdd6bca3452"); + Order = 1; + AccessOperation = AccessOperation.Пользователи; + } + + public override ControlViewEntityList Clone() => new UsersControl() { Id = Guid.NewGuid() }; + + protected override ControlViewEntityListConfiguration GetConfig() => new() + { + PaginationOn = true, + CountElementsOnPage = 40 + }; + + protected override UserListViewModel GetDataWithPageNumber(int page, int count) + { + var list = _businessLogic.GetList(new UserGetBindingModel + { + PageNumber = page, + PageSize = count + }); + return list; + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.resx b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/Controls/UsersControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs new file mode 100644 index 0000000..cf83284 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs @@ -0,0 +1,59 @@ +using DesktopTools.Controls; +using ModelTools.BindingModels; +using ModelTools.BusinessLogics; +using ModelTools.Enums; +using ModelTools.Interfaces; +using ModelTools.Models; +using SecurityBusinessLogic.BusinessLogics; +using SecurityWindowsDesktop.Controls; +using System.Collections.Generic; + +namespace SecurityWindowsDesktop +{ + public class SecurityWindowDesktopExtension : IWindowDesktopExtension + { + public List GetListControlEntityList() + { + var manager = UnityContainerConfigurator.Resolve(); + if (manager == null) + { + return null; + } + + if (!manager.CheckAccess(new SecurityManagerCheckAccessModel(new AccessBindingModel { UserId = UserManager.GetInstance.UserId }, + AccessOperation.Администрирование, AccessType.SimpleView, "Администрирование"))) + { + return null; + } + + var list = new List + { + new WindowDesktopExtensionControlModel { Order = 0, Title = "Администрирование" } + }; + List _controls = new() + { + new UsersControl(), + new RolesControl(), + new AccessesControl(), + new EnviromentSettingControl() + }; + + foreach (var cntrl in _controls) + { + if (manager.CheckAccess(new SecurityManagerCheckAccessModel(new AccessBindingModel { UserId = UserManager.GetInstance.UserId }, + cntrl.AccessOperation, AccessType.SimpleView, cntrl.Title))) + { + list.Add(new WindowDesktopExtensionControlModel + { + Id = cntrl.Id, + Order = cntrl.Order, + Title = cntrl.Title, + Control = cntrl + }); + } + } + + return list; + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowsDesktop.csproj b/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowsDesktop.csproj new file mode 100644 index 0000000..d74a1a4 --- /dev/null +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowsDesktop.csproj @@ -0,0 +1,24 @@ + + + + net5.0-windows + true + + + + ..\..\WindowDestopExtensions\ + + + + + + + + + + + + + + + diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/DesktopTools.dll b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/DesktopTools.dll new file mode 100644 index 0000000000000000000000000000000000000000..3b55ff09576a0ec8497507e2d3e03e677329a8d8 GIT binary patch literal 67584 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 HIq-h~)KFPT literal 0 HcmV?d00001 diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ModelTools.dll b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ModelTools.dll new file mode 100644 index 0000000000000000000000000000000000000000..aeed428af023dcc952176ba2f59b2ea8f5ed27f7 GIT binary patch literal 21504 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 literal 0 HcmV?d00001 diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.deps.json b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.deps.json new file mode 100644 index 0000000..2aaad0a --- /dev/null +++ b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.deps.json @@ -0,0 +1,96 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v5.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v5.0": { + "SecurityWindowsDesktop/1.0.0": { + "dependencies": { + "DesktopTools": "1.0.0", + "SecurityBusinessLogic": "1.0.0" + }, + "runtime": { + "SecurityWindowsDesktop.dll": {} + } + }, + "System.Runtime.CompilerServices.Unsafe/4.5.2": {}, + "Unity/5.11.10": { + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + }, + "runtime": { + "lib/netcoreapp3.0/Unity.Abstractions.dll": { + "assemblyVersion": "5.11.7.0", + "fileVersion": "5.11.7.0" + }, + "lib/netcoreapp3.0/Unity.Container.dll": { + "assemblyVersion": "5.11.11.0", + "fileVersion": "5.11.11.0" + } + } + }, + "DesktopTools/1.0.0": { + "dependencies": { + "ModelTools": "1.0.0" + }, + "runtime": { + "DesktopTools.dll": {} + } + }, + "ModelTools/1.0.0": { + "dependencies": { + "Unity": "5.11.10" + }, + "runtime": { + "ModelTools.dll": {} + } + }, + "SecurityBusinessLogic/1.0.0": { + "dependencies": { + "ModelTools": "1.0.0" + }, + "runtime": { + "SecurityBusinessLogic.dll": {} + } + } + } + }, + "libraries": { + "SecurityWindowsDesktop/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "System.Runtime.CompilerServices.Unsafe/4.5.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==", + "path": "system.runtime.compilerservices.unsafe/4.5.2", + "hashPath": "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512" + }, + "Unity/5.11.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-B4+Ps3oqI78hJ+dAFsJhPkJT6qycsNExgLbtw7CEHSzKc2ac3YyUR8SHQ+ZyTwld/y5IbDx/aNOHnKE9Em1zWA==", + "path": "unity/5.11.10", + "hashPath": "unity.5.11.10.nupkg.sha512" + }, + "DesktopTools/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "ModelTools/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "SecurityBusinessLogic/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.dll b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.dll new file mode 100644 index 0000000000000000000000000000000000000000..58b2dd71bc49f50c7f3d96075a943cc0b5188927 GIT binary patch literal 11264 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 literal 0 HcmV?d00001