From 3aef211b943b7823eddc4f1f6d3203cbbb0e1f5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Tue, 1 Feb 2022 14:31:26 +0500 Subject: [PATCH] Add Roles Related Dictionaries --- ...13_AddRolesRelatedDictionaries.Designer.cs | 4233 +++++++++++++++++ ...20201071113_AddRolesRelatedDictionaries.cs | 1261 +++++ .../AsbCloudDbContextModelSnapshot.cs | 1108 ++++- AsbCloudDb/Model/AsbCloudDbContext.cs | 186 +- AsbCloudWebApi/Docs/Create permissions.ods | Bin 45710 -> 45098 bytes 5 files changed, 6783 insertions(+), 5 deletions(-) create mode 100644 AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.Designer.cs create mode 100644 AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.cs diff --git a/AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.Designer.cs b/AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.Designer.cs new file mode 100644 index 00000000..bc4469e8 --- /dev/null +++ b/AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.Designer.cs @@ -0,0 +1,4233 @@ +// +using System; +using System.Collections.Generic; +using AsbCloudDb.Model; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace AsbCloudDb.Migrations +{ + [DbContext(typeof(AsbCloudDbContext))] + [Migration("20220201071113_AddRolesRelatedDictionaries")] + partial class AddRolesRelatedDictionaries + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseCollation("Russian_Russia.1251") + .HasAnnotation("ProductVersion", "6.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("IdDeposit") + .HasColumnType("integer") + .HasColumnName("id_deposit"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex("IdDeposit"); + + b.ToTable("t_cluster"); + + b.HasComment("Кусты"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCompanyType") + .HasMaxLength(255) + .HasColumnType("integer") + .HasColumnName("id_company_type") + .HasComment("вид деятельности"); + + b.HasKey("Id"); + + b.HasIndex("IdCompanyType"); + + b.ToTable("t_company"); + + b.HasData( + new + { + Id = 1, + Caption = "ООО \"АСБ\"", + IdCompanyType = 3 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.HasKey("Id"); + + b.ToTable("t_company_type"); + + b.HasData( + new + { + Id = 1, + Caption = "Недрапользователь" + }, + new + { + Id = 2, + Caption = "Буровой подрядчик" + }, + new + { + Id = 3, + Caption = "Сервис автоматизации бурения" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.ToTable("t_deposit"); + + b.HasComment("Месторождение"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillFlowChart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AxialLoadMax") + .HasColumnType("double precision") + .HasColumnName("axial_load_max") + .HasComment("Максимальная нагрузка"); + + b.Property("AxialLoadMin") + .HasColumnType("double precision") + .HasColumnName("axial_load_min") + .HasComment("Минимальная нагрузка"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина окончания интервала"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Стартовая глубина"); + + b.Property("FlowMax") + .HasColumnType("double precision") + .HasColumnName("flow_max") + .HasComment("Максимальный расход"); + + b.Property("FlowMin") + .HasColumnType("double precision") + .HasColumnName("flow_min") + .HasComment("Минимальный расход"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("well_id") + .HasComment("Id скважины"); + + b.Property("IdWellOperationCategory") + .HasColumnType("integer") + .HasColumnName("id_operation_category") + .HasComment("Id типа операции"); + + b.Property("LastUpdate") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_update") + .HasComment("Дата последнего изменения"); + + b.Property("PressureMax") + .HasColumnType("double precision") + .HasColumnName("pressure_max") + .HasComment("Максимальное давление"); + + b.Property("PressureMin") + .HasColumnType("double precision") + .HasColumnName("pressure_min") + .HasComment("Минимальное давление"); + + b.Property("RotorSpeedMax") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_max") + .HasComment("Максимальные обороты на ВСП"); + + b.Property("RotorSpeedMin") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_min") + .HasComment("Минимальные обороты на ВСП"); + + b.Property("RotorTorqueMax") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_max") + .HasComment("Максимальный момент на ВСП"); + + b.Property("RotorTorqueMin") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_min") + .HasComment("Минимальный момент на ВСП"); + + b.HasKey("Id"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellOperationCategory"); + + b.ToTable("t_drill_flow_chart"); + + b.HasComment("Параметры коридоров бурения (диапазоны параметров бурения)"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillParams", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AxialLoadAvg") + .HasColumnType("double precision") + .HasColumnName("axial_load_avg") + .HasComment("Средняя нагрузка"); + + b.Property("AxialLoadMax") + .HasColumnType("double precision") + .HasColumnName("axial_load_max") + .HasComment("Максимальная нагрузка"); + + b.Property("AxialLoadMin") + .HasColumnType("double precision") + .HasColumnName("axial_load_min") + .HasComment("Минимальная нагрузка"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина окончания интервала"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Стартовая глубина"); + + b.Property("FlowAvg") + .HasColumnType("double precision") + .HasColumnName("flow_avg") + .HasComment("Средний расход"); + + b.Property("FlowMax") + .HasColumnType("double precision") + .HasColumnName("flow_max") + .HasComment("Максимальный расход"); + + b.Property("FlowMin") + .HasColumnType("double precision") + .HasColumnName("flow_min") + .HasComment("Минимальный расход"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("well_id") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_wellsection_type") + .HasComment("Id с типом секции скважины"); + + b.Property("PressureAvg") + .HasColumnType("double precision") + .HasColumnName("pressure_avg") + .HasComment("Среднее давление"); + + b.Property("PressureMax") + .HasColumnType("double precision") + .HasColumnName("pressure_max") + .HasComment("Максимальное давление"); + + b.Property("PressureMin") + .HasColumnType("double precision") + .HasColumnName("pressure_min") + .HasComment("Минимальное давление"); + + b.Property("RotorSpeedAvg") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_avg") + .HasComment("Средние обороты на ВСП"); + + b.Property("RotorSpeedMax") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_max") + .HasComment("Максимальные обороты на ВСП"); + + b.Property("RotorSpeedMin") + .HasColumnType("double precision") + .HasColumnName("rotor_speed_min") + .HasComment("Минимальные обороты на ВСП"); + + b.Property("RotorTorqueAvg") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_avg") + .HasComment("Средний момент на ВСП"); + + b.Property("RotorTorqueMax") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_max") + .HasComment("Максимальный момент на ВСП"); + + b.Property("RotorTorqueMin") + .HasColumnType("double precision") + .HasColumnName("rotor_torque_min") + .HasComment("Минимальный момент на ВСП"); + + b.HasKey("Id"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_drill_params"); + + b.HasComment("Режим бурения в секции (диапазоны параметров бурения)"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории"); + + b.Property("ShortName") + .HasColumnType("text") + .HasColumnName("short_name") + .HasComment("Короткое название категории"); + + b.HasKey("Id"); + + b.ToTable("t_file_category"); + + b.HasComment("Категории файлов"); + + b.HasData( + new + { + Id = 1, + Name = "Растворный сервис", + ShortName = "fluidService" + }, + new + { + Id = 2, + Name = "Цементирование", + ShortName = "cement" + }, + new + { + Id = 3, + Name = "ННБ", + ShortName = "nnb" + }, + new + { + Id = 4, + Name = "ГТИ", + ShortName = "gti" + }, + new + { + Id = 5, + Name = "Документы по скважине", + ShortName = "wellDocuments" + }, + new + { + Id = 6, + Name = "Супервайзер", + ShortName = "supervisor" + }, + new + { + Id = 7, + Name = "Мастер", + ShortName = "master" + }, + new + { + Id = 8, + Name = "Долотный сервис", + ShortName = "toolService" + }, + new + { + Id = 9, + Name = "Буровой подрядчик", + ShortName = "drillService" + }, + new + { + Id = 10, + Name = "Сервис по заканчиванию скважины", + ShortName = "closingService" + }, + new + { + Id = 12, + Name = "Рапорт", + ShortName = "report" + }, + new + { + Id = 13, + Name = "Программа бурения, части", + ShortName = "ПБч" + }, + new + { + Id = 14, + Name = "Программа бурения", + ShortName = "ПБ" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id пользователя, загрузившего файл"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("id категории файла"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Удален ли файл"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название файла"); + + b.Property("PublishInfo") + .HasColumnType("jsonb") + .HasColumnName("publish_info") + .HasComment("Информация о файле в облаке"); + + b.Property("Size") + .HasColumnType("bigint") + .HasColumnName("file_size") + .HasComment("Размер файла"); + + b.Property("UploadDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.ToTable("t_file_info"); + + b.HasComment("Файлы всех категорий"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileMark", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Comment") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DateCreated") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_created") + .HasComment("Дата совершенного действия"); + + b.Property("IdFile") + .HasColumnType("integer") + .HasColumnName("id_file") + .HasComment("id файла"); + + b.Property("IdMarkType") + .HasColumnType("integer") + .HasColumnName("id_mark_type") + .HasComment("0 - Согласован"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("id пользователя"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Помечен ли файл как удаленный"); + + b.HasKey("Id"); + + b.HasIndex("IdFile"); + + b.HasIndex("IdUser"); + + b.ToTable("t_file_mark"); + + b.HasComment("Действия с файлами."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Measure", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .HasColumnType("jsonb") + .HasColumnName("data") + .HasComment("Данные таблицы последних данных"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("id категории"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("IsDeleted") + .HasColumnType("boolean") + .HasColumnName("is_deleted") + .HasComment("Пометка удаленным"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone") + .HasColumnName("timestamp") + .HasComment("время добавления"); + + b.HasKey("Id"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.ToTable("t_measure"); + + b.HasComment("Таблица c данными для вкладки 'Последние данные'"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории"); + + b.Property("ShortName") + .HasColumnType("text") + .HasColumnName("short_name") + .HasComment("Короткое название категории"); + + b.HasKey("Id"); + + b.ToTable("t_measure_category"); + + b.HasComment("Категория последних данных"); + + b.HasData( + new + { + Id = 1, + Name = "Показатели бурового раствора", + ShortName = "Раствор" + }, + new + { + Id = 2, + Name = "Шламограмма", + ShortName = "Шламограмма" + }, + new + { + Id = 3, + Name = "ННБ", + ShortName = "ННБ" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Permission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("description") + .HasComment("Краткое описание"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_permission"); + + b.HasComment("Разрешения на доступ к данным"); + + b.HasData( + new + { + Id = 100, + Description = "Разрешение удалять админ. Кусты", + Name = "AdminCluster.delete" + }, + new + { + Id = 101, + Description = "Разрешение редактировать админ. Кусты", + Name = "AdminCluster.edit" + }, + new + { + Id = 102, + Description = "Разрешение просматривать админ. Кусты", + Name = "AdminCluster.get" + }, + new + { + Id = 103, + Description = "Разрешение удалять админ. Компании", + Name = "AdminCompany.delete" + }, + new + { + Id = 104, + Description = "Разрешение редактировать админ. Компании", + Name = "AdminCompany.edit" + }, + new + { + Id = 105, + Description = "Разрешение просматривать админ. Компании", + Name = "AdminCompany.get" + }, + new + { + Id = 106, + Description = "Разрешение удалять админ. Типы компаний", + Name = "AdminCompanyType.delete" + }, + new + { + Id = 107, + Description = "Разрешение редактировать админ. Типы компаний", + Name = "AdminCompanyType.edit" + }, + new + { + Id = 108, + Description = "Разрешение просматривать админ. Типы компаний", + Name = "AdminCompanyType.get" + }, + new + { + Id = 109, + Description = "Разрешение удалять админ. Месторождения", + Name = "AdminDeposit.delete" + }, + new + { + Id = 110, + Description = "Разрешение редактировать админ. Месторождения", + Name = "AdminDeposit.edit" + }, + new + { + Id = 111, + Description = "Разрешение просматривать админ. Месторождения", + Name = "AdminDeposit.get" + }, + new + { + Id = 112, + Description = "Разрешение удалять админ. Разрешения", + Name = "AdminPermission.delete" + }, + new + { + Id = 113, + Description = "Разрешение редактировать админ. Разрешения", + Name = "AdminPermission.edit" + }, + new + { + Id = 114, + Description = "Разрешение просматривать админ. Разрешения", + Name = "AdminPermission.get" + }, + new + { + Id = 115, + Description = "Разрешение удалять админ. Телеметрию", + Name = "AdminTelemetry.delete" + }, + new + { + Id = 116, + Description = "Разрешение редактировать админ. Телеметрию", + Name = "AdminTelemetry.edit" + }, + new + { + Id = 117, + Description = "Разрешение просматривать админ. Телеметрию", + Name = "AdminTelemetry.get" + }, + new + { + Id = 118, + Description = "Разрешение удалять админ. Пользователей", + Name = "AdminUser.delete" + }, + new + { + Id = 119, + Description = "Разрешение редактировать админ. Пользователей", + Name = "AdminUser.edit" + }, + new + { + Id = 120, + Description = "Разрешение просматривать админ. Пользователей", + Name = "AdminUser.get" + }, + new + { + Id = 121, + Description = "Разрешение удалять админ. Роли пользователей", + Name = "AdminUserRole.delete" + }, + new + { + Id = 122, + Description = "Разрешение редактировать админ. Роли пользователей", + Name = "AdminUserRole.edit" + }, + new + { + Id = 123, + Description = "Разрешение просматривать админ. Роли пользователей", + Name = "AdminUserRole.get" + }, + new + { + Id = 124, + Description = "Разрешение удалять админ. Скважины", + Name = "AdminWell.delete" + }, + new + { + Id = 125, + Description = "Разрешение редактировать админ. Скважины", + Name = "AdminWell.edit" + }, + new + { + Id = 126, + Description = "Разрешение просматривать админ. Скважины", + Name = "AdminWell.get" + }, + new + { + Id = 200, + Description = "Разрешение редактировать 0", + Name = "Auth.edit" + }, + new + { + Id = 201, + Description = "Разрешение просматривать 0", + Name = "Auth.get" + }, + new + { + Id = 202, + Description = "Разрешение просматривать Кусты", + Name = "Cluster.get" + }, + new + { + Id = 203, + Description = "Разрешение просматривать Месторождения", + Name = "Deposit.get" + }, + new + { + Id = 204, + Description = "Разрешение удалять РТК", + Name = "DrillFlowChart.delete" + }, + new + { + Id = 205, + Description = "Разрешение редактировать РТК", + Name = "DrillFlowChart.edit" + }, + new + { + Id = 206, + Description = "Разрешение просматривать РТК", + Name = "DrillFlowChart.get" + }, + new + { + Id = 207, + Description = "Разрешение удалять Программу бурения", + Name = "DrillingProgram.delete" + }, + new + { + Id = 208, + Description = "Разрешение редактировать Программу бурения", + Name = "DrillingProgram.edit" + }, + new + { + Id = 209, + Description = "Разрешение просматривать Программу бурения", + Name = "DrillingProgram.get" + }, + new + { + Id = 210, + Description = "Разрешение удалять Режимы бурения", + Name = "DrillParams.delete" + }, + new + { + Id = 211, + Description = "Разрешение редактировать Режимы бурения", + Name = "DrillParams.edit" + }, + new + { + Id = 212, + Description = "Разрешение просматривать Режимы бурения", + Name = "DrillParams.get" + }, + new + { + Id = 213, + Description = "Разрешение удалять Файлы", + Name = "File.delete" + }, + new + { + Id = 214, + Description = "Разрешение редактировать Файлы", + Name = "File.edit" + }, + new + { + Id = 215, + Description = "Разрешение просматривать Файлы", + Name = "File.get" + }, + new + { + Id = 216, + Description = "Разрешение удалять Измерения", + Name = "Measure.delete" + }, + new + { + Id = 217, + Description = "Разрешение редактировать Измерения", + Name = "Measure.edit" + }, + new + { + Id = 218, + Description = "Разрешение просматривать Измерения", + Name = "Measure.get" + }, + new + { + Id = 219, + Description = "Разрешение просматривать Сообщения телеметрии", + Name = "Message.get" + }, + new + { + Id = 220, + Description = "Разрешение просматривать Статистику по операциям", + Name = "OperationStat.get" + }, + new + { + Id = 221, + Description = "Разрешение редактировать Рапорта", + Name = "Report.edit" + }, + new + { + Id = 222, + Description = "Разрешение просматривать Рапорта", + Name = "Report.get" + }, + new + { + Id = 223, + Description = "Разрешение просматривать админ. Системная статистика", + Name = "RequerstTracker.get" + }, + new + { + Id = 224, + Description = "Разрешение удалять Рекомендации уставок", + Name = "Setpoints.delete" + }, + new + { + Id = 225, + Description = "Разрешение редактировать Рекомендации уставок", + Name = "Setpoints.edit" + }, + new + { + Id = 226, + Description = "Разрешение просматривать Рекомендации уставок", + Name = "Setpoints.get" + }, + new + { + Id = 227, + Description = "Разрешение редактировать Телеметрии", + Name = "Telemetry.edit" + }, + new + { + Id = 228, + Description = "Разрешение просматривать Анализ телеметрии", + Name = "TelemetryAnalytics.get" + }, + new + { + Id = 229, + Description = "Разрешение редактировать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.edit" + }, + new + { + Id = 230, + Description = "Разрешение просматривать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.get" + }, + new + { + Id = 231, + Description = "Разрешение редактировать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.edit" + }, + new + { + Id = 232, + Description = "Разрешение просматривать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.get" + }, + new + { + Id = 233, + Description = "Разрешение редактировать Скважины", + Name = "Well.edit" + }, + new + { + Id = 234, + Description = "Разрешение просматривать Скважины", + Name = "Well.get" + }, + new + { + Id = 235, + Description = "Разрешение редактировать Композитные скважины", + Name = "WellComposite.edit" + }, + new + { + Id = 236, + Description = "Разрешение просматривать Композитные скважины", + Name = "WellComposite.get" + }, + new + { + Id = 237, + Description = "Разрешение удалять Операции по скважинам", + Name = "WellOperation.delete" + }, + new + { + Id = 238, + Description = "Разрешение редактировать Операции по скважинам", + Name = "WellOperation.edit" + }, + new + { + Id = 239, + Description = "Разрешение просматривать Операции по скважинам", + Name = "WellOperation.get" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => + { + b.Property("IdCompany") + .HasColumnType("integer") + .HasColumnName("id_company"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well"); + + b.HasKey("IdCompany", "IdWell"); + + b.HasIndex("IdWell"); + + b.ToTable("t_relation_company_well"); + + b.HasComment("отношение скважин и компаний"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b => + { + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.Property("IdPermission") + .HasColumnType("integer") + .HasColumnName("id_permission"); + + b.HasKey("IdUserRole", "IdPermission"); + + b.HasIndex("IdPermission"); + + b.ToTable("t_relation_user_role_permission"); + + b.HasComment("Отношение ролей пользователей и разрешений доступа"); + + b.HasData( + new + { + IdUserRole = 1100, + IdPermission = 102 + }, + new + { + IdUserRole = 1100, + IdPermission = 111 + }, + new + { + IdUserRole = 1101, + IdPermission = 101 + }, + new + { + IdUserRole = 1101, + IdPermission = 100 + }, + new + { + IdUserRole = 1102, + IdPermission = 105 + }, + new + { + IdUserRole = 1102, + IdPermission = 108 + }, + new + { + IdUserRole = 1103, + IdPermission = 104 + }, + new + { + IdUserRole = 1103, + IdPermission = 103 + }, + new + { + IdUserRole = 1104, + IdPermission = 108 + }, + new + { + IdUserRole = 1105, + IdPermission = 107 + }, + new + { + IdUserRole = 1105, + IdPermission = 106 + }, + new + { + IdUserRole = 1106, + IdPermission = 111 + }, + new + { + IdUserRole = 1107, + IdPermission = 110 + }, + new + { + IdUserRole = 1107, + IdPermission = 109 + }, + new + { + IdUserRole = 1108, + IdPermission = 114 + }, + new + { + IdUserRole = 1109, + IdPermission = 113 + }, + new + { + IdUserRole = 1109, + IdPermission = 112 + }, + new + { + IdUserRole = 1110, + IdPermission = 123 + }, + new + { + IdUserRole = 1110, + IdPermission = 114 + }, + new + { + IdUserRole = 1111, + IdPermission = 122 + }, + new + { + IdUserRole = 1111, + IdPermission = 121 + }, + new + { + IdUserRole = 1112, + IdPermission = 117 + }, + new + { + IdUserRole = 1113, + IdPermission = 105 + }, + new + { + IdUserRole = 1113, + IdPermission = 123 + }, + new + { + IdUserRole = 1113, + IdPermission = 120 + }, + new + { + IdUserRole = 1114, + IdPermission = 119 + }, + new + { + IdUserRole = 1114, + IdPermission = 118 + }, + new + { + IdUserRole = 1114, + IdPermission = 200 + }, + new + { + IdUserRole = 1115, + IdPermission = 223 + }, + new + { + IdUserRole = 1116, + IdPermission = 105 + }, + new + { + IdUserRole = 1116, + IdPermission = 102 + }, + new + { + IdUserRole = 1116, + IdPermission = 117 + }, + new + { + IdUserRole = 1117, + IdPermission = 125 + }, + new + { + IdUserRole = 1117, + IdPermission = 124 + }, + new + { + IdUserRole = 1200, + IdPermission = 203 + }, + new + { + IdUserRole = 1200, + IdPermission = 230 + }, + new + { + IdUserRole = 1201, + IdPermission = 202 + }, + new + { + IdUserRole = 1201, + IdPermission = 203 + }, + new + { + IdUserRole = 1201, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 203 + }, + new + { + IdUserRole = 1202, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 236 + }, + new + { + IdUserRole = 1203, + IdPermission = 235 + }, + new + { + IdUserRole = 1204, + IdPermission = 202 + }, + new + { + IdUserRole = 1204, + IdPermission = 203 + }, + new + { + IdUserRole = 1205, + IdPermission = 215 + }, + new + { + IdUserRole = 1206, + IdPermission = 203 + }, + new + { + IdUserRole = 1206, + IdPermission = 206 + }, + new + { + IdUserRole = 1207, + IdPermission = 205 + }, + new + { + IdUserRole = 1208, + IdPermission = 218 + }, + new + { + IdUserRole = 1209, + IdPermission = 217 + }, + new + { + IdUserRole = 1210, + IdPermission = 203 + }, + new + { + IdUserRole = 1210, + IdPermission = 230 + }, + new + { + IdUserRole = 1211, + IdPermission = 203 + }, + new + { + IdUserRole = 1211, + IdPermission = 220 + }, + new + { + IdUserRole = 1211, + IdPermission = 239 + }, + new + { + IdUserRole = 1212, + IdPermission = 238 + }, + new + { + IdUserRole = 1212, + IdPermission = 237 + }, + new + { + IdUserRole = 1213, + IdPermission = 203 + }, + new + { + IdUserRole = 1213, + IdPermission = 239 + }, + new + { + IdUserRole = 1213, + IdPermission = 212 + }, + new + { + IdUserRole = 1214, + IdPermission = 211 + }, + new + { + IdUserRole = 1214, + IdPermission = 210 + }, + new + { + IdUserRole = 1215, + IdPermission = 203 + }, + new + { + IdUserRole = 1215, + IdPermission = 222 + }, + new + { + IdUserRole = 1216, + IdPermission = 221 + }, + new + { + IdUserRole = 1217, + IdPermission = 226 + }, + new + { + IdUserRole = 1218, + IdPermission = 225 + }, + new + { + IdUserRole = 1218, + IdPermission = 224 + }, + new + { + IdUserRole = 1219, + IdPermission = 203 + }, + new + { + IdUserRole = 1219, + IdPermission = 206 + }, + new + { + IdUserRole = 1219, + IdPermission = 230 + }, + new + { + IdUserRole = 1220, + IdPermission = 203 + }, + new + { + IdUserRole = 1220, + IdPermission = 228 + }, + new + { + IdUserRole = 1221, + IdPermission = 202 + }, + new + { + IdUserRole = 1221, + IdPermission = 203 + }, + new + { + IdUserRole = 1221, + IdPermission = 220 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => + { + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.Property("IdInclude") + .HasColumnType("integer") + .HasColumnName("id_include_user_role"); + + b.HasKey("Id", "IdInclude") + .HasName("t_relation_user_role_user_role_pk"); + + b.HasIndex("IdInclude"); + + b.ToTable("t_relation_user_role_user_role"); + + b.HasComment("Отношение ролей к ролям"); + + b.HasData( + new + { + Id = 1101, + IdInclude = 1100 + }, + new + { + Id = 1103, + IdInclude = 1102 + }, + new + { + Id = 1105, + IdInclude = 1104 + }, + new + { + Id = 1107, + IdInclude = 1106 + }, + new + { + Id = 1109, + IdInclude = 1108 + }, + new + { + Id = 1111, + IdInclude = 1110 + }, + new + { + Id = 1114, + IdInclude = 1113 + }, + new + { + Id = 1117, + IdInclude = 1116 + }, + new + { + Id = 1203, + IdInclude = 1202 + }, + new + { + Id = 1207, + IdInclude = 1206 + }, + new + { + Id = 1209, + IdInclude = 1208 + }, + new + { + Id = 1212, + IdInclude = 1211 + }, + new + { + Id = 1214, + IdInclude = 1213 + }, + new + { + Id = 1216, + IdInclude = 1215 + }, + new + { + Id = 1218, + IdInclude = 1217 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => + { + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("IdUserRole") + .HasColumnType("integer") + .HasColumnName("id_user_role"); + + b.HasKey("IdUser", "IdUserRole"); + + b.HasIndex("IdUserRole"); + + b.ToTable("t_relation_user_user_role"); + + b.HasComment("Отношение пользователей и ролей"); + + b.HasData( + new + { + IdUser = 1, + IdUserRole = 2 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Begin") + .HasColumnType("timestamp with time zone") + .HasColumnName("begin"); + + b.Property("End") + .HasColumnType("timestamp with time zone") + .HasColumnName("end") + .HasComment("timestamp with time zone"); + + b.Property("Format") + .HasColumnType("integer") + .HasColumnName("format") + .HasComment("Формат отчета"); + + b.Property("IdFile") + .HasColumnType("integer") + .HasColumnName("id_file") + .HasComment("id файла-родителя"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("Step") + .HasColumnType("integer") + .HasColumnName("step") + .HasComment("размер шага в секундах"); + + b.HasKey("Id"); + + b.HasIndex("IdFile"); + + b.HasIndex("IdWell"); + + b.ToTable("t_report_property"); + + b.HasComment("Отчеты с данными по буровым"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("комментарий для оператора"); + + b.Property("IdAuthor") + .HasColumnType("integer") + .HasColumnName("id_author") + .HasComment("Id пользователя, загрузившего файл"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("id_state") + .HasComment("0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("id скважины"); + + b.Property("ObsolescenceSec") + .HasColumnType("integer") + .HasColumnName("obsolescence") + .HasComment("сек. до устаревания"); + + b.Property>("Setpoints") + .HasColumnType("jsonb") + .HasColumnName("setpoint_set") + .HasComment("Набор уставок"); + + b.Property("UploadDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.HasKey("Id"); + + b.HasIndex("IdAuthor"); + + b.HasIndex("IdWell"); + + b.ToTable("t_setpoints_rquest"); + + b.HasComment("Запросы на изменение уставок панели оператора"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Info") + .HasColumnType("jsonb") + .HasColumnName("info") + .HasComment("Информация с панели о скважине"); + + b.Property("RemoteUid") + .HasColumnType("text") + .HasColumnName("remote_uid") + .HasComment("Идентификатор передающего устройства. Может повторяться в списке, так как комплекты оборудования переезжают от скв. к скв."); + + b.Property("TimeZone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex(new[] { "RemoteUid" }, "t_telemetry_remote_uid_index"); + + b.ToTable("t_telemetry"); + + b.HasComment("таблица привязки телеметрии от комплектов к конкретной скважине."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryAnalysis", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DurationSec") + .HasColumnType("integer") + .HasColumnName("duration_sec") + .HasComment("Кол-во секунд после предыдущей операции"); + + b.Property("IdOperation") + .HasColumnType("integer") + .HasColumnName("id_operation"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IsBitPositionDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_bit_position_decreasing") + .HasComment("Долото поднимается"); + + b.Property("IsBitPositionIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_bit_position_increasing") + .HasComment("Долото спускается"); + + b.Property("IsBitPositionLt20") + .HasColumnType("boolean") + .HasColumnName("is_bit_posision_lt_20") + .HasComment("Положение долота меньше 20м"); + + b.Property("IsBlockPositionDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_block_posision_decresing") + .HasComment("Талевый блок поднимается"); + + b.Property("IsBlockPositionIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_block_posision_incresing") + .HasComment("Талевый блок спускается"); + + b.Property("IsHookWeightLt3") + .HasColumnType("boolean") + .HasColumnName("is_hook_weight_lt_3") + .HasComment("Вес на крюке менее 3т"); + + b.Property("IsHookWeightNotChanges") + .HasColumnType("boolean") + .HasColumnName("is_hook_weight_not_changes") + .HasComment("Вес на крюке не меняется"); + + b.Property("IsPressureGt20") + .HasColumnType("boolean") + .HasColumnName("is_pressure_gt_20") + .HasComment("Давление более 20"); + + b.Property("IsPressureLt20") + .HasColumnType("boolean") + .HasColumnName("is_pressure_lt_20") + .HasComment("Давление менее 20"); + + b.Property("IsRotorSpeedGt5") + .HasColumnType("boolean") + .HasColumnName("is_rotor_speed_gt_3") + .HasComment("Обороты ротора выше 3"); + + b.Property("IsRotorSpeedLt5") + .HasColumnType("boolean") + .HasColumnName("is_rotor_speed_lt_3") + .HasComment("Обороты ротора ниже 3"); + + b.Property("IsWellDepthDecreasing") + .HasColumnType("boolean") + .HasColumnName("is_well_depth_decreasing") + .HasComment("Глубина забоя не увеличивается"); + + b.Property("IsWellDepthIncreasing") + .HasColumnType("boolean") + .HasColumnName("is_well_depth_increasing") + .HasComment("Глубина забоя увеличивается"); + + b.Property("OperationEndDepth") + .HasColumnType("double precision") + .HasColumnName("operation_end_depth") + .HasComment("Глубина, на которой закончилась операция"); + + b.Property("OperationStartDepth") + .HasColumnType("double precision") + .HasColumnName("operation_start_depth") + .HasComment("Глубина, на которой началась операция"); + + b.Property("UnixDate") + .HasColumnType("bigint") + .HasColumnName("unix_date") + .HasComment("Unix timestamp для Linq запросов с вычислением дат"); + + b.HasKey("Id"); + + b.HasIndex("IdOperation"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_analysis"); + + b.HasComment("События на скважине"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("AxialLoad") + .HasColumnType("real") + .HasColumnName("axial_load") + .HasComment("Осевая нагрузка"); + + b.Property("AxialLoadLimitMax") + .HasColumnType("real") + .HasColumnName("axial_load_limit_max") + .HasComment("Осевая нагрузка. Аварийная макс."); + + b.Property("AxialLoadSp") + .HasColumnType("real") + .HasColumnName("axial_load_sp") + .HasComment("Осевая нагрузка. Задание"); + + b.Property("BitDepth") + .HasColumnType("real") + .HasColumnName("bit_depth") + .HasComment("Положение инструмента"); + + b.Property("BlockPosition") + .HasColumnType("real") + .HasColumnName("block_position") + .HasComment("Высота талевого блока"); + + b.Property("BlockPositionMax") + .HasColumnType("real") + .HasColumnName("block_position_max") + .HasComment("Талевый блок. Макс положение"); + + b.Property("BlockPositionMin") + .HasColumnType("real") + .HasColumnName("block_position_min") + .HasComment("Талевый блок. Мин положение"); + + b.Property("BlockSpeed") + .HasColumnType("real") + .HasColumnName("block_speed") + .HasComment("Скорость талевого блока"); + + b.Property("BlockSpeedSp") + .HasColumnType("real") + .HasColumnName("block_speed_sp") + .HasComment("Скорости талевого блока. Задание"); + + b.Property("BlockSpeedSpDevelop") + .HasColumnType("real") + .HasColumnName("block_speed_sp_develop") + .HasComment("Талевый блок. Задание скорости для проработки"); + + b.Property("BlockSpeedSpRotor") + .HasColumnType("real") + .HasColumnName("block_speed_sp_rotor") + .HasComment("Талевый блок. Задание скорости для роторного бурения"); + + b.Property("BlockSpeedSpSlide") + .HasColumnType("real") + .HasColumnName("block_speed_sp_slide") + .HasComment("Талевый блок. Задание скорости для режима слайда"); + + b.Property("Flow") + .HasColumnType("real") + .HasColumnName("flow") + .HasComment("Расход"); + + b.Property("FlowDeltaLimitMax") + .HasColumnType("real") + .HasColumnName("flow_delta_limit_max") + .HasComment("Расход. Аварийный макс."); + + b.Property("FlowIdle") + .HasColumnType("real") + .HasColumnName("flow_idle") + .HasComment("Расход. Холостой ход"); + + b.Property("HookWeight") + .HasColumnType("real") + .HasColumnName("hook_weight") + .HasComment("Вес на крюке"); + + b.Property("HookWeightIdle") + .HasColumnType("real") + .HasColumnName("hook_weight_idle") + .HasComment("Вес на крюке. Холостой ход"); + + b.Property("HookWeightLimitMax") + .HasColumnType("real") + .HasColumnName("hook_weight_limit_max") + .HasComment("Вес на крюке. Затяжка"); + + b.Property("HookWeightLimitMin") + .HasColumnType("real") + .HasColumnName("hook_weight_limit_min") + .HasComment("Вес на крюке. Посадка"); + + b.Property("IdFeedRegulator") + .HasColumnType("smallint") + .HasColumnName("id_feed_regulator") + .HasComment("Текущий критерий бурения"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user") + .HasComment("Пользователь САУБ"); + + b.Property("Mode") + .HasColumnType("smallint") + .HasColumnName("mode") + .HasComment("Режим САУБ"); + + b.Property("MseState") + .HasColumnType("smallint") + .HasColumnName("mse_state") + .HasComment("Текущее состояние работы MSE"); + + b.Property("Pressure") + .HasColumnType("real") + .HasColumnName("pressure") + .HasComment("Давление"); + + b.Property("PressureDeltaLimitMax") + .HasColumnType("real") + .HasColumnName("pressure_delta_limit_max") + .HasComment("Давление дифф. Аварийное макс."); + + b.Property("PressureIdle") + .HasColumnType("real") + .HasColumnName("pressure_idle") + .HasComment("Давление. Холостой ход"); + + b.Property("PressureSp") + .HasColumnType("real") + .HasColumnName("pressure_sp") + .HasComment("Давление. Задание"); + + b.Property("PressureSpDevelop") + .HasColumnType("real") + .HasColumnName("pressure_sp_develop") + .HasComment("Давление. Задание для проработки"); + + b.Property("PressureSpRotor") + .HasColumnType("real") + .HasColumnName("pressure_sp_rotor") + .HasComment("Давление. Задание для роторного бурения"); + + b.Property("PressureSpSlide") + .HasColumnType("real") + .HasColumnName("pressure_sp_slide") + .HasComment("Давление. Задание для режима слайда"); + + b.Property("RotorSpeed") + .HasColumnType("real") + .HasColumnName("rotor_speed") + .HasComment("Обороты ротора"); + + b.Property("RotorTorque") + .HasColumnType("real") + .HasColumnName("rotor_torque") + .HasComment("Момент на роторе"); + + b.Property("RotorTorqueIdle") + .HasColumnType("real") + .HasColumnName("rotor_torque_idle") + .HasComment("Момент на роторе. Холостой ход"); + + b.Property("RotorTorqueLimitMax") + .HasColumnType("real") + .HasColumnName("rotor_torque_limit_max") + .HasComment("Момент на роторе. Аварийный макс."); + + b.Property("RotorTorqueSp") + .HasColumnType("real") + .HasColumnName("rotor_torque_sp") + .HasComment("Момент на роторе. Задание"); + + b.Property("WellDepth") + .HasColumnType("real") + .HasColumnName("well_depth") + .HasComment("Глубина забоя"); + + b.HasKey("IdTelemetry", "Date"); + + b.ToTable("t_telemetry_data_saub"); + + b.HasComment("набор основных данных по SAUB"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date") + .HasComment("'2021-10-19 18:23:54+05'"); + + b.Property("BreakAngleK") + .HasColumnType("real") + .HasColumnName("break_angle_k") + .HasComment("Коэффициент для расчёта за какой угол нужно тормозить"); + + b.Property("BreakAngleLeft") + .HasColumnType("real") + .HasColumnName("break_angle_left") + .HasComment("Угол торможения влево при работе по моменту"); + + b.Property("EncoderResolution") + .HasColumnType("real") + .HasColumnName("encoder_resolution") + .HasComment("Разрешение энкодера"); + + b.Property("Mode") + .HasColumnType("smallint") + .HasColumnName("mode") + .HasComment("Выбранный режим управления"); + + b.Property("PidMuxTorqueLeftLimit") + .HasColumnType("real") + .HasColumnName("pid_mux_torque_left_limit") + .HasComment(" Момент при котором определяется ехать назад по моменту или по скорости"); + + b.Property("PositionRight") + .HasColumnType("real") + .HasColumnName("position_right") + .HasComment("Крайний правый угол осцилляции"); + + b.Property("PositionZero") + .HasColumnType("real") + .HasColumnName("position_zero") + .HasComment("Нулевая позиция осцилляции"); + + b.Property("Ratio") + .HasColumnType("real") + .HasColumnName("ratio") + .HasComment(" Коэффициент редукции редуктора"); + + b.Property("ReverseKTorque") + .HasColumnType("real") + .HasColumnName("reverse_k_torque") + .HasComment("Коэффициент на который умножается момент, для того чтобы система поняла что мы движемся в обратную сторону"); + + b.Property("ReverseSpeedSpZeroTime") + .HasColumnType("smallint") + .HasColumnName("reverse_speed_sp_zero_time") + .HasComment("Время выдачи сигнала нулевой скорости на при смене направления"); + + b.Property("RevolsLeftLimit") + .HasColumnType("real") + .HasColumnName("revols_left_limit") + .HasComment("Ограничение числа оборотов влево"); + + b.Property("RevolsLeftTotal") + .HasColumnType("real") + .HasColumnName("revols_left_total") + .HasComment("Суммарное количество оборотов влево"); + + b.Property("RevolsRightLimit") + .HasColumnType("real") + .HasColumnName("revols_right_limit") + .HasComment("Ограничение числа оборотов вправо"); + + b.Property("RevolsRightTotal") + .HasColumnType("real") + .HasColumnName("revols_right_total") + .HasComment("Суммарное количество оборотов вправо"); + + b.Property("RotorTorqueAvg") + .HasColumnType("real") + .HasColumnName("rotor_torque_avg") + .HasComment("Момент в роторе средний"); + + b.Property("SpeedLeftSp") + .HasColumnType("real") + .HasColumnName("speed_left_sp") + .HasComment("Заданная скорость вращения влево"); + + b.Property("SpeedRightSp") + .HasColumnType("real") + .HasColumnName("speed_right_sp") + .HasComment("Заданная скорость вращения вправо"); + + b.Property("State") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("Переменная этапа"); + + b.Property("TopDriveSpeed") + .HasColumnType("real") + .HasColumnName("top_drive_speed") + .HasComment("Скорость СВП"); + + b.Property("TopDriveSpeedErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_speed_err"); + + b.Property("TopDriveSpeedMax") + .HasColumnType("real") + .HasColumnName("top_drive_speed_max") + .HasComment("верхний предел"); + + b.Property("TopDriveSpeedMin") + .HasColumnType("real") + .HasColumnName("top_drive_speed_min") + .HasComment("нижний предел"); + + b.Property("TopDriveSpeedOffset") + .HasColumnType("real") + .HasColumnName("top_drive_speed_offset") + .HasComment("смещение"); + + b.Property("TopDriveSpeedSpFrom") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from") + .HasComment("Заданная скорость c СВП"); + + b.Property("TopDriveSpeedSpFromErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_speed_sp_from_err"); + + b.Property("TopDriveSpeedSpFromMax") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from_max"); + + b.Property("TopDriveSpeedSpFromMin") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from_min"); + + b.Property("TopDriveSpeedSpFromOffset") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_from_offset"); + + b.Property("TopDriveSpeedSpTo") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to") + .HasComment("Задание скорости на СВП"); + + b.Property("TopDriveSpeedSpToErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_speed_sp_to_err"); + + b.Property("TopDriveSpeedSpToMax") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to_max"); + + b.Property("TopDriveSpeedSpToMin") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to_min"); + + b.Property("TopDriveSpeedSpToOffset") + .HasColumnType("real") + .HasColumnName("top_drive_speed_sp_to_offset"); + + b.Property("TopDriveTorque") + .HasColumnType("real") + .HasColumnName("top_drive_torque") + .HasComment("Момент СВП"); + + b.Property("TopDriveTorqueErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_torque_err"); + + b.Property("TopDriveTorqueMax") + .HasColumnType("real") + .HasColumnName("top_drive_torque_max"); + + b.Property("TopDriveTorqueMin") + .HasColumnType("real") + .HasColumnName("top_drive_torque_min"); + + b.Property("TopDriveTorqueOffset") + .HasColumnType("real") + .HasColumnName("top_drive_torque_offset"); + + b.Property("TopDriveTorqueSpFrom") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from") + .HasComment("Заданный момент c СВП"); + + b.Property("TopDriveTorqueSpFromErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_torque_sp_from_err"); + + b.Property("TopDriveTorqueSpFromMax") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from_max"); + + b.Property("TopDriveTorqueSpFromMin") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from_min"); + + b.Property("TopDriveTorqueSpFromOffset") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_from_offset"); + + b.Property("TopDriveTorqueSpTo") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to") + .HasComment("Задание момента на СВП"); + + b.Property("TopDriveTorqueSpToErr") + .HasColumnType("smallint") + .HasColumnName("top_drive_torque_sp_to_err"); + + b.Property("TopDriveTorqueSpToMax") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to_max"); + + b.Property("TopDriveTorqueSpToMin") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to_min"); + + b.Property("TopDriveTorqueSpToOffset") + .HasColumnType("real") + .HasColumnName("top_drive_torque_sp_to_offset"); + + b.Property("TorqueLeftLimit") + .HasColumnType("real") + .HasColumnName("torque_left_limit") + .HasComment("Ограничение крутящего момента влево"); + + b.Property("TorqueRampTime") + .HasColumnType("real") + .HasColumnName("torque_ramp_time") + .HasComment("Время нарастания момента"); + + b.Property("TorqueRightLimit") + .HasColumnType("real") + .HasColumnName("torque_right_limit") + .HasComment("Ограничение крутящего момента вправо"); + + b.Property("TorqueStarting") + .HasColumnType("real") + .HasColumnName("torque_starting") + .HasComment("Страгивающий момент"); + + b.Property("TurnLeftOnceByAngle") + .HasColumnType("real") + .HasColumnName("turn_left_once_by_angle") + .HasComment("Доворот по градусам единожды влево"); + + b.Property("TurnLeftOnceByRevols") + .HasColumnType("real") + .HasColumnName("turn_left_once_by_revols") + .HasComment("Доворот по оборотам единожды влево"); + + b.Property("TurnLeftOnceByTorque") + .HasColumnType("real") + .HasColumnName("turn_left_once_by_torque") + .HasComment("Доворот по моменту единожды влево"); + + b.Property("TurnRightOnceByAngle") + .HasColumnType("real") + .HasColumnName("turn_right_once_by_angle") + .HasComment("Доворот по градусам единожды вправо"); + + b.Property("TurnRightOnceByRevols") + .HasColumnType("real") + .HasColumnName("turn_right_once_by_revols") + .HasComment("Доворот по оборотам единожды вправо"); + + b.Property("TurnRightOnceByTorque") + .HasColumnType("real") + .HasColumnName("turn_right_once_by_torque") + .HasComment("Доворот по моменту единожды вправо"); + + b.Property("UnlockBySectorOut") + .HasColumnType("real") + .HasColumnName("unlock_by_sector_out") + .HasComment(" Градус отклонения от сектора для автоматического сброса блокировки"); + + b.Property("Ver") + .HasColumnType("real") + .HasColumnName("ver") + .HasComment("Версия ПО ПЛК"); + + b.Property("W2800") + .HasColumnType("smallint") + .HasColumnName("w2800") + .HasComment("Установка нуля энкодера"); + + b.Property("W2808") + .HasColumnType("smallint") + .HasColumnName("w2808") + .HasComment("Неисправность энкодера"); + + b.Property("W2810") + .HasColumnType("smallint") + .HasColumnName("w2810") + .HasComment(" автоматический сброс блокировки"); + + b.HasKey("IdTelemetry", "Date"); + + b.ToTable("t_telemetry_data_spin"); + + b.HasComment("набор основных данных по SpinMaster"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdEvent") + .HasColumnType("integer") + .HasColumnName("id_event"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category"); + + b.Property("MessageTemplate") + .HasColumnType("text") + .HasColumnName("message_template"); + + b.HasKey("IdTelemetry", "IdEvent"); + + b.ToTable("t_telemetry_event"); + + b.HasComment("Справочник событий. События формируют сообщения. Разделено по версиям посылок от телеметрии."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Arg0") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg0") + .HasComment("Аргумент №0 для вставки в шаблон сообщения"); + + b.Property("Arg1") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg1"); + + b.Property("Arg2") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg2"); + + b.Property("Arg3") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("arg3"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("IdEvent") + .HasColumnType("integer") + .HasColumnName("id_event"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdTelemetryUser") + .HasColumnType("integer") + .HasColumnName("id_telemetry_user") + .HasComment("Пользователь панели отправляющей телеметрию. не пользователь облака."); + + b.Property("WellDepth") + .HasColumnType("double precision") + .HasColumnName("well_depth"); + + b.HasKey("Id"); + + b.HasIndex("IdTelemetry"); + + b.ToTable("t_telemetry_message"); + + b.HasComment("Сообщения на буровых"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdUser") + .HasColumnType("integer") + .HasColumnName("id_user"); + + b.Property("Level") + .HasColumnType("integer") + .HasColumnName("level"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic"); + + b.Property("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname"); + + b.HasKey("IdTelemetry", "IdUser"); + + b.ToTable("t_telemetry_user"); + + b.HasComment("Пользователи панели САУБ. Для сообщений."); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("email") + .HasComment("должность"); + + b.Property("IdCompany") + .HasColumnType("integer") + .HasColumnName("id_company"); + + b.Property("IdState") + .HasColumnType("smallint") + .HasColumnName("state") + .HasComment("состояние:\n100 - удален"); + + b.Property("Login") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("login"); + + b.Property("Name") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("name") + .HasComment("имя"); + + b.Property("PasswordHash") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("password_hash") + .HasComment("соленый хэш пароля.\nпервые 5 символов - соль"); + + b.Property("Patronymic") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("patronymic") + .HasComment("отчество"); + + b.Property("Phone") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("phone") + .HasComment("номер телефона"); + + b.Property("Position") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("position") + .HasComment("email"); + + b.Property("Surname") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("surname") + .HasComment("фамилия"); + + b.HasKey("Id"); + + b.HasIndex("IdCompany"); + + b.HasIndex("Login") + .IsUnique(); + + b.ToTable("t_user"); + + b.HasComment("Пользователи облака"); + + b.HasData( + new + { + Id = 1, + IdCompany = 1, + Login = "dev", + Name = "Разработчик", + PasswordHash = "Vlcj|4fa529103dde7ff72cfe76185f344d4aa87931f8e1b2044e8a7739947c3d18923464eaad93843e4f809c5e126d013072" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0-роль из стандартной матрицы, \n1-специальная роль для какого-либо пользователя"); + + b.HasKey("Id"); + + b.ToTable("t_user_role"); + + b.HasComment("Роли пользователей в системе"); + + b.HasData( + new + { + Id = 1, + Caption = "root", + IdType = 0 + }, + new + { + Id = 1100, + Caption = "admin_cluster.view", + IdType = 0 + }, + new + { + Id = 1101, + Caption = "admin_cluster.edit", + IdType = 0 + }, + new + { + Id = 1102, + Caption = "admin_company.view", + IdType = 0 + }, + new + { + Id = 1103, + Caption = "admin_company.edit", + IdType = 0 + }, + new + { + Id = 1104, + Caption = "admin_company_type.view", + IdType = 0 + }, + new + { + Id = 1105, + Caption = "admin_company_type.edit", + IdType = 0 + }, + new + { + Id = 1106, + Caption = "admin_deposit.view", + IdType = 0 + }, + new + { + Id = 1107, + Caption = "admin_deposit.edit", + IdType = 0 + }, + new + { + Id = 1108, + Caption = "admin_permission.view", + IdType = 0 + }, + new + { + Id = 1109, + Caption = "admin_permission.edit", + IdType = 0 + }, + new + { + Id = 1110, + Caption = "admin_role.view", + IdType = 0 + }, + new + { + Id = 1111, + Caption = "admin_role.edit", + IdType = 0 + }, + new + { + Id = 1112, + Caption = "admin_telemetry.view", + IdType = 0 + }, + new + { + Id = 1113, + Caption = "admin_user.view", + IdType = 0 + }, + new + { + Id = 1114, + Caption = "admin_user.edit", + IdType = 0 + }, + new + { + Id = 1115, + Caption = "admin_visit_log.view", + IdType = 0 + }, + new + { + Id = 1116, + Caption = "admin_well.view", + IdType = 0 + }, + new + { + Id = 1117, + Caption = "admin_well.edit", + IdType = 0 + }, + new + { + Id = 1200, + Caption = "archive.view", + IdType = 0 + }, + new + { + Id = 1201, + Caption = "cluster.view", + IdType = 0 + }, + new + { + Id = 1202, + Caption = "composite.view", + IdType = 0 + }, + new + { + Id = 1203, + Caption = "composite.edit", + IdType = 0 + }, + new + { + Id = 1204, + Caption = "deposit.view", + IdType = 0 + }, + new + { + Id = 1205, + Caption = "document.view", + IdType = 0 + }, + new + { + Id = 1206, + Caption = "drillProcessFlow.view", + IdType = 0 + }, + new + { + Id = 1207, + Caption = "drillProcessFlow.edit", + IdType = 0 + }, + new + { + Id = 1208, + Caption = "measure.view", + IdType = 0 + }, + new + { + Id = 1209, + Caption = "measure.edit", + IdType = 0 + }, + new + { + Id = 1210, + Caption = "message.view", + IdType = 0 + }, + new + { + Id = 1211, + Caption = "operations.view", + IdType = 0 + }, + new + { + Id = 1212, + Caption = "operations.edit", + IdType = 0 + }, + new + { + Id = 1213, + Caption = "params.view", + IdType = 0 + }, + new + { + Id = 1214, + Caption = "params.edit", + IdType = 0 + }, + new + { + Id = 1215, + Caption = "report.view", + IdType = 0 + }, + new + { + Id = 1216, + Caption = "report.edit", + IdType = 0 + }, + new + { + Id = 1217, + Caption = "setpoints.view", + IdType = 0 + }, + new + { + Id = 1218, + Caption = "setpoints.edit", + IdType = 0 + }, + new + { + Id = 1219, + Caption = "telemetry.view", + IdType = 0 + }, + new + { + Id = 1220, + Caption = "telemetryAnalysis.view", + IdType = 0 + }, + new + { + Id = 1221, + Caption = "well.view", + IdType = 0 + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption"); + + b.Property("IdCluster") + .HasColumnType("integer") + .HasColumnName("id_cluster"); + + b.Property("IdState") + .HasColumnType("integer") + .HasColumnName("state") + .HasComment("0 - неизвестно, 1 - в работе, 2 - завершена"); + + b.Property("IdTelemetry") + .HasColumnType("integer") + .HasColumnName("id_telemetry"); + + b.Property("IdWellType") + .HasColumnType("integer") + .HasColumnName("id_well_type"); + + b.Property("Latitude") + .HasColumnType("double precision") + .HasColumnName("latitude"); + + b.Property("Longitude") + .HasColumnType("double precision") + .HasColumnName("longitude"); + + b.Property("Timezone") + .HasColumnType("jsonb") + .HasColumnName("timezone") + .HasComment("Смещение часового пояса от UTC"); + + b.HasKey("Id"); + + b.HasIndex("IdCluster"); + + b.HasIndex("IdTelemetry") + .IsUnique(); + + b.HasIndex("IdWellType"); + + b.ToTable("t_well"); + + b.HasComment("скважины"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellComposite", b => + { + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины получателя"); + + b.Property("IdWellSrc") + .HasColumnType("integer") + .HasColumnName("id_well_src") + .HasComment("Id скважины композита"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции композита"); + + b.HasKey("IdWell", "IdWellSrc", "IdWellSectionType"); + + b.HasIndex("IdWellSectionType"); + + b.HasIndex("IdWellSrc"); + + b.ToTable("t_well_composite"); + + b.HasComment("Композитная скважина"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CategoryInfo") + .HasColumnType("text") + .HasColumnName("category_info") + .HasComment("Доп. информация к выбраной категории"); + + b.Property("Comment") + .HasColumnType("text") + .HasColumnName("comment") + .HasComment("Комментарий"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_start") + .HasComment("Дата начала операции"); + + b.Property("DepthEnd") + .HasColumnType("double precision") + .HasColumnName("depth_end") + .HasComment("Глубина после завершения операции, м"); + + b.Property("DepthStart") + .HasColumnType("double precision") + .HasColumnName("depth_start") + .HasComment("Глубина на начало операции, м"); + + b.Property("DurationHours") + .HasColumnType("double precision") + .HasColumnName("duration_hours") + .HasComment("Продолжительность, часы"); + + b.Property("IdCategory") + .HasColumnType("integer") + .HasColumnName("id_category") + .HasComment("Id категории операции"); + + b.Property("IdType") + .HasColumnType("integer") + .HasColumnName("id_type") + .HasComment("0 = План или 1 = Факт"); + + b.Property("IdWell") + .HasColumnType("integer") + .HasColumnName("id_well") + .HasComment("Id скважины"); + + b.Property("IdWellSectionType") + .HasColumnType("integer") + .HasColumnName("id_well_section_type") + .HasComment("Id тип секции скважины"); + + b.HasKey("Id"); + + b.HasIndex("DateStart"); + + b.HasIndex("DepthEnd"); + + b.HasIndex("IdCategory"); + + b.HasIndex("IdWell"); + + b.HasIndex("IdWellSectionType"); + + b.ToTable("t_well_operation"); + + b.HasComment("Данные по операциям на скважине"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Code") + .HasColumnType("integer") + .HasColumnName("code") + .HasComment("Код операции"); + + b.Property("Name") + .HasColumnType("text") + .HasColumnName("name") + .HasComment("Название категории операции"); + + b.HasKey("Id"); + + b.ToTable("t_well_operation_category"); + + b.HasComment("Справочник операций на скважине"); + + b.HasData( + new + { + Id = 1, + Code = 0, + Name = "Невозможно определить операцию" + }, + new + { + Id = 2, + Code = 0, + Name = "Роторное бурение" + }, + new + { + Id = 3, + Code = 0, + Name = "Слайдирование" + }, + new + { + Id = 4, + Code = 0, + Name = "Подъем с проработкой" + }, + new + { + Id = 5, + Code = 0, + Name = "Спуск с проработкой" + }, + new + { + Id = 6, + Code = 0, + Name = "Подъем с промывкой" + }, + new + { + Id = 7, + Code = 0, + Name = "Спуск с промывкой" + }, + new + { + Id = 8, + Code = 0, + Name = "Спуск в скважину" + }, + new + { + Id = 9, + Code = 0, + Name = "Спуск с вращением" + }, + new + { + Id = 10, + Code = 0, + Name = "Подъем из скважины" + }, + new + { + Id = 11, + Code = 0, + Name = "Подъем с вращением" + }, + new + { + Id = 12, + Code = 0, + Name = "Промывка в покое" + }, + new + { + Id = 13, + Code = 0, + Name = "Промывка с вращением" + }, + new + { + Id = 14, + Code = 0, + Name = "Удержание в клиньях" + }, + new + { + Id = 15, + Code = 0, + Name = "Неподвижное состояние" + }, + new + { + Id = 16, + Code = 0, + Name = "Вращение без циркуляции" + }, + new + { + Id = 17, + Code = 0, + Name = "На поверхности" + }, + new + { + Id = 1001, + Code = 0, + Name = "Бурение" + }, + new + { + Id = 1002, + Code = 0, + Name = "ГИС" + }, + new + { + Id = 1003, + Code = 0, + Name = "ГФР" + }, + new + { + Id = 1004, + Code = 0, + Name = "Монтаж ПВО" + }, + new + { + Id = 1005, + Code = 0, + Name = "Демонтаж ПВО" + }, + new + { + Id = 1006, + Code = 0, + Name = "Установка ФА" + }, + new + { + Id = 1007, + Code = 0, + Name = "Оборудование устья" + }, + new + { + Id = 1008, + Code = 0, + Name = "ОЗЦ" + }, + new + { + Id = 1011, + Code = 0, + Name = "Начало цикла строительства скважины" + }, + new + { + Id = 1012, + Code = 0, + Name = "Окончание цикла строительства скважины" + }, + new + { + Id = 1013, + Code = 0, + Name = "Опрессовка ПВО" + }, + new + { + Id = 1014, + Code = 0, + Name = "Опрессовка Ц.К." + }, + new + { + Id = 1015, + Code = 0, + Name = "Опрессовка ВЗД" + }, + new + { + Id = 1016, + Code = 0, + Name = "Перевод скв на другой тип промывочной жидкости" + }, + new + { + Id = 1017, + Code = 0, + Name = "Перезапись каротажа" + }, + new + { + Id = 1018, + Code = 0, + Name = "Перетяжка талевого каната" + }, + new + { + Id = 1019, + Code = 0, + Name = "Наращивание, промывка" + }, + new + { + Id = 1020, + Code = 0, + Name = "Подъем инструмента" + }, + new + { + Id = 1021, + Code = 0, + Name = "Подъем инструмента с промывкой" + }, + new + { + Id = 1022, + Code = 0, + Name = "Обратная проработка" + }, + new + { + Id = 1023, + Code = 0, + Name = "Сборка инструмента с мостков" + }, + new + { + Id = 1024, + Code = 0, + Name = "Подготовительные работы" + }, + new + { + Id = 1025, + Code = 0, + Name = "Сборка КНБК" + }, + new + { + Id = 1026, + Code = 0, + Name = "Разборка КНБК" + }, + new + { + Id = 1027, + Code = 0, + Name = "Промывка" + }, + new + { + Id = 1028, + Code = 0, + Name = "Промежуточная промывка" + }, + new + { + Id = 1029, + Code = 0, + Name = "Прокачка пачек" + }, + new + { + Id = 1030, + Code = 0, + Name = "Разбуривание тех.оснастки" + }, + new + { + Id = 1031, + Code = 0, + Name = "Ремонт" + }, + new + { + Id = 1032, + Code = 0, + Name = "Спуск инструмента" + }, + new + { + Id = 1033, + Code = 0, + Name = "Спуск инструмента с промывкой" + }, + new + { + Id = 1034, + Code = 0, + Name = "Прямая проработка" + }, + new + { + Id = 1035, + Code = 0, + Name = "Принудительная проработка" + }, + new + { + Id = 1037, + Code = 0, + Name = "Тех СПО-подъем" + }, + new + { + Id = 1038, + Code = 0, + Name = "Тех СПО-спуск" + }, + new + { + Id = 1039, + Code = 0, + Name = "Техническое обслуживание" + }, + new + { + Id = 1040, + Code = 0, + Name = "Цементаж" + }, + new + { + Id = 1041, + Code = 0, + Name = "Шаблонировка ствола" + }, + new + { + Id = 1042, + Code = 0, + Name = "Геологическое осложнение" + }, + new + { + Id = 1043, + Code = 0, + Name = "НПВ" + }, + new + { + Id = 1044, + Code = 0, + Name = "ВМР" + }, + new + { + Id = 1045, + Code = 0, + Name = "Прочее" + }, + new + { + Id = 1046, + Code = 0, + Name = "Спуск КНБК" + }, + new + { + Id = 1047, + Code = 0, + Name = "Подъем КНБК" + }, + new + { + Id = 1048, + Code = 0, + Name = "Спуск ОК" + }, + new + { + Id = 1050, + Code = 0, + Name = "Промывка при спуске ОК" + }, + new + { + Id = 1051, + Code = 0, + Name = "Замер ТС" + }, + new + { + Id = 1052, + Code = 0, + Name = "Тех. отстой" + }, + new + { + Id = 1053, + Code = 0, + Name = "Циркуляция и Обработка БР" + }, + new + { + Id = 1054, + Code = 0, + Name = "Срезка ствола" + }, + new + { + Id = 1055, + Code = 0, + Name = "Вспомогательные работы" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_section_type"); + + b.HasComment("конструкция секции скважины"); + + b.HasData( + new + { + Id = 1, + Caption = "Пилотный ствол" + }, + new + { + Id = 2, + Caption = "Направление" + }, + new + { + Id = 3, + Caption = "Кондуктор" + }, + new + { + Id = 4, + Caption = "Эксплуатационная колонна" + }, + new + { + Id = 5, + Caption = "Транспортный ствол" + }, + new + { + Id = 6, + Caption = "Хвостовик" + }, + new + { + Id = 7, + Caption = "Пилотный ствол 2" + }, + new + { + Id = 8, + Caption = "Направление 2" + }, + new + { + Id = 9, + Caption = "Кондуктор 2" + }, + new + { + Id = 10, + Caption = "Эксплуатационная колонна 2" + }, + new + { + Id = 11, + Caption = "Транспортный ствол 2" + }, + new + { + Id = 12, + Caption = "Хвостовик 2" + }, + new + { + Id = 13, + Caption = "Пилотный ствол 3" + }, + new + { + Id = 14, + Caption = "Направление 3" + }, + new + { + Id = 15, + Caption = "Кондуктор 3" + }, + new + { + Id = 16, + Caption = "Эксплуатационная колонна 3" + }, + new + { + Id = 17, + Caption = "Транспортный ствол 3" + }, + new + { + Id = 18, + Caption = "Хвостовик 3" + }, + new + { + Id = 19, + Caption = "Пилотный ствол 4" + }, + new + { + Id = 20, + Caption = "Направление 4" + }, + new + { + Id = 21, + Caption = "Кондуктор 4" + }, + new + { + Id = 22, + Caption = "Эксплуатационная колонна 4" + }, + new + { + Id = 23, + Caption = "Транспортный ствол 4" + }, + new + { + Id = 24, + Caption = "Хвостовик 4" + }, + new + { + Id = 25, + Caption = "Пилотный ствол 5" + }, + new + { + Id = 26, + Caption = "Направление 5" + }, + new + { + Id = 27, + Caption = "Кондуктор 5" + }, + new + { + Id = 28, + Caption = "Эксплуатационная колонна 5" + }, + new + { + Id = 29, + Caption = "Транспортный ствол 5" + }, + new + { + Id = 30, + Caption = "Хвостовик 5" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("caption") + .HasComment("Название"); + + b.HasKey("Id"); + + b.ToTable("t_well_type"); + + b.HasComment("конструкция скважины"); + + b.HasData( + new + { + Id = 1, + Caption = "Наклонно-направленная" + }, + new + { + Id = 2, + Caption = "Горизонтальная" + }); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.HasOne("AsbCloudDb.Model.Deposit", "Deposit") + .WithMany("Clusters") + .HasForeignKey("IdDeposit") + .HasConstraintName("t_cluster_t_deposit_id_fk"); + + b.Navigation("Deposit"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.HasOne("AsbCloudDb.Model.CompanyType", "CompanyType") + .WithMany("Companies") + .HasForeignKey("IdCompanyType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CompanyType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillFlowChart", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.DrillParams", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("DrillParamsCollection") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_drill_params_t_well_section_type_id_fk"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany("Files") + .HasForeignKey("IdAuthor"); + + b.HasOne("AsbCloudDb.Model.FileCategory", "FileCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("FileCategory"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileMark", b => + { + b.HasOne("AsbCloudDb.Model.FileInfo", "FileInfo") + .WithMany("FileMarks") + .HasForeignKey("IdFile") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_file_mark_t_file_info_fk"); + + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("FileMarks") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_user_t_file_mark_fk"); + + b.Navigation("FileInfo"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Measure", b => + { + b.HasOne("AsbCloudDb.Model.MeasureCategory", "Category") + .WithMany("Measures") + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdCompany") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_relation_company_well_t_company_id_fk"); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("RelationCompaniesWells") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_relation_company_well_t_well_id_fk"); + + b.Navigation("Company"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRolePermission", b => + { + b.HasOne("AsbCloudDb.Model.Permission", "Permission") + .WithMany("RelationUserRolePermissions") + .HasForeignKey("IdPermission") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "UserRole") + .WithMany("RelationUserRolePermissions") + .HasForeignKey("IdUserRole") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Permission"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => + { + b.HasOne("AsbCloudDb.Model.UserRole", "Role") + .WithMany("RelationUserRoleUserRoles") + .HasForeignKey("Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "IncludeRole") + .WithMany() + .HasForeignKey("IdInclude") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IncludeRole"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => + { + b.HasOne("AsbCloudDb.Model.User", "User") + .WithMany("RelationUsersUserRoles") + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.UserRole", "UserRole") + .WithMany("RelationUsersUserRoles") + .HasForeignKey("IdUserRole") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserRole"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.ReportProperty", b => + { + b.HasOne("AsbCloudDb.Model.FileInfo", "File") + .WithMany() + .HasForeignKey("IdFile") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("File"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.SetpointsRequest", b => + { + b.HasOne("AsbCloudDb.Model.User", "Author") + .WithMany() + .HasForeignKey("IdAuthor") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany() + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryAnalysis", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "Operation") + .WithMany("Analysis") + .HasForeignKey("IdOperation") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("t_analysis_t_operation_id_fk"); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Analysis") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_analysis_t_telemetry_id_fk"); + + b.Navigation("Operation"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSaub", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSaub") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_data_saub_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryDataSpin", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("DataSpin") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_data_spin_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryEvent", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Events") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_event_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryMessage", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Messages") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_messages_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.TelemetryUser", b => + { + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithMany("Users") + .HasForeignKey("IdTelemetry") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_telemetry_user_t_telemetry_id_fk"); + + b.Navigation("Telemetry"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.HasOne("AsbCloudDb.Model.Company", "Company") + .WithMany("Users") + .HasForeignKey("IdCompany") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("t_user_t_company_id_fk"); + + b.Navigation("Company"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.HasOne("AsbCloudDb.Model.Cluster", "Cluster") + .WithMany("Wells") + .HasForeignKey("IdCluster") + .HasConstraintName("t_well_t_cluster_id_fk"); + + b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") + .WithOne("Well") + .HasForeignKey("AsbCloudDb.Model.Well", "IdTelemetry") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("t_well_t_telemetry_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellType", "WellType") + .WithMany("Wells") + .HasForeignKey("IdWellType"); + + b.Navigation("Cluster"); + + b.Navigation("Telemetry"); + + b.Navigation("WellType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellComposite", b => + { + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("WellComposites") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_t_well_id_fk"); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("WellComposites") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_t_well_section_type_id_fk"); + + b.HasOne("AsbCloudDb.Model.Well", "WellSrc") + .WithMany("WellCompositeSrcs") + .HasForeignKey("IdWellSrc") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("t_well_сomposite_src_t_well_id_fk"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + + b.Navigation("WellSrc"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperation", b => + { + b.HasOne("AsbCloudDb.Model.WellOperationCategory", "OperationCategory") + .WithMany() + .HasForeignKey("IdCategory") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.Well", "Well") + .WithMany("WellOperations") + .HasForeignKey("IdWell") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AsbCloudDb.Model.WellSectionType", "WellSectionType") + .WithMany("WellOperations") + .HasForeignKey("IdWellSectionType") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperationCategory"); + + b.Navigation("Well"); + + b.Navigation("WellSectionType"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Cluster", b => + { + b.Navigation("Wells"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Company", b => + { + b.Navigation("RelationCompaniesWells"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.CompanyType", b => + { + b.Navigation("Companies"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Deposit", b => + { + b.Navigation("Clusters"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.FileInfo", b => + { + b.Navigation("FileMarks"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.MeasureCategory", b => + { + b.Navigation("Measures"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Permission", b => + { + b.Navigation("RelationUserRolePermissions"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Telemetry", b => + { + b.Navigation("Analysis"); + + b.Navigation("DataSaub"); + + b.Navigation("DataSpin"); + + b.Navigation("Events"); + + b.Navigation("Messages"); + + b.Navigation("Users"); + + b.Navigation("Well"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.User", b => + { + b.Navigation("FileMarks"); + + b.Navigation("Files"); + + b.Navigation("RelationUsersUserRoles"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.UserRole", b => + { + b.Navigation("RelationUserRolePermissions"); + + b.Navigation("RelationUserRoleUserRoles"); + + b.Navigation("RelationUsersUserRoles"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.Well", b => + { + b.Navigation("RelationCompaniesWells"); + + b.Navigation("WellCompositeSrcs"); + + b.Navigation("WellComposites"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellOperationCategory", b => + { + b.Navigation("Analysis"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellSectionType", b => + { + b.Navigation("DrillParamsCollection"); + + b.Navigation("WellComposites"); + + b.Navigation("WellOperations"); + }); + + modelBuilder.Entity("AsbCloudDb.Model.WellType", b => + { + b.Navigation("Wells"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.cs b/AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.cs new file mode 100644 index 00000000..dd6b5711 --- /dev/null +++ b/AsbCloudDb/Migrations/20220201071113_AddRolesRelatedDictionaries.cs @@ -0,0 +1,1261 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace AsbCloudDb.Migrations +{ + public partial class AddRolesRelatedDictionaries : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 2); + + migrationBuilder.InsertData( + table: "t_permission", + columns: new[] { "id", "description", "name" }, + values: new object[,] + { + { 100, "Разрешение удалять админ. Кусты", "AdminCluster.delete" }, + { 101, "Разрешение редактировать админ. Кусты", "AdminCluster.edit" }, + { 102, "Разрешение просматривать админ. Кусты", "AdminCluster.get" }, + { 103, "Разрешение удалять админ. Компании", "AdminCompany.delete" }, + { 104, "Разрешение редактировать админ. Компании", "AdminCompany.edit" }, + { 105, "Разрешение просматривать админ. Компании", "AdminCompany.get" }, + { 106, "Разрешение удалять админ. Типы компаний", "AdminCompanyType.delete" }, + { 107, "Разрешение редактировать админ. Типы компаний", "AdminCompanyType.edit" }, + { 108, "Разрешение просматривать админ. Типы компаний", "AdminCompanyType.get" }, + { 109, "Разрешение удалять админ. Месторождения", "AdminDeposit.delete" }, + { 110, "Разрешение редактировать админ. Месторождения", "AdminDeposit.edit" }, + { 111, "Разрешение просматривать админ. Месторождения", "AdminDeposit.get" }, + { 112, "Разрешение удалять админ. Разрешения", "AdminPermission.delete" }, + { 113, "Разрешение редактировать админ. Разрешения", "AdminPermission.edit" }, + { 114, "Разрешение просматривать админ. Разрешения", "AdminPermission.get" }, + { 115, "Разрешение удалять админ. Телеметрию", "AdminTelemetry.delete" }, + { 116, "Разрешение редактировать админ. Телеметрию", "AdminTelemetry.edit" }, + { 117, "Разрешение просматривать админ. Телеметрию", "AdminTelemetry.get" }, + { 118, "Разрешение удалять админ. Пользователей", "AdminUser.delete" }, + { 119, "Разрешение редактировать админ. Пользователей", "AdminUser.edit" }, + { 120, "Разрешение просматривать админ. Пользователей", "AdminUser.get" }, + { 121, "Разрешение удалять админ. Роли пользователей", "AdminUserRole.delete" }, + { 122, "Разрешение редактировать админ. Роли пользователей", "AdminUserRole.edit" }, + { 123, "Разрешение просматривать админ. Роли пользователей", "AdminUserRole.get" }, + { 124, "Разрешение удалять админ. Скважины", "AdminWell.delete" }, + { 125, "Разрешение редактировать админ. Скважины", "AdminWell.edit" }, + { 126, "Разрешение просматривать админ. Скважины", "AdminWell.get" }, + { 200, "Разрешение редактировать 0", "Auth.edit" }, + { 201, "Разрешение просматривать 0", "Auth.get" }, + { 202, "Разрешение просматривать Кусты", "Cluster.get" }, + { 203, "Разрешение просматривать Месторождения", "Deposit.get" }, + { 204, "Разрешение удалять РТК", "DrillFlowChart.delete" }, + { 205, "Разрешение редактировать РТК", "DrillFlowChart.edit" }, + { 206, "Разрешение просматривать РТК", "DrillFlowChart.get" }, + { 207, "Разрешение удалять Программу бурения", "DrillingProgram.delete" }, + { 208, "Разрешение редактировать Программу бурения", "DrillingProgram.edit" }, + { 209, "Разрешение просматривать Программу бурения", "DrillingProgram.get" }, + { 210, "Разрешение удалять Режимы бурения", "DrillParams.delete" }, + { 211, "Разрешение редактировать Режимы бурения", "DrillParams.edit" }, + { 212, "Разрешение просматривать Режимы бурения", "DrillParams.get" }, + { 213, "Разрешение удалять Файлы", "File.delete" }, + { 214, "Разрешение редактировать Файлы", "File.edit" }, + { 215, "Разрешение просматривать Файлы", "File.get" }, + { 216, "Разрешение удалять Измерения", "Measure.delete" }, + { 217, "Разрешение редактировать Измерения", "Measure.edit" }, + { 218, "Разрешение просматривать Измерения", "Measure.get" }, + { 219, "Разрешение просматривать Сообщения телеметрии", "Message.get" }, + { 220, "Разрешение просматривать Статистику по операциям", "OperationStat.get" }, + { 221, "Разрешение редактировать Рапорта", "Report.edit" }, + { 222, "Разрешение просматривать Рапорта", "Report.get" }, + { 223, "Разрешение просматривать админ. Системная статистика", "RequerstTracker.get" }, + { 224, "Разрешение удалять Рекомендации уставок", "Setpoints.delete" }, + { 225, "Разрешение редактировать Рекомендации уставок", "Setpoints.edit" }, + { 226, "Разрешение просматривать Рекомендации уставок", "Setpoints.get" }, + { 227, "Разрешение редактировать Телеметрии", "Telemetry.edit" }, + { 228, "Разрешение просматривать Анализ телеметрии", "TelemetryAnalytics.get" }, + { 229, "Разрешение редактировать Данные телеметрии по САУБ", "TelemetryDataSaub.edit" }, + { 230, "Разрешение просматривать Данные телеметрии по САУБ", "TelemetryDataSaub.get" }, + { 231, "Разрешение редактировать Данные телеметрии по SpinMaster", "TelemetryDataSpin.edit" }, + { 232, "Разрешение просматривать Данные телеметрии по SpinMaster", "TelemetryDataSpin.get" }, + { 233, "Разрешение редактировать Скважины", "Well.edit" }, + { 234, "Разрешение просматривать Скважины", "Well.get" }, + { 235, "Разрешение редактировать Композитные скважины", "WellComposite.edit" }, + { 236, "Разрешение просматривать Композитные скважины", "WellComposite.get" }, + { 237, "Разрешение удалять Операции по скважинам", "WellOperation.delete" }, + { 238, "Разрешение редактировать Операции по скважинам", "WellOperation.edit" }, + { 239, "Разрешение просматривать Операции по скважинам", "WellOperation.get" } + }); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1, + column: "caption", + value: "root"); + + migrationBuilder.InsertData( + table: "t_user_role", + columns: new[] { "id", "caption", "id_type" }, + values: new object[,] + { + { 1100, "admin_cluster.view", 0 }, + { 1101, "admin_cluster.edit", 0 }, + { 1102, "admin_company.view", 0 }, + { 1103, "admin_company.edit", 0 }, + { 1104, "admin_company_type.view", 0 }, + { 1105, "admin_company_type.edit", 0 }, + { 1106, "admin_deposit.view", 0 }, + { 1107, "admin_deposit.edit", 0 }, + { 1108, "admin_permission.view", 0 }, + { 1109, "admin_permission.edit", 0 }, + { 1110, "admin_role.view", 0 }, + { 1111, "admin_role.edit", 0 }, + { 1112, "admin_telemetry.view", 0 }, + { 1113, "admin_user.view", 0 }, + { 1114, "admin_user.edit", 0 }, + { 1115, "admin_visit_log.view", 0 }, + { 1116, "admin_well.view", 0 }, + { 1117, "admin_well.edit", 0 }, + { 1200, "archive.view", 0 }, + { 1201, "cluster.view", 0 }, + { 1202, "composite.view", 0 }, + { 1203, "composite.edit", 0 }, + { 1204, "deposit.view", 0 }, + { 1205, "document.view", 0 }, + { 1206, "drillProcessFlow.view", 0 }, + { 1207, "drillProcessFlow.edit", 0 }, + { 1208, "measure.view", 0 }, + { 1209, "measure.edit", 0 }, + { 1210, "message.view", 0 }, + { 1211, "operations.view", 0 }, + { 1212, "operations.edit", 0 }, + { 1213, "params.view", 0 }, + { 1214, "params.edit", 0 }, + { 1215, "report.view", 0 }, + { 1216, "report.edit", 0 }, + { 1217, "setpoints.view", 0 }, + { 1218, "setpoints.edit", 0 }, + { 1219, "telemetry.view", 0 }, + { 1220, "telemetryAnalysis.view", 0 }, + { 1221, "well.view", 0 } + }); + + migrationBuilder.InsertData( + table: "t_relation_user_role_permission", + columns: new[] { "id_permission", "id_user_role" }, + values: new object[,] + { + { 102, 1100 }, + { 111, 1100 }, + { 100, 1101 }, + { 101, 1101 }, + { 105, 1102 }, + { 108, 1102 }, + { 103, 1103 }, + { 104, 1103 }, + { 108, 1104 }, + { 106, 1105 }, + { 107, 1105 }, + { 111, 1106 }, + { 109, 1107 }, + { 110, 1107 }, + { 114, 1108 }, + { 112, 1109 }, + { 113, 1109 }, + { 114, 1110 }, + { 123, 1110 }, + { 121, 1111 }, + { 122, 1111 }, + { 117, 1112 }, + { 105, 1113 }, + { 120, 1113 }, + { 123, 1113 }, + { 118, 1114 }, + { 119, 1114 }, + { 200, 1114 }, + { 223, 1115 }, + { 102, 1116 }, + { 105, 1116 }, + { 117, 1116 }, + { 124, 1117 }, + { 125, 1117 }, + { 203, 1200 }, + { 230, 1200 }, + { 202, 1201 }, + { 203, 1201 }, + { 220, 1201 }, + { 203, 1202 }, + { 220, 1202 }, + { 236, 1202 }, + { 235, 1203 }, + { 202, 1204 }, + { 203, 1204 }, + { 215, 1205 }, + { 203, 1206 }, + { 206, 1206 }, + { 205, 1207 }, + { 218, 1208 }, + { 217, 1209 }, + { 203, 1210 }, + { 230, 1210 }, + { 203, 1211 }, + { 220, 1211 }, + { 239, 1211 }, + { 237, 1212 }, + { 238, 1212 }, + { 203, 1213 }, + { 212, 1213 }, + { 239, 1213 }, + { 210, 1214 }, + { 211, 1214 }, + { 203, 1215 }, + { 222, 1215 }, + { 221, 1216 }, + { 226, 1217 }, + { 224, 1218 }, + { 225, 1218 }, + { 203, 1219 }, + { 206, 1219 }, + { 230, 1219 }, + { 203, 1220 }, + { 228, 1220 }, + { 202, 1221 }, + { 203, 1221 }, + { 220, 1221 } + }); + + migrationBuilder.InsertData( + table: "t_relation_user_role_user_role", + columns: new[] { "id_user_role", "id_include_user_role" }, + values: new object[,] + { + { 1101, 1100 }, + { 1103, 1102 }, + { 1105, 1104 }, + { 1107, 1106 }, + { 1109, 1108 }, + { 1111, 1110 }, + { 1114, 1113 }, + { 1117, 1116 }, + { 1203, 1202 }, + { 1207, 1206 }, + { 1209, 1208 }, + { 1212, 1211 }, + { 1214, 1213 }, + { 1216, 1215 }, + { 1218, 1217 } + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 115); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 116); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 126); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 201); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 204); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 207); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 208); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 209); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 213); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 214); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 216); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 219); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 227); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 229); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 231); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 232); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 233); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 234); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 102, 1100 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 111, 1100 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 100, 1101 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 101, 1101 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 105, 1102 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 108, 1102 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 103, 1103 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 104, 1103 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 108, 1104 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 106, 1105 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 107, 1105 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 111, 1106 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 109, 1107 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 110, 1107 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 114, 1108 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 112, 1109 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 113, 1109 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 114, 1110 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 123, 1110 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 121, 1111 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 122, 1111 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 117, 1112 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 105, 1113 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 120, 1113 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 123, 1113 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 118, 1114 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 119, 1114 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 200, 1114 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 223, 1115 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 102, 1116 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 105, 1116 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 117, 1116 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 124, 1117 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 125, 1117 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1200 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 230, 1200 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 202, 1201 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1201 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 220, 1201 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1202 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 220, 1202 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 236, 1202 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 235, 1203 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 202, 1204 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1204 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 215, 1205 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1206 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 206, 1206 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 205, 1207 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 218, 1208 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 217, 1209 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1210 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 230, 1210 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1211 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 220, 1211 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 239, 1211 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 237, 1212 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 238, 1212 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1213 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 212, 1213 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 239, 1213 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 210, 1214 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 211, 1214 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1215 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 222, 1215 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 221, 1216 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 226, 1217 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 224, 1218 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 225, 1218 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1219 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 206, 1219 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 230, 1219 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1220 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 228, 1220 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 202, 1221 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 203, 1221 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_permission", + keyColumns: new[] { "id_permission", "id_user_role" }, + keyValues: new object[] { 220, 1221 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1101, 1100 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1103, 1102 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1105, 1104 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1107, 1106 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1109, 1108 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1111, 1110 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1114, 1113 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1117, 1116 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1203, 1202 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1207, 1206 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1209, 1208 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1212, 1211 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1214, 1213 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1216, 1215 }); + + migrationBuilder.DeleteData( + table: "t_relation_user_role_user_role", + keyColumns: new[] { "id_user_role", "id_include_user_role" }, + keyValues: new object[] { 1218, 1217 }); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 100); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 101); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 102); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 103); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 104); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 105); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 106); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 107); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 108); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 109); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 110); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 111); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 112); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 113); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 114); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 117); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 118); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 119); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 120); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 121); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 122); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 123); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 124); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 125); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 200); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 202); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 203); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 205); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 206); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 210); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 211); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 212); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 215); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 217); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 218); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 220); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 221); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 222); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 223); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 224); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 225); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 226); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 228); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 230); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 235); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 236); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 237); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 238); + + migrationBuilder.DeleteData( + table: "t_permission", + keyColumn: "id", + keyValue: 239); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1100); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1101); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1102); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1103); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1104); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1105); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1106); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1107); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1108); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1109); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1110); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1111); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1112); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1113); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1114); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1115); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1116); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1117); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1200); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1201); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1202); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1203); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1204); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1205); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1206); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1207); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1208); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1209); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1210); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1211); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1212); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1213); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1214); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1215); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1216); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1217); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1218); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1219); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1220); + + migrationBuilder.DeleteData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1221); + + migrationBuilder.UpdateData( + table: "t_user_role", + keyColumn: "id", + keyValue: 1, + column: "caption", + value: "Администратор"); + + migrationBuilder.InsertData( + table: "t_user_role", + columns: new[] { "id", "caption", "id_type" }, + values: new object[] { 2, "Пользователь", 0 }); + } + } +} diff --git a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs index dcebd312..f7561c8f 100644 --- a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs +++ b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs @@ -716,6 +716,410 @@ namespace AsbCloudDb.Migrations b.ToTable("t_permission"); b.HasComment("Разрешения на доступ к данным"); + + b.HasData( + new + { + Id = 100, + Description = "Разрешение удалять админ. Кусты", + Name = "AdminCluster.delete" + }, + new + { + Id = 101, + Description = "Разрешение редактировать админ. Кусты", + Name = "AdminCluster.edit" + }, + new + { + Id = 102, + Description = "Разрешение просматривать админ. Кусты", + Name = "AdminCluster.get" + }, + new + { + Id = 103, + Description = "Разрешение удалять админ. Компании", + Name = "AdminCompany.delete" + }, + new + { + Id = 104, + Description = "Разрешение редактировать админ. Компании", + Name = "AdminCompany.edit" + }, + new + { + Id = 105, + Description = "Разрешение просматривать админ. Компании", + Name = "AdminCompany.get" + }, + new + { + Id = 106, + Description = "Разрешение удалять админ. Типы компаний", + Name = "AdminCompanyType.delete" + }, + new + { + Id = 107, + Description = "Разрешение редактировать админ. Типы компаний", + Name = "AdminCompanyType.edit" + }, + new + { + Id = 108, + Description = "Разрешение просматривать админ. Типы компаний", + Name = "AdminCompanyType.get" + }, + new + { + Id = 109, + Description = "Разрешение удалять админ. Месторождения", + Name = "AdminDeposit.delete" + }, + new + { + Id = 110, + Description = "Разрешение редактировать админ. Месторождения", + Name = "AdminDeposit.edit" + }, + new + { + Id = 111, + Description = "Разрешение просматривать админ. Месторождения", + Name = "AdminDeposit.get" + }, + new + { + Id = 112, + Description = "Разрешение удалять админ. Разрешения", + Name = "AdminPermission.delete" + }, + new + { + Id = 113, + Description = "Разрешение редактировать админ. Разрешения", + Name = "AdminPermission.edit" + }, + new + { + Id = 114, + Description = "Разрешение просматривать админ. Разрешения", + Name = "AdminPermission.get" + }, + new + { + Id = 115, + Description = "Разрешение удалять админ. Телеметрию", + Name = "AdminTelemetry.delete" + }, + new + { + Id = 116, + Description = "Разрешение редактировать админ. Телеметрию", + Name = "AdminTelemetry.edit" + }, + new + { + Id = 117, + Description = "Разрешение просматривать админ. Телеметрию", + Name = "AdminTelemetry.get" + }, + new + { + Id = 118, + Description = "Разрешение удалять админ. Пользователей", + Name = "AdminUser.delete" + }, + new + { + Id = 119, + Description = "Разрешение редактировать админ. Пользователей", + Name = "AdminUser.edit" + }, + new + { + Id = 120, + Description = "Разрешение просматривать админ. Пользователей", + Name = "AdminUser.get" + }, + new + { + Id = 121, + Description = "Разрешение удалять админ. Роли пользователей", + Name = "AdminUserRole.delete" + }, + new + { + Id = 122, + Description = "Разрешение редактировать админ. Роли пользователей", + Name = "AdminUserRole.edit" + }, + new + { + Id = 123, + Description = "Разрешение просматривать админ. Роли пользователей", + Name = "AdminUserRole.get" + }, + new + { + Id = 124, + Description = "Разрешение удалять админ. Скважины", + Name = "AdminWell.delete" + }, + new + { + Id = 125, + Description = "Разрешение редактировать админ. Скважины", + Name = "AdminWell.edit" + }, + new + { + Id = 126, + Description = "Разрешение просматривать админ. Скважины", + Name = "AdminWell.get" + }, + new + { + Id = 200, + Description = "Разрешение редактировать 0", + Name = "Auth.edit" + }, + new + { + Id = 201, + Description = "Разрешение просматривать 0", + Name = "Auth.get" + }, + new + { + Id = 202, + Description = "Разрешение просматривать Кусты", + Name = "Cluster.get" + }, + new + { + Id = 203, + Description = "Разрешение просматривать Месторождения", + Name = "Deposit.get" + }, + new + { + Id = 204, + Description = "Разрешение удалять РТК", + Name = "DrillFlowChart.delete" + }, + new + { + Id = 205, + Description = "Разрешение редактировать РТК", + Name = "DrillFlowChart.edit" + }, + new + { + Id = 206, + Description = "Разрешение просматривать РТК", + Name = "DrillFlowChart.get" + }, + new + { + Id = 207, + Description = "Разрешение удалять Программу бурения", + Name = "DrillingProgram.delete" + }, + new + { + Id = 208, + Description = "Разрешение редактировать Программу бурения", + Name = "DrillingProgram.edit" + }, + new + { + Id = 209, + Description = "Разрешение просматривать Программу бурения", + Name = "DrillingProgram.get" + }, + new + { + Id = 210, + Description = "Разрешение удалять Режимы бурения", + Name = "DrillParams.delete" + }, + new + { + Id = 211, + Description = "Разрешение редактировать Режимы бурения", + Name = "DrillParams.edit" + }, + new + { + Id = 212, + Description = "Разрешение просматривать Режимы бурения", + Name = "DrillParams.get" + }, + new + { + Id = 213, + Description = "Разрешение удалять Файлы", + Name = "File.delete" + }, + new + { + Id = 214, + Description = "Разрешение редактировать Файлы", + Name = "File.edit" + }, + new + { + Id = 215, + Description = "Разрешение просматривать Файлы", + Name = "File.get" + }, + new + { + Id = 216, + Description = "Разрешение удалять Измерения", + Name = "Measure.delete" + }, + new + { + Id = 217, + Description = "Разрешение редактировать Измерения", + Name = "Measure.edit" + }, + new + { + Id = 218, + Description = "Разрешение просматривать Измерения", + Name = "Measure.get" + }, + new + { + Id = 219, + Description = "Разрешение просматривать Сообщения телеметрии", + Name = "Message.get" + }, + new + { + Id = 220, + Description = "Разрешение просматривать Статистику по операциям", + Name = "OperationStat.get" + }, + new + { + Id = 221, + Description = "Разрешение редактировать Рапорта", + Name = "Report.edit" + }, + new + { + Id = 222, + Description = "Разрешение просматривать Рапорта", + Name = "Report.get" + }, + new + { + Id = 223, + Description = "Разрешение просматривать админ. Системная статистика", + Name = "RequerstTracker.get" + }, + new + { + Id = 224, + Description = "Разрешение удалять Рекомендации уставок", + Name = "Setpoints.delete" + }, + new + { + Id = 225, + Description = "Разрешение редактировать Рекомендации уставок", + Name = "Setpoints.edit" + }, + new + { + Id = 226, + Description = "Разрешение просматривать Рекомендации уставок", + Name = "Setpoints.get" + }, + new + { + Id = 227, + Description = "Разрешение редактировать Телеметрии", + Name = "Telemetry.edit" + }, + new + { + Id = 228, + Description = "Разрешение просматривать Анализ телеметрии", + Name = "TelemetryAnalytics.get" + }, + new + { + Id = 229, + Description = "Разрешение редактировать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.edit" + }, + new + { + Id = 230, + Description = "Разрешение просматривать Данные телеметрии по САУБ", + Name = "TelemetryDataSaub.get" + }, + new + { + Id = 231, + Description = "Разрешение редактировать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.edit" + }, + new + { + Id = 232, + Description = "Разрешение просматривать Данные телеметрии по SpinMaster", + Name = "TelemetryDataSpin.get" + }, + new + { + Id = 233, + Description = "Разрешение редактировать Скважины", + Name = "Well.edit" + }, + new + { + Id = 234, + Description = "Разрешение просматривать Скважины", + Name = "Well.get" + }, + new + { + Id = 235, + Description = "Разрешение редактировать Композитные скважины", + Name = "WellComposite.edit" + }, + new + { + Id = 236, + Description = "Разрешение просматривать Композитные скважины", + Name = "WellComposite.get" + }, + new + { + Id = 237, + Description = "Разрешение удалять Операции по скважинам", + Name = "WellOperation.delete" + }, + new + { + Id = 238, + Description = "Разрешение редактировать Операции по скважинам", + Name = "WellOperation.edit" + }, + new + { + Id = 239, + Description = "Разрешение просматривать Операции по скважинам", + Name = "WellOperation.get" + }); }); modelBuilder.Entity("AsbCloudDb.Model.RelationCompanyWell", b => @@ -754,6 +1158,393 @@ namespace AsbCloudDb.Migrations b.ToTable("t_relation_user_role_permission"); b.HasComment("Отношение ролей пользователей и разрешений доступа"); + + b.HasData( + new + { + IdUserRole = 1100, + IdPermission = 102 + }, + new + { + IdUserRole = 1100, + IdPermission = 111 + }, + new + { + IdUserRole = 1101, + IdPermission = 101 + }, + new + { + IdUserRole = 1101, + IdPermission = 100 + }, + new + { + IdUserRole = 1102, + IdPermission = 105 + }, + new + { + IdUserRole = 1102, + IdPermission = 108 + }, + new + { + IdUserRole = 1103, + IdPermission = 104 + }, + new + { + IdUserRole = 1103, + IdPermission = 103 + }, + new + { + IdUserRole = 1104, + IdPermission = 108 + }, + new + { + IdUserRole = 1105, + IdPermission = 107 + }, + new + { + IdUserRole = 1105, + IdPermission = 106 + }, + new + { + IdUserRole = 1106, + IdPermission = 111 + }, + new + { + IdUserRole = 1107, + IdPermission = 110 + }, + new + { + IdUserRole = 1107, + IdPermission = 109 + }, + new + { + IdUserRole = 1108, + IdPermission = 114 + }, + new + { + IdUserRole = 1109, + IdPermission = 113 + }, + new + { + IdUserRole = 1109, + IdPermission = 112 + }, + new + { + IdUserRole = 1110, + IdPermission = 123 + }, + new + { + IdUserRole = 1110, + IdPermission = 114 + }, + new + { + IdUserRole = 1111, + IdPermission = 122 + }, + new + { + IdUserRole = 1111, + IdPermission = 121 + }, + new + { + IdUserRole = 1112, + IdPermission = 117 + }, + new + { + IdUserRole = 1113, + IdPermission = 105 + }, + new + { + IdUserRole = 1113, + IdPermission = 123 + }, + new + { + IdUserRole = 1113, + IdPermission = 120 + }, + new + { + IdUserRole = 1114, + IdPermission = 119 + }, + new + { + IdUserRole = 1114, + IdPermission = 118 + }, + new + { + IdUserRole = 1114, + IdPermission = 200 + }, + new + { + IdUserRole = 1115, + IdPermission = 223 + }, + new + { + IdUserRole = 1116, + IdPermission = 105 + }, + new + { + IdUserRole = 1116, + IdPermission = 102 + }, + new + { + IdUserRole = 1116, + IdPermission = 117 + }, + new + { + IdUserRole = 1117, + IdPermission = 125 + }, + new + { + IdUserRole = 1117, + IdPermission = 124 + }, + new + { + IdUserRole = 1200, + IdPermission = 203 + }, + new + { + IdUserRole = 1200, + IdPermission = 230 + }, + new + { + IdUserRole = 1201, + IdPermission = 202 + }, + new + { + IdUserRole = 1201, + IdPermission = 203 + }, + new + { + IdUserRole = 1201, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 203 + }, + new + { + IdUserRole = 1202, + IdPermission = 220 + }, + new + { + IdUserRole = 1202, + IdPermission = 236 + }, + new + { + IdUserRole = 1203, + IdPermission = 235 + }, + new + { + IdUserRole = 1204, + IdPermission = 202 + }, + new + { + IdUserRole = 1204, + IdPermission = 203 + }, + new + { + IdUserRole = 1205, + IdPermission = 215 + }, + new + { + IdUserRole = 1206, + IdPermission = 203 + }, + new + { + IdUserRole = 1206, + IdPermission = 206 + }, + new + { + IdUserRole = 1207, + IdPermission = 205 + }, + new + { + IdUserRole = 1208, + IdPermission = 218 + }, + new + { + IdUserRole = 1209, + IdPermission = 217 + }, + new + { + IdUserRole = 1210, + IdPermission = 203 + }, + new + { + IdUserRole = 1210, + IdPermission = 230 + }, + new + { + IdUserRole = 1211, + IdPermission = 203 + }, + new + { + IdUserRole = 1211, + IdPermission = 220 + }, + new + { + IdUserRole = 1211, + IdPermission = 239 + }, + new + { + IdUserRole = 1212, + IdPermission = 238 + }, + new + { + IdUserRole = 1212, + IdPermission = 237 + }, + new + { + IdUserRole = 1213, + IdPermission = 203 + }, + new + { + IdUserRole = 1213, + IdPermission = 239 + }, + new + { + IdUserRole = 1213, + IdPermission = 212 + }, + new + { + IdUserRole = 1214, + IdPermission = 211 + }, + new + { + IdUserRole = 1214, + IdPermission = 210 + }, + new + { + IdUserRole = 1215, + IdPermission = 203 + }, + new + { + IdUserRole = 1215, + IdPermission = 222 + }, + new + { + IdUserRole = 1216, + IdPermission = 221 + }, + new + { + IdUserRole = 1217, + IdPermission = 226 + }, + new + { + IdUserRole = 1218, + IdPermission = 225 + }, + new + { + IdUserRole = 1218, + IdPermission = 224 + }, + new + { + IdUserRole = 1219, + IdPermission = 203 + }, + new + { + IdUserRole = 1219, + IdPermission = 206 + }, + new + { + IdUserRole = 1219, + IdPermission = 230 + }, + new + { + IdUserRole = 1220, + IdPermission = 203 + }, + new + { + IdUserRole = 1220, + IdPermission = 228 + }, + new + { + IdUserRole = 1221, + IdPermission = 202 + }, + new + { + IdUserRole = 1221, + IdPermission = 203 + }, + new + { + IdUserRole = 1221, + IdPermission = 220 + }); }); modelBuilder.Entity("AsbCloudDb.Model.RelationUserRoleUserRole", b => @@ -774,6 +1565,83 @@ namespace AsbCloudDb.Migrations b.ToTable("t_relation_user_role_user_role"); b.HasComment("Отношение ролей к ролям"); + + b.HasData( + new + { + Id = 1101, + IdInclude = 1100 + }, + new + { + Id = 1103, + IdInclude = 1102 + }, + new + { + Id = 1105, + IdInclude = 1104 + }, + new + { + Id = 1107, + IdInclude = 1106 + }, + new + { + Id = 1109, + IdInclude = 1108 + }, + new + { + Id = 1111, + IdInclude = 1110 + }, + new + { + Id = 1114, + IdInclude = 1113 + }, + new + { + Id = 1117, + IdInclude = 1116 + }, + new + { + Id = 1203, + IdInclude = 1202 + }, + new + { + Id = 1207, + IdInclude = 1206 + }, + new + { + Id = 1209, + IdInclude = 1208 + }, + new + { + Id = 1212, + IdInclude = 1211 + }, + new + { + Id = 1214, + IdInclude = 1213 + }, + new + { + Id = 1216, + IdInclude = 1215 + }, + new + { + Id = 1218, + IdInclude = 1217 + }); }); modelBuilder.Entity("AsbCloudDb.Model.RelationUserUserRole", b => @@ -1799,13 +2667,247 @@ namespace AsbCloudDb.Migrations new { Id = 1, - Caption = "Администратор", + Caption = "root", IdType = 0 }, new { - Id = 2, - Caption = "Пользователь", + Id = 1100, + Caption = "admin_cluster.view", + IdType = 0 + }, + new + { + Id = 1101, + Caption = "admin_cluster.edit", + IdType = 0 + }, + new + { + Id = 1102, + Caption = "admin_company.view", + IdType = 0 + }, + new + { + Id = 1103, + Caption = "admin_company.edit", + IdType = 0 + }, + new + { + Id = 1104, + Caption = "admin_company_type.view", + IdType = 0 + }, + new + { + Id = 1105, + Caption = "admin_company_type.edit", + IdType = 0 + }, + new + { + Id = 1106, + Caption = "admin_deposit.view", + IdType = 0 + }, + new + { + Id = 1107, + Caption = "admin_deposit.edit", + IdType = 0 + }, + new + { + Id = 1108, + Caption = "admin_permission.view", + IdType = 0 + }, + new + { + Id = 1109, + Caption = "admin_permission.edit", + IdType = 0 + }, + new + { + Id = 1110, + Caption = "admin_role.view", + IdType = 0 + }, + new + { + Id = 1111, + Caption = "admin_role.edit", + IdType = 0 + }, + new + { + Id = 1112, + Caption = "admin_telemetry.view", + IdType = 0 + }, + new + { + Id = 1113, + Caption = "admin_user.view", + IdType = 0 + }, + new + { + Id = 1114, + Caption = "admin_user.edit", + IdType = 0 + }, + new + { + Id = 1115, + Caption = "admin_visit_log.view", + IdType = 0 + }, + new + { + Id = 1116, + Caption = "admin_well.view", + IdType = 0 + }, + new + { + Id = 1117, + Caption = "admin_well.edit", + IdType = 0 + }, + new + { + Id = 1200, + Caption = "archive.view", + IdType = 0 + }, + new + { + Id = 1201, + Caption = "cluster.view", + IdType = 0 + }, + new + { + Id = 1202, + Caption = "composite.view", + IdType = 0 + }, + new + { + Id = 1203, + Caption = "composite.edit", + IdType = 0 + }, + new + { + Id = 1204, + Caption = "deposit.view", + IdType = 0 + }, + new + { + Id = 1205, + Caption = "document.view", + IdType = 0 + }, + new + { + Id = 1206, + Caption = "drillProcessFlow.view", + IdType = 0 + }, + new + { + Id = 1207, + Caption = "drillProcessFlow.edit", + IdType = 0 + }, + new + { + Id = 1208, + Caption = "measure.view", + IdType = 0 + }, + new + { + Id = 1209, + Caption = "measure.edit", + IdType = 0 + }, + new + { + Id = 1210, + Caption = "message.view", + IdType = 0 + }, + new + { + Id = 1211, + Caption = "operations.view", + IdType = 0 + }, + new + { + Id = 1212, + Caption = "operations.edit", + IdType = 0 + }, + new + { + Id = 1213, + Caption = "params.view", + IdType = 0 + }, + new + { + Id = 1214, + Caption = "params.edit", + IdType = 0 + }, + new + { + Id = 1215, + Caption = "report.view", + IdType = 0 + }, + new + { + Id = 1216, + Caption = "report.edit", + IdType = 0 + }, + new + { + Id = 1217, + Caption = "setpoints.view", + IdType = 0 + }, + new + { + Id = 1218, + Caption = "setpoints.edit", + IdType = 0 + }, + new + { + Id = 1219, + Caption = "telemetry.view", + IdType = 0 + }, + new + { + Id = 1220, + Caption = "telemetryAnalysis.view", + IdType = 0 + }, + new + { + Id = 1221, + Caption = "well.view", IdType = 0 }); }); diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 22f94ac4..efefd114 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -271,8 +271,190 @@ namespace AsbCloudDb.Model modelBuilder.Entity(entity => { entity.HasData(new List{ - new UserRole{ Id = 1, Caption = "Администратор", }, - new UserRole{ Id = 2, Caption = "Пользователь", }, + new UserRole{ Id = 1, Caption = "root", }, + new UserRole{ Id = 1100, Caption = "admin_cluster.view"}, + new UserRole{ Id = 1101, Caption = "admin_cluster.edit"}, + new UserRole{ Id = 1102, Caption = "admin_company.view"}, + new UserRole{ Id = 1103, Caption = "admin_company.edit"}, + new UserRole{ Id = 1104, Caption = "admin_company_type.view"}, + new UserRole{ Id = 1105, Caption = "admin_company_type.edit"}, + new UserRole{ Id = 1106, Caption = "admin_deposit.view"}, + new UserRole{ Id = 1107, Caption = "admin_deposit.edit"}, + new UserRole{ Id = 1108, Caption = "admin_permission.view"}, + new UserRole{ Id = 1109, Caption = "admin_permission.edit"}, + new UserRole{ Id = 1110, Caption = "admin_role.view"}, + new UserRole{ Id = 1111, Caption = "admin_role.edit"}, + new UserRole{ Id = 1112, Caption = "admin_telemetry.view"}, + new UserRole{ Id = 1113, Caption = "admin_user.view"}, + new UserRole{ Id = 1114, Caption = "admin_user.edit"}, + new UserRole{ Id = 1115, Caption = "admin_visit_log.view"}, + new UserRole{ Id = 1116, Caption = "admin_well.view"}, + new UserRole{ Id = 1117, Caption = "admin_well.edit"}, + new UserRole{ Id = 1200, Caption = "archive.view"}, + new UserRole{ Id = 1201, Caption = "cluster.view"}, + new UserRole{ Id = 1202, Caption = "composite.view"}, + new UserRole{ Id = 1203, Caption = "composite.edit"}, + new UserRole{ Id = 1204, Caption = "deposit.view"}, + new UserRole{ Id = 1205, Caption = "document.view"}, + new UserRole{ Id = 1206, Caption = "drillProcessFlow.view"}, + new UserRole{ Id = 1207, Caption = "drillProcessFlow.edit"}, + new UserRole{ Id = 1208, Caption = "measure.view"}, + new UserRole{ Id = 1209, Caption = "measure.edit"}, + new UserRole{ Id = 1210, Caption = "message.view"}, + new UserRole{ Id = 1211, Caption = "operations.view"}, + new UserRole{ Id = 1212, Caption = "operations.edit"}, + new UserRole{ Id = 1213, Caption = "params.view"}, + new UserRole{ Id = 1214, Caption = "params.edit"}, + new UserRole{ Id = 1215, Caption = "report.view"}, + new UserRole{ Id = 1216, Caption = "report.edit"}, + new UserRole{ Id = 1217, Caption = "setpoints.view"}, + new UserRole{ Id = 1218, Caption = "setpoints.edit"}, + new UserRole{ Id = 1219, Caption = "telemetry.view"}, + new UserRole{ Id = 1220, Caption = "telemetryAnalysis.view"}, + new UserRole{ Id = 1221, Caption = "well.view"}, + }); + }); + + modelBuilder.Entity(entity => + { + entity.HasData(new List + { + new RelationUserRoleUserRole{ Id = 1101, IdInclude = 1100 }, + new RelationUserRoleUserRole{ Id = 1103, IdInclude = 1102 }, + new RelationUserRoleUserRole{ Id = 1105, IdInclude = 1104 }, + new RelationUserRoleUserRole{ Id = 1107, IdInclude = 1106 }, + new RelationUserRoleUserRole{ Id = 1109, IdInclude = 1108 }, + new RelationUserRoleUserRole{ Id = 1111, IdInclude = 1110 }, + new RelationUserRoleUserRole{ Id = 1114, IdInclude = 1113 }, + new RelationUserRoleUserRole{ Id = 1117, IdInclude = 1116 }, + new RelationUserRoleUserRole{ Id = 1203, IdInclude = 1202 }, + new RelationUserRoleUserRole{ Id = 1207, IdInclude = 1206 }, + new RelationUserRoleUserRole{ Id = 1209, IdInclude = 1208 }, + new RelationUserRoleUserRole{ Id = 1212, IdInclude = 1211 }, + new RelationUserRoleUserRole{ Id = 1214, IdInclude = 1213 }, + new RelationUserRoleUserRole{ Id = 1216, IdInclude = 1215 }, + new RelationUserRoleUserRole{ Id = 1218, IdInclude = 1217 }, + }); + }); + + modelBuilder.Entity(entity => + { + entity.HasData(new List + { + new Permission{ Id = 100, Name="AdminCluster.delete", Description="Разрешение удалять админ. Кусты"}, + new Permission{ Id = 101, Name="AdminCluster.edit", Description="Разрешение редактировать админ. Кусты"}, + new Permission{ Id = 102, Name="AdminCluster.get", Description="Разрешение просматривать админ. Кусты"}, + new Permission{ Id = 103, Name="AdminCompany.delete", Description="Разрешение удалять админ. Компании"}, + new Permission{ Id = 104, Name="AdminCompany.edit", Description="Разрешение редактировать админ. Компании"}, + new Permission{ Id = 105, Name="AdminCompany.get", Description="Разрешение просматривать админ. Компании"}, + new Permission{ Id = 106, Name="AdminCompanyType.delete", Description="Разрешение удалять админ. Типы компаний"}, + new Permission{ Id = 107, Name="AdminCompanyType.edit", Description="Разрешение редактировать админ. Типы компаний"}, + new Permission{ Id = 108, Name="AdminCompanyType.get", Description="Разрешение просматривать админ. Типы компаний"}, + new Permission{ Id = 109, Name="AdminDeposit.delete", Description="Разрешение удалять админ. Месторождения"}, + new Permission{ Id = 110, Name="AdminDeposit.edit", Description="Разрешение редактировать админ. Месторождения"}, + new Permission{ Id = 111, Name="AdminDeposit.get", Description="Разрешение просматривать админ. Месторождения"}, + new Permission{ Id = 112, Name="AdminPermission.delete", Description="Разрешение удалять админ. Разрешения"}, + new Permission{ Id = 113, Name="AdminPermission.edit", Description="Разрешение редактировать админ. Разрешения"}, + new Permission{ Id = 114, Name="AdminPermission.get", Description="Разрешение просматривать админ. Разрешения"}, + new Permission{ Id = 115, Name="AdminTelemetry.delete", Description="Разрешение удалять админ. Телеметрию"}, + new Permission{ Id = 116, Name="AdminTelemetry.edit", Description="Разрешение редактировать админ. Телеметрию"}, + new Permission{ Id = 117, Name="AdminTelemetry.get", Description="Разрешение просматривать админ. Телеметрию"}, + new Permission{ Id = 118, Name="AdminUser.delete", Description="Разрешение удалять админ. Пользователей"}, + new Permission{ Id = 119, Name="AdminUser.edit", Description="Разрешение редактировать админ. Пользователей"}, + new Permission{ Id = 120, Name="AdminUser.get", Description="Разрешение просматривать админ. Пользователей"}, + new Permission{ Id = 121, Name="AdminUserRole.delete", Description="Разрешение удалять админ. Роли пользователей"}, + new Permission{ Id = 122, Name="AdminUserRole.edit", Description="Разрешение редактировать админ. Роли пользователей"}, + new Permission{ Id = 123, Name="AdminUserRole.get", Description="Разрешение просматривать админ. Роли пользователей"}, + new Permission{ Id = 124, Name="AdminWell.delete", Description="Разрешение удалять админ. Скважины"}, + new Permission{ Id = 125, Name="AdminWell.edit", Description="Разрешение редактировать админ. Скважины"}, + new Permission{ Id = 126, Name="AdminWell.get", Description="Разрешение просматривать админ. Скважины"}, + new Permission{ Id = 200, Name="Auth.edit", Description="Разрешение редактировать 0"}, + new Permission{ Id = 201, Name="Auth.get", Description="Разрешение просматривать 0"}, + new Permission{ Id = 202, Name="Cluster.get", Description="Разрешение просматривать Кусты"}, + new Permission{ Id = 203, Name="Deposit.get", Description="Разрешение просматривать Месторождения"}, + new Permission{ Id = 204, Name="DrillFlowChart.delete", Description="Разрешение удалять РТК"}, + new Permission{ Id = 205, Name="DrillFlowChart.edit", Description="Разрешение редактировать РТК"}, + new Permission{ Id = 206, Name="DrillFlowChart.get", Description="Разрешение просматривать РТК"}, + new Permission{ Id = 207, Name="DrillingProgram.delete", Description="Разрешение удалять Программу бурения"}, + new Permission{ Id = 208, Name="DrillingProgram.edit", Description="Разрешение редактировать Программу бурения"}, + new Permission{ Id = 209, Name="DrillingProgram.get", Description="Разрешение просматривать Программу бурения"}, + new Permission{ Id = 210, Name="DrillParams.delete", Description="Разрешение удалять Режимы бурения"}, + new Permission{ Id = 211, Name="DrillParams.edit", Description="Разрешение редактировать Режимы бурения"}, + new Permission{ Id = 212, Name="DrillParams.get", Description="Разрешение просматривать Режимы бурения"}, + new Permission{ Id = 213, Name="File.delete", Description="Разрешение удалять Файлы"}, + new Permission{ Id = 214, Name="File.edit", Description="Разрешение редактировать Файлы"}, + new Permission{ Id = 215, Name="File.get", Description="Разрешение просматривать Файлы"}, + new Permission{ Id = 216, Name="Measure.delete", Description="Разрешение удалять Измерения"}, + new Permission{ Id = 217, Name="Measure.edit", Description="Разрешение редактировать Измерения"}, + new Permission{ Id = 218, Name="Measure.get", Description="Разрешение просматривать Измерения"}, + new Permission{ Id = 219, Name="Message.get", Description="Разрешение просматривать Сообщения телеметрии"}, + new Permission{ Id = 220, Name="OperationStat.get", Description="Разрешение просматривать Статистику по операциям"}, + new Permission{ Id = 221, Name="Report.edit", Description="Разрешение редактировать Рапорта"}, + new Permission{ Id = 222, Name="Report.get", Description="Разрешение просматривать Рапорта"}, + new Permission{ Id = 223, Name="RequerstTracker.get", Description="Разрешение просматривать админ. Системная статистика"}, + new Permission{ Id = 224, Name="Setpoints.delete", Description="Разрешение удалять Рекомендации уставок"}, + new Permission{ Id = 225, Name="Setpoints.edit", Description="Разрешение редактировать Рекомендации уставок"}, + new Permission{ Id = 226, Name="Setpoints.get", Description="Разрешение просматривать Рекомендации уставок"}, + new Permission{ Id = 227, Name="Telemetry.edit", Description="Разрешение редактировать Телеметрии"}, + new Permission{ Id = 228, Name="TelemetryAnalytics.get", Description="Разрешение просматривать Анализ телеметрии"}, + new Permission{ Id = 229, Name="TelemetryDataSaub.edit", Description="Разрешение редактировать Данные телеметрии по САУБ"}, + new Permission{ Id = 230, Name="TelemetryDataSaub.get", Description="Разрешение просматривать Данные телеметрии по САУБ"}, + new Permission{ Id = 231, Name="TelemetryDataSpin.edit", Description="Разрешение редактировать Данные телеметрии по SpinMaster"}, + new Permission{ Id = 232, Name="TelemetryDataSpin.get", Description="Разрешение просматривать Данные телеметрии по SpinMaster"}, + new Permission{ Id = 233, Name="Well.edit", Description="Разрешение редактировать Скважины"}, + new Permission{ Id = 234, Name="Well.get", Description="Разрешение просматривать Скважины"}, + new Permission{ Id = 235, Name="WellComposite.edit", Description="Разрешение редактировать Композитные скважины"}, + new Permission{ Id = 236, Name="WellComposite.get", Description="Разрешение просматривать Композитные скважины"}, + new Permission{ Id = 237, Name="WellOperation.delete", Description="Разрешение удалять Операции по скважинам"}, + new Permission{ Id = 238, Name="WellOperation.edit", Description="Разрешение редактировать Операции по скважинам"}, + new Permission{ Id = 239, Name="WellOperation.get", Description="Разрешение просматривать Операции по скважинам"}, + }); + }); + + modelBuilder.Entity(entity => + { + entity.HasData(new List + { + new RelationUserRolePermission{ IdUserRole = 1100, IdPermission = 102}, new RelationUserRolePermission{ IdUserRole = 1100, IdPermission = 111}, + new RelationUserRolePermission{ IdUserRole = 1101, IdPermission = 101}, new RelationUserRolePermission{ IdUserRole = 1101, IdPermission = 100}, + new RelationUserRolePermission{ IdUserRole = 1102, IdPermission = 105}, new RelationUserRolePermission{ IdUserRole = 1102, IdPermission = 108}, + new RelationUserRolePermission{ IdUserRole = 1103, IdPermission = 104}, new RelationUserRolePermission{ IdUserRole = 1103, IdPermission = 103}, + new RelationUserRolePermission{ IdUserRole = 1104, IdPermission = 108}, + new RelationUserRolePermission{ IdUserRole = 1105, IdPermission = 107}, new RelationUserRolePermission{ IdUserRole = 1105, IdPermission = 106}, + new RelationUserRolePermission{ IdUserRole = 1106, IdPermission = 111}, + new RelationUserRolePermission{ IdUserRole = 1107, IdPermission = 110}, new RelationUserRolePermission{ IdUserRole = 1107, IdPermission = 109}, + new RelationUserRolePermission{ IdUserRole = 1108, IdPermission = 114}, + new RelationUserRolePermission{ IdUserRole = 1109, IdPermission = 113}, new RelationUserRolePermission{ IdUserRole = 1109, IdPermission = 112}, + new RelationUserRolePermission{ IdUserRole = 1110, IdPermission = 123}, new RelationUserRolePermission{ IdUserRole = 1110, IdPermission = 114}, + new RelationUserRolePermission{ IdUserRole = 1111, IdPermission = 122}, new RelationUserRolePermission{ IdUserRole = 1111, IdPermission = 121}, + new RelationUserRolePermission{ IdUserRole = 1112, IdPermission = 117}, + new RelationUserRolePermission{ IdUserRole = 1113, IdPermission = 105}, new RelationUserRolePermission{ IdUserRole = 1113, IdPermission = 123}, new RelationUserRolePermission{ IdUserRole = 1113, IdPermission = 120}, + new RelationUserRolePermission{ IdUserRole = 1114, IdPermission = 119}, new RelationUserRolePermission{ IdUserRole = 1114, IdPermission = 118}, new RelationUserRolePermission{ IdUserRole = 1114, IdPermission = 200}, + new RelationUserRolePermission{ IdUserRole = 1115, IdPermission = 223}, + new RelationUserRolePermission{ IdUserRole = 1116, IdPermission = 105}, new RelationUserRolePermission{ IdUserRole = 1116, IdPermission = 102}, new RelationUserRolePermission{ IdUserRole = 1116, IdPermission = 117}, + new RelationUserRolePermission{ IdUserRole = 1117, IdPermission = 125}, new RelationUserRolePermission{ IdUserRole = 1117, IdPermission = 124}, + new RelationUserRolePermission{ IdUserRole = 1200, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1200, IdPermission = 230}, + new RelationUserRolePermission{ IdUserRole = 1201, IdPermission = 202}, new RelationUserRolePermission{ IdUserRole = 1201, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1201, IdPermission = 220}, + new RelationUserRolePermission{ IdUserRole = 1202, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1202, IdPermission = 220}, new RelationUserRolePermission{ IdUserRole = 1202, IdPermission = 236}, + new RelationUserRolePermission{ IdUserRole = 1203, IdPermission = 235}, + new RelationUserRolePermission{ IdUserRole = 1204, IdPermission = 202}, new RelationUserRolePermission{ IdUserRole = 1204, IdPermission = 203}, + new RelationUserRolePermission{ IdUserRole = 1205, IdPermission = 215}, + new RelationUserRolePermission{ IdUserRole = 1206, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1206, IdPermission = 206}, + new RelationUserRolePermission{ IdUserRole = 1207, IdPermission = 205}, + new RelationUserRolePermission{ IdUserRole = 1208, IdPermission = 218}, + new RelationUserRolePermission{ IdUserRole = 1209, IdPermission = 217}, + new RelationUserRolePermission{ IdUserRole = 1210, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1210, IdPermission = 230}, + new RelationUserRolePermission{ IdUserRole = 1211, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1211, IdPermission = 220}, new RelationUserRolePermission{ IdUserRole = 1211, IdPermission = 239}, + new RelationUserRolePermission{ IdUserRole = 1212, IdPermission = 238}, new RelationUserRolePermission{ IdUserRole = 1212, IdPermission = 237}, + new RelationUserRolePermission{ IdUserRole = 1213, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1213, IdPermission = 239}, new RelationUserRolePermission{ IdUserRole = 1213, IdPermission = 212}, + new RelationUserRolePermission{ IdUserRole = 1214, IdPermission = 211}, new RelationUserRolePermission{ IdUserRole = 1214, IdPermission = 210}, + new RelationUserRolePermission{ IdUserRole = 1215, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1215, IdPermission = 222}, + new RelationUserRolePermission{ IdUserRole = 1216, IdPermission = 221}, + new RelationUserRolePermission{ IdUserRole = 1217, IdPermission = 226}, + new RelationUserRolePermission{ IdUserRole = 1218, IdPermission = 225}, new RelationUserRolePermission{ IdUserRole = 1218, IdPermission = 224}, + new RelationUserRolePermission{ IdUserRole = 1219, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1219, IdPermission = 206}, new RelationUserRolePermission{ IdUserRole = 1219, IdPermission = 230}, + new RelationUserRolePermission{ IdUserRole = 1220, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1220, IdPermission = 228}, + new RelationUserRolePermission{ IdUserRole = 1221, IdPermission = 202}, new RelationUserRolePermission{ IdUserRole = 1221, IdPermission = 203}, new RelationUserRolePermission{ IdUserRole = 1221, IdPermission = 220}, }); }); diff --git a/AsbCloudWebApi/Docs/Create permissions.ods b/AsbCloudWebApi/Docs/Create permissions.ods index 96b0f9deb420c34019e3c44fb8b5f86b8fb955cc..019119b3416b54c79ca2fdbf3fe948c38e6e70d1 100644 GIT binary patch delta 43355 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