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 0000000..a8a65a4 Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Add.png differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Clear.png b/DepartmentPortal/Common/DesktopTools/Resources/Clear.png new file mode 100644 index 0000000..13a8f6b Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Clear.png differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Close.png b/DepartmentPortal/Common/DesktopTools/Resources/Close.png new file mode 100644 index 0000000..d88c7a0 Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Close.png differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Del.png b/DepartmentPortal/Common/DesktopTools/Resources/Del.png new file mode 100644 index 0000000..8bea0a5 Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Del.png differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Down.jpg b/DepartmentPortal/Common/DesktopTools/Resources/Down.jpg new file mode 100644 index 0000000..459843a Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Down.jpg differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Left.jpg b/DepartmentPortal/Common/DesktopTools/Resources/Left.jpg new file mode 100644 index 0000000..2751d9e Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Left.jpg differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Ref.png b/DepartmentPortal/Common/DesktopTools/Resources/Ref.png new file mode 100644 index 0000000..bba907b Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Ref.png differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Right.jpg b/DepartmentPortal/Common/DesktopTools/Resources/Right.jpg new file mode 100644 index 0000000..98f4e4e Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Right.jpg differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Search.png b/DepartmentPortal/Common/DesktopTools/Resources/Search.png new file mode 100644 index 0000000..f4099aa Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Search.png differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Up.jpg b/DepartmentPortal/Common/DesktopTools/Resources/Up.jpg new file mode 100644 index 0000000..0a75a82 Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Up.jpg differ diff --git a/DepartmentPortal/Common/DesktopTools/Resources/Upd.png b/DepartmentPortal/Common/DesktopTools/Resources/Upd.png new file mode 100644 index 0000000..b9f99e9 Binary files /dev/null and b/DepartmentPortal/Common/DesktopTools/Resources/Upd.png differ 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 c57f744..a92f19b 100644 Binary files a/DepartmentPortal/Extensions/net5.0/DatabaseCore.dll and b/DepartmentPortal/Extensions/net5.0/DatabaseCore.dll differ diff --git a/DepartmentPortal/Extensions/net5.0/ModelTools.dll b/DepartmentPortal/Extensions/net5.0/ModelTools.dll index f6de6c2..8669058 100644 Binary files a/DepartmentPortal/Extensions/net5.0/ModelTools.dll and b/DepartmentPortal/Extensions/net5.0/ModelTools.dll differ diff --git a/DepartmentPortal/Extensions/net5.0/SecurityBusinessLogic.dll b/DepartmentPortal/Extensions/net5.0/SecurityBusinessLogic.dll index 522d2d8..30898f3 100644 Binary files a/DepartmentPortal/Extensions/net5.0/SecurityBusinessLogic.dll and b/DepartmentPortal/Extensions/net5.0/SecurityBusinessLogic.dll differ diff --git a/DepartmentPortal/Extensions/net5.0/SecurityImplementation.dll b/DepartmentPortal/Extensions/net5.0/SecurityImplementation.dll index 1af8b4b..efea6be 100644 Binary files a/DepartmentPortal/Extensions/net5.0/SecurityImplementation.dll and b/DepartmentPortal/Extensions/net5.0/SecurityImplementation.dll differ diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/DatabaseCore.dll b/DepartmentPortal/ImplementationExtensions/net5.0/DatabaseCore.dll new file mode 100644 index 0000000..5dd1257 Binary files /dev/null and b/DepartmentPortal/ImplementationExtensions/net5.0/DatabaseCore.dll differ diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/ModelTools.dll b/DepartmentPortal/ImplementationExtensions/net5.0/ModelTools.dll new file mode 100644 index 0000000..aeed428 Binary files /dev/null and b/DepartmentPortal/ImplementationExtensions/net5.0/ModelTools.dll differ diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/SecurityBusinessLogic.dll b/DepartmentPortal/ImplementationExtensions/net5.0/SecurityBusinessLogic.dll new file mode 100644 index 0000000..e65d9c8 Binary files /dev/null and b/DepartmentPortal/ImplementationExtensions/net5.0/SecurityBusinessLogic.dll differ 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 0000000..515f3eb Binary files /dev/null and b/DepartmentPortal/ImplementationExtensions/net5.0/SecurityImplementation.dll differ diff --git a/DepartmentPortal/ImplementationExtensions/net5.0/ref/SecurityImplementation.dll b/DepartmentPortal/ImplementationExtensions/net5.0/ref/SecurityImplementation.dll new file mode 100644 index 0000000..1292080 Binary files /dev/null and b/DepartmentPortal/ImplementationExtensions/net5.0/ref/SecurityImplementation.dll differ diff --git a/DepartmentPortal/Security/SecurityBusinessLogic/BindingModels/AccessBindingModels.cs b/DepartmentPortal/Security/SecurityBusinessLogic/BindingModels/AccessBindingModels.cs index 4a14227..21a3b24 100644 --- a/DepartmentPortal/Security/SecurityBusinessLogic/BindingModels/AccessBindingModels.cs +++ b/DepartmentPortal/Security/SecurityBusinessLogic/BindingModels/AccessBindingModels.cs @@ -11,6 +11,11 @@ namespace SecurityBusinessLogic.BindingModels public class AccessGetBindingModel : GetBindingModel { public Guid? RoleId { get; set; } + + /// + /// Для вывода списка доступов по роли в контроле десктопном + /// + 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 0000000..3b55ff0 Binary files /dev/null and b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/DesktopTools.dll differ diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ModelTools.dll b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ModelTools.dll new file mode 100644 index 0000000..aeed428 Binary files /dev/null and b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ModelTools.dll differ diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityBusinessLogic.dll b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityBusinessLogic.dll new file mode 100644 index 0000000..e65d9c8 Binary files /dev/null and b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityBusinessLogic.dll differ 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 0000000..58b2dd7 Binary files /dev/null and b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/SecurityWindowsDesktop.dll differ diff --git a/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ref/SecurityWindowsDesktop.dll b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ref/SecurityWindowsDesktop.dll new file mode 100644 index 0000000..54e4915 Binary files /dev/null and b/DepartmentPortal/WindowDestopExtensions/net5.0-windows/ref/SecurityWindowsDesktop.dll differ