Преглед на файлове

Обновлена структура БД

Реализовано логирование попыток входа
Almir Mukhametzyanov and Alice Dyagileva преди 1 година
родител
ревизия
c15143f962

+ 1 - 1
src/DontHarmDesktop/App.config

@@ -8,7 +8,7 @@
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
   </startup>
   <connectionStrings>
-    <add name="Entities" connectionString="metadata=res://*/Models.DontHarmModel.csdl|res://*/Models.DontHarmModel.ssdl|res://*/Models.DontHarmModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=srv-wsr\is3;initial catalog=user12;user id=user12;password=user12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
+    <add name="Entities" connectionString="metadata=res://*/Models.DontHarmModel.csdl|res://*/Models.DontHarmModel.ssdl|res://*/Models.DontHarmModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=srv-wsr\is3;initial catalog=user12;user id=user12;password=user12;application name=EntityFramework;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
   </connectionStrings>
   <entityFramework>
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

+ 64 - 2
src/DontHarmDesktop/App.xaml.cs

@@ -1,4 +1,5 @@
-using DontHarmDesktop.Properties;
+using DontHarmDesktop.Models;
+using DontHarmDesktop.Properties;
 using System;
 using System.Collections.Generic;
 using System.Configuration;
@@ -27,6 +28,30 @@ namespace DontHarmDesktop
         /// </summary>
         public static DateTime LogOffTime = new DateTime();
 
+        /// <summary>
+        /// Заблокирован ли вход в текущий момент?
+        /// </summary>
+        public static bool BlockedLogon = false;
+
+        /// <summary>
+        /// Если вход заблокирован, авторизация запрещена если AllowedLogonTime больше текущего времени
+        /// </summary>
+        public static DateTime AllowedLogonTime;
+
+        /// <summary>
+        /// Число провальных попыток входа, выполненных подряд
+        /// </summary>
+        private static int FailedAttemptsCount = 0;
+
+        public static void BlockLogon(DateTime dateTime)
+        {
+            if (AllowedLogonTime == null || AllowedLogonTime < dateTime)
+            {
+                AllowedLogonTime = dateTime;
+                BlockedLogon = true;
+            }
+        }
+
         /// <summary>
         /// Авторизует пользователя
         /// </summary>
@@ -35,11 +60,34 @@ namespace DontHarmDesktop
         /// <returns>Успешна ли прошла авторизация</returns>
         public static bool LogOn(string login, string password)
         {
+            if (BlockedLogon)
+            {
+                if (DateTime.Now < AllowedLogonTime)
+                {
+                    MessageBox.Show("Вход заблокирован до " + AllowedLogonTime);
+                    AddLogOnRecord(login, false);
+                    return false;
+                } else
+                {
+                    BlockedLogon = false;
+                }
+            }
+            
             var result = Context.users.FirstOrDefault(p => p.login == login && p.password == password);
             if (result == null)
             {
+                MessageBox.Show("Логин или пароль не совпадают");
+                FailedAttemptsCount++;
+
+                if (FailedAttemptsCount == 2)
+                {
+                    BlockLogon(DateTime.Now + TimeSpan.FromSeconds(10));
+                }
+                AddLogOnRecord(login, false);
                 return false;
             }
+
+            FailedAttemptsCount = 0;
             CurrentUser = result;
             LogOnTime = DateTime.Now;
 
@@ -48,7 +96,8 @@ namespace DontHarmDesktop
 
             // Запуск таймера
             (Current.MainWindow as MainWindow).StartLogoffTimer();
-            
+
+            AddLogOnRecord(login, true);
             return true;
         }
 
@@ -58,7 +107,20 @@ namespace DontHarmDesktop
         public static void LogOff()
         {
             CurrentUser = null;
+
+            // Тут надо проверить роль пользователя
             (Current.MainWindow as MainWindow).StopLogoffTimer();
         }
+
+        private static void AddLogOnRecord(string login, bool successfull)
+        {
+            var record = new login_attempts();
+            record.successfull = Convert.ToByte(successfull);
+            record.login = login;
+            record.ip_address = "127.0.0.1";
+            record.created_at = DateTime.Now;
+            Context.login_attempts.Add(record);
+            Context.SaveChanges();
+        }
     }
 }

+ 1 - 0
src/DontHarmDesktop/MainWindow.xaml.cs

@@ -66,6 +66,7 @@ namespace DontHarmDesktop
             // Проверку роли не выполняем, т.к. таймер даже не начинается если роль не подходит
             if (DateTime.Now > App.LogOffTime)
             {
+                App.BlockLogon(DateTime.Now + TimeSpan.FromMinutes(2));
                 App.LogOff();
             }
 

+ 168 - 201
src/DontHarmDesktop/Models/DontHarmModel.edmx

@@ -4,7 +4,7 @@
   <edmx:Runtime>
     <!-- SSDL content -->
     <edmx:StorageModels>
-      <Schema Namespace="Хранилище DontHarmModel" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
+    <Schema Namespace="Хранилище DontHarmModel" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
         <EntityType Name="clients">
           <Key>
             <PropertyRef Name="id" />
@@ -50,7 +50,9 @@
             <PropertyRef Name="id" />
           </Key>
           <Property Name="id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
-          <Property Name="user_id" Type="int" Nullable="false" />
+          <Property Name="ip_address" Type="nchar" MaxLength="10" Nullable="false" />
+          <Property Name="login" Type="varchar" MaxLength="50" />
+          <Property Name="successfull" Type="tinyint" Nullable="false" />
           <Property Name="created_at" Type="datetime" Nullable="false" />
         </EntityType>
         <EntityType Name="order_services">
@@ -188,20 +190,6 @@
             </Dependent>
           </ReferentialConstraint>
         </Association>
-        <Association Name="FK_login_attempts_users">
-          <End Role="users" Type="Self.users" Multiplicity="1">
-            <OnDelete Action="Cascade" />
-          </End>
-          <End Role="login_attempts" Type="Self.login_attempts" Multiplicity="*" />
-          <ReferentialConstraint>
-            <Principal Role="users">
-              <PropertyRef Name="id" />
-            </Principal>
-            <Dependent Role="login_attempts">
-              <PropertyRef Name="user_id" />
-            </Dependent>
-          </ReferentialConstraint>
-        </Association>
         <Association Name="FK_order_services_orders">
           <End Role="orders" Type="Self.orders" Multiplicity="1">
             <OnDelete Action="Cascade" />
@@ -302,10 +290,6 @@
             <End Role="users" EntitySet="users" />
             <End Role="invoices" EntitySet="invoices" />
           </AssociationSet>
-          <AssociationSet Name="FK_login_attempts_users" Association="Self.FK_login_attempts_users">
-            <End Role="users" EntitySet="users" />
-            <End Role="login_attempts" EntitySet="login_attempts" />
-          </AssociationSet>
           <AssociationSet Name="FK_order_services_orders" Association="Self.FK_order_services_orders">
             <End Role="orders" EntitySet="orders" />
             <End Role="order_services" EntitySet="order_services" />
@@ -327,35 +311,87 @@
             <End Role="users" EntitySet="users" />
           </AssociationSet>
         </EntityContainer>
-      </Schema>
-    </edmx:StorageModels>
+      </Schema></edmx:StorageModels>
     <!-- CSDL content -->
     <edmx:ConceptualModels>
       <Schema Namespace="DontHarmModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
+        <EntityContainer Name="Entities" annotation:LazyLoadingEnabled="true">
+          <EntitySet Name="clients" EntityType="DontHarmModel.clients" />
+          <EntitySet Name="employee_services" EntityType="DontHarmModel.employee_services" />
+          <EntitySet Name="invoices" EntityType="DontHarmModel.invoices" />
+          <EntitySet Name="login_attempts" EntityType="DontHarmModel.login_attempts" />
+          <EntitySet Name="order_services" EntityType="DontHarmModel.order_services" />
+          <EntitySet Name="orders" EntityType="DontHarmModel.orders" />
+          <EntitySet Name="roles" EntityType="DontHarmModel.roles" />
+          <EntitySet Name="services" EntityType="DontHarmModel.services" />
+          <EntitySet Name="sysdiagrams" EntityType="DontHarmModel.sysdiagrams" />
+          <EntitySet Name="users" EntityType="DontHarmModel.users" />
+          <EntitySet Name="utilizers" EntityType="DontHarmModel.utilizers" />
+          <AssociationSet Name="FK_invoices_clients" Association="DontHarmModel.FK_invoices_clients">
+            <End Role="clients" EntitySet="clients" />
+            <End Role="invoices" EntitySet="invoices" />
+          </AssociationSet>
+          <AssociationSet Name="FK_orders_clients" Association="DontHarmModel.FK_orders_clients">
+            <End Role="clients" EntitySet="clients" />
+            <End Role="orders" EntitySet="orders" />
+          </AssociationSet>
+          <AssociationSet Name="FK_employee_services_services" Association="DontHarmModel.FK_employee_services_services">
+            <End Role="services" EntitySet="services" />
+            <End Role="employee_services" EntitySet="employee_services" />
+          </AssociationSet>
+          <AssociationSet Name="FK_employee_services_users" Association="DontHarmModel.FK_employee_services_users">
+            <End Role="users" EntitySet="users" />
+            <End Role="employee_services" EntitySet="employee_services" />
+          </AssociationSet>
+          <AssociationSet Name="FK_invoices_orders" Association="DontHarmModel.FK_invoices_orders">
+            <End Role="orders" EntitySet="orders" />
+            <End Role="invoices" EntitySet="invoices" />
+          </AssociationSet>
+          <AssociationSet Name="FK_invoices_users" Association="DontHarmModel.FK_invoices_users">
+            <End Role="users" EntitySet="users" />
+            <End Role="invoices" EntitySet="invoices" />
+          </AssociationSet>
+          <AssociationSet Name="FK_order_services_orders" Association="DontHarmModel.FK_order_services_orders">
+            <End Role="orders" EntitySet="orders" />
+            <End Role="order_services" EntitySet="order_services" />
+          </AssociationSet>
+          <AssociationSet Name="FK_order_services_services" Association="DontHarmModel.FK_order_services_services">
+            <End Role="services" EntitySet="services" />
+            <End Role="order_services" EntitySet="order_services" />
+          </AssociationSet>
+          <AssociationSet Name="FK_order_services_utilizers" Association="DontHarmModel.FK_order_services_utilizers">
+            <End Role="utilizers" EntitySet="utilizers" />
+            <End Role="order_services" EntitySet="order_services" />
+          </AssociationSet>
+          <AssociationSet Name="FK_users_roles" Association="DontHarmModel.FK_users_roles">
+            <End Role="roles" EntitySet="roles" />
+            <End Role="users" EntitySet="users" />
+          </AssociationSet>
+        </EntityContainer>
         <EntityType Name="clients">
           <Key>
             <PropertyRef Name="id" />
           </Key>
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
           <Property Name="type" Type="Int32" Nullable="false" />
-          <Property Name="login" Type="String" MaxLength="50" FixedLength="false" Unicode="true" Nullable="false" />
-          <Property Name="password" Type="String" MaxLength="64" FixedLength="true" Unicode="false" Nullable="false" />
+          <Property Name="login" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
+          <Property Name="password" Type="String" Nullable="false" MaxLength="64" FixedLength="true" Unicode="false" />
           <Property Name="surname" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
           <Property Name="name" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
           <Property Name="patronymic" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
           <Property Name="birthdate" Type="DateTime" Precision="0" />
           <Property Name="passport_series" Type="Int32" />
           <Property Name="passport_number" Type="Int32" />
-          <Property Name="phone" Type="String" MaxLength="16" FixedLength="true" Unicode="false" Nullable="false" />
-          <Property Name="email" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
+          <Property Name="phone" Type="String" Nullable="false" MaxLength="16" FixedLength="true" Unicode="false" />
+          <Property Name="email" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
           <Property Name="company_name" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
           <Property Name="company_address" Type="String" MaxLength="100" FixedLength="false" Unicode="false" />
           <Property Name="inn" Type="Int32" Nullable="false" />
           <Property Name="account" Type="Int32" Nullable="false" />
           <Property Name="bik" Type="Int32" Nullable="false" />
           <Property Name="hidden" Type="Boolean" Nullable="false" />
-          <NavigationProperty Name="invoices" Relationship="Self.FK_invoices_clients" FromRole="clients" ToRole="invoices" />
-          <NavigationProperty Name="orders" Relationship="Self.FK_orders_clients" FromRole="clients" ToRole="orders" />
+          <NavigationProperty Name="invoices" Relationship="DontHarmModel.FK_invoices_clients" FromRole="clients" ToRole="invoices" />
+          <NavigationProperty Name="orders" Relationship="DontHarmModel.FK_orders_clients" FromRole="clients" ToRole="orders" />
         </EntityType>
         <EntityType Name="employee_services">
           <Key>
@@ -364,8 +400,8 @@
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
           <Property Name="service_id" Type="Int32" Nullable="false" />
           <Property Name="user_id" Type="Int32" Nullable="false" />
-          <NavigationProperty Name="services" Relationship="Self.FK_employee_services_services" FromRole="employee_services" ToRole="services" />
-          <NavigationProperty Name="users" Relationship="Self.FK_employee_services_users" FromRole="employee_services" ToRole="users" />
+          <NavigationProperty Name="services" Relationship="DontHarmModel.FK_employee_services_services" FromRole="employee_services" ToRole="services" />
+          <NavigationProperty Name="users" Relationship="DontHarmModel.FK_employee_services_users" FromRole="employee_services" ToRole="users" />
         </EntityType>
         <EntityType Name="invoices">
           <Key>
@@ -375,18 +411,19 @@
           <Property Name="client_id" Type="Int32" Nullable="false" />
           <Property Name="accountant_id" Type="Int32" Nullable="false" />
           <Property Name="order_id" Type="Int32" Nullable="false" />
-          <NavigationProperty Name="clients" Relationship="Self.FK_invoices_clients" FromRole="invoices" ToRole="clients" />
-          <NavigationProperty Name="orders" Relationship="Self.FK_invoices_orders" FromRole="invoices" ToRole="orders" />
-          <NavigationProperty Name="users" Relationship="Self.FK_invoices_users" FromRole="invoices" ToRole="users" />
+          <NavigationProperty Name="clients" Relationship="DontHarmModel.FK_invoices_clients" FromRole="invoices" ToRole="clients" />
+          <NavigationProperty Name="orders" Relationship="DontHarmModel.FK_invoices_orders" FromRole="invoices" ToRole="orders" />
+          <NavigationProperty Name="users" Relationship="DontHarmModel.FK_invoices_users" FromRole="invoices" ToRole="users" />
         </EntityType>
         <EntityType Name="login_attempts">
           <Key>
             <PropertyRef Name="id" />
           </Key>
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
-          <Property Name="user_id" Type="Int32" Nullable="false" />
+          <Property Name="ip_address" Type="String" Nullable="false" MaxLength="10" FixedLength="true" Unicode="true" />
+          <Property Name="login" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
+          <Property Name="successfull" Type="Byte" Nullable="false" />
           <Property Name="created_at" Type="DateTime" Nullable="false" Precision="3" />
-          <NavigationProperty Name="users" Relationship="Self.FK_login_attempts_users" FromRole="login_attempts" ToRole="users" />
         </EntityType>
         <EntityType Name="order_services">
           <Key>
@@ -399,9 +436,9 @@
           <Property Name="utilizer_id" Type="Int32" />
           <Property Name="started_at" Type="DateTime" Precision="3" />
           <Property Name="finished_at" Type="DateTime" Precision="3" />
-          <NavigationProperty Name="orders" Relationship="Self.FK_order_services_orders" FromRole="order_services" ToRole="orders" />
-          <NavigationProperty Name="services" Relationship="Self.FK_order_services_services" FromRole="order_services" ToRole="services" />
-          <NavigationProperty Name="utilizers" Relationship="Self.FK_order_services_utilizers" FromRole="order_services" ToRole="utilizers" />
+          <NavigationProperty Name="orders" Relationship="DontHarmModel.FK_order_services_orders" FromRole="order_services" ToRole="orders" />
+          <NavigationProperty Name="services" Relationship="DontHarmModel.FK_order_services_services" FromRole="order_services" ToRole="services" />
+          <NavigationProperty Name="utilizers" Relationship="DontHarmModel.FK_order_services_utilizers" FromRole="order_services" ToRole="utilizers" />
         </EntityType>
         <EntityType Name="orders">
           <Key>
@@ -411,35 +448,35 @@
           <Property Name="created_at" Type="DateTime" Nullable="false" Precision="3" />
           <Property Name="client_id" Type="Int32" Nullable="false" />
           <Property Name="hidden" Type="Boolean" Nullable="false" />
-          <NavigationProperty Name="clients" Relationship="Self.FK_orders_clients" FromRole="orders" ToRole="clients" />
-          <NavigationProperty Name="invoices" Relationship="Self.FK_invoices_orders" FromRole="orders" ToRole="invoices" />
-          <NavigationProperty Name="order_services" Relationship="Self.FK_order_services_orders" FromRole="orders" ToRole="order_services" />
+          <NavigationProperty Name="clients" Relationship="DontHarmModel.FK_orders_clients" FromRole="orders" ToRole="clients" />
+          <NavigationProperty Name="invoices" Relationship="DontHarmModel.FK_invoices_orders" FromRole="orders" ToRole="invoices" />
+          <NavigationProperty Name="order_services" Relationship="DontHarmModel.FK_order_services_orders" FromRole="orders" ToRole="order_services" />
         </EntityType>
         <EntityType Name="roles">
           <Key>
             <PropertyRef Name="id" />
           </Key>
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
-          <Property Name="name" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
-          <NavigationProperty Name="users" Relationship="Self.FK_users_roles" FromRole="roles" ToRole="users" />
+          <Property Name="name" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
+          <NavigationProperty Name="users" Relationship="DontHarmModel.FK_users_roles" FromRole="roles" ToRole="users" />
         </EntityType>
         <EntityType Name="services">
           <Key>
             <PropertyRef Name="id" />
           </Key>
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
-          <Property Name="name" Type="String" MaxLength="100" FixedLength="false" Unicode="false" Nullable="false" />
-          <Property Name="price" Type="Decimal" Precision="19" Scale="4" Nullable="false" />
-          <Property Name="code" Type="String" MaxLength="10" FixedLength="false" Unicode="false" Nullable="false" />
+          <Property Name="name" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="false" />
+          <Property Name="price" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
+          <Property Name="code" Type="String" Nullable="false" MaxLength="10" FixedLength="false" Unicode="false" />
           <Property Name="hidden" Type="Boolean" Nullable="false" />
-          <NavigationProperty Name="employee_services" Relationship="Self.FK_employee_services_services" FromRole="services" ToRole="employee_services" />
-          <NavigationProperty Name="order_services" Relationship="Self.FK_order_services_services" FromRole="services" ToRole="order_services" />
+          <NavigationProperty Name="employee_services" Relationship="DontHarmModel.FK_employee_services_services" FromRole="services" ToRole="employee_services" />
+          <NavigationProperty Name="order_services" Relationship="DontHarmModel.FK_order_services_services" FromRole="services" ToRole="order_services" />
         </EntityType>
         <EntityType Name="sysdiagrams">
           <Key>
             <PropertyRef Name="diagram_id" />
           </Key>
-          <Property Name="name" Type="String" MaxLength="128" FixedLength="false" Unicode="true" Nullable="false" />
+          <Property Name="name" Type="String" Nullable="false" MaxLength="128" FixedLength="false" Unicode="true" />
           <Property Name="principal_id" Type="Int32" Nullable="false" />
           <Property Name="diagram_id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
           <Property Name="version" Type="Int32" />
@@ -451,31 +488,30 @@
           </Key>
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
           <Property Name="role" Type="Int32" Nullable="false" />
-          <Property Name="login" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
-          <Property Name="password" Type="String" MaxLength="64" FixedLength="false" Unicode="false" Nullable="false" />
+          <Property Name="login" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
+          <Property Name="password" Type="String" Nullable="false" MaxLength="64" FixedLength="false" Unicode="false" />
           <Property Name="hidden" Type="Boolean" Nullable="false" />
-          <Property Name="surname" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
-          <Property Name="name" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
+          <Property Name="surname" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
+          <Property Name="name" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
           <Property Name="patronymic" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
           <Property Name="image_path" Type="String" MaxLength="50" FixedLength="false" Unicode="false" />
-          <NavigationProperty Name="employee_services" Relationship="Self.FK_employee_services_users" FromRole="users" ToRole="employee_services" />
-          <NavigationProperty Name="invoices" Relationship="Self.FK_invoices_users" FromRole="users" ToRole="invoices" />
-          <NavigationProperty Name="login_attempts" Relationship="Self.FK_login_attempts_users" FromRole="users" ToRole="login_attempts" />
-          <NavigationProperty Name="roles" Relationship="Self.FK_users_roles" FromRole="users" ToRole="roles" />
+          <NavigationProperty Name="employee_services" Relationship="DontHarmModel.FK_employee_services_users" FromRole="users" ToRole="employee_services" />
+          <NavigationProperty Name="invoices" Relationship="DontHarmModel.FK_invoices_users" FromRole="users" ToRole="invoices" />
+          <NavigationProperty Name="roles" Relationship="DontHarmModel.FK_users_roles" FromRole="users" ToRole="roles" />
         </EntityType>
         <EntityType Name="utilizers">
           <Key>
             <PropertyRef Name="id" />
           </Key>
           <Property Name="id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
-          <Property Name="name" Type="String" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
-          <NavigationProperty Name="order_services" Relationship="Self.FK_order_services_utilizers" FromRole="utilizers" ToRole="order_services" />
+          <Property Name="name" Type="String" Nullable="false" MaxLength="50" FixedLength="false" Unicode="false" />
+          <NavigationProperty Name="order_services" Relationship="DontHarmModel.FK_order_services_utilizers" FromRole="utilizers" ToRole="order_services" />
         </EntityType>
         <Association Name="FK_invoices_clients">
-          <End Role="clients" Type="Self.clients" Multiplicity="1">
+          <End Type="DontHarmModel.clients" Role="clients" Multiplicity="1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="invoices" Type="Self.invoices" Multiplicity="*" />
+          <End Type="DontHarmModel.invoices" Role="invoices" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="clients">
               <PropertyRef Name="id" />
@@ -486,10 +522,10 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_orders_clients">
-          <End Role="clients" Type="Self.clients" Multiplicity="1">
+          <End Type="DontHarmModel.clients" Role="clients" Multiplicity="1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="orders" Type="Self.orders" Multiplicity="*" />
+          <End Type="DontHarmModel.orders" Role="orders" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="clients">
               <PropertyRef Name="id" />
@@ -500,10 +536,10 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_employee_services_services">
-          <End Role="services" Type="Self.services" Multiplicity="1">
+          <End Type="DontHarmModel.services" Role="services" Multiplicity="1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="employee_services" Type="Self.employee_services" Multiplicity="*" />
+          <End Type="DontHarmModel.employee_services" Role="employee_services" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="services">
               <PropertyRef Name="id" />
@@ -514,8 +550,8 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_employee_services_users">
-          <End Role="users" Type="Self.users" Multiplicity="1" />
-          <End Role="employee_services" Type="Self.employee_services" Multiplicity="*" />
+          <End Type="DontHarmModel.users" Role="users" Multiplicity="1" />
+          <End Type="DontHarmModel.employee_services" Role="employee_services" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="users">
               <PropertyRef Name="id" />
@@ -526,8 +562,8 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_invoices_orders">
-          <End Role="orders" Type="Self.orders" Multiplicity="1" />
-          <End Role="invoices" Type="Self.invoices" Multiplicity="*" />
+          <End Type="DontHarmModel.orders" Role="orders" Multiplicity="1" />
+          <End Type="DontHarmModel.invoices" Role="invoices" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="orders">
               <PropertyRef Name="id" />
@@ -538,10 +574,10 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_invoices_users">
-          <End Role="users" Type="Self.users" Multiplicity="1">
+          <End Type="DontHarmModel.users" Role="users" Multiplicity="1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="invoices" Type="Self.invoices" Multiplicity="*" />
+          <End Type="DontHarmModel.invoices" Role="invoices" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="users">
               <PropertyRef Name="id" />
@@ -551,25 +587,11 @@
             </Dependent>
           </ReferentialConstraint>
         </Association>
-        <Association Name="FK_login_attempts_users">
-          <End Role="users" Type="Self.users" Multiplicity="1">
-            <OnDelete Action="Cascade" />
-          </End>
-          <End Role="login_attempts" Type="Self.login_attempts" Multiplicity="*" />
-          <ReferentialConstraint>
-            <Principal Role="users">
-              <PropertyRef Name="id" />
-            </Principal>
-            <Dependent Role="login_attempts">
-              <PropertyRef Name="user_id" />
-            </Dependent>
-          </ReferentialConstraint>
-        </Association>
         <Association Name="FK_order_services_orders">
-          <End Role="orders" Type="Self.orders" Multiplicity="1">
+          <End Type="DontHarmModel.orders" Role="orders" Multiplicity="1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="order_services" Type="Self.order_services" Multiplicity="*" />
+          <End Type="DontHarmModel.order_services" Role="order_services" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="orders">
               <PropertyRef Name="id" />
@@ -580,10 +602,10 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_order_services_services">
-          <End Role="services" Type="Self.services" Multiplicity="1">
+          <End Type="DontHarmModel.services" Role="services" Multiplicity="1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="order_services" Type="Self.order_services" Multiplicity="*" />
+          <End Type="DontHarmModel.order_services" Role="order_services" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="services">
               <PropertyRef Name="id" />
@@ -594,10 +616,10 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_order_services_utilizers">
-          <End Role="utilizers" Type="Self.utilizers" Multiplicity="0..1">
+          <End Type="DontHarmModel.utilizers" Role="utilizers" Multiplicity="0..1">
             <OnDelete Action="Cascade" />
           </End>
-          <End Role="order_services" Type="Self.order_services" Multiplicity="*" />
+          <End Type="DontHarmModel.order_services" Role="order_services" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="utilizers">
               <PropertyRef Name="id" />
@@ -608,8 +630,8 @@
           </ReferentialConstraint>
         </Association>
         <Association Name="FK_users_roles">
-          <End Role="roles" Type="Self.roles" Multiplicity="1" />
-          <End Role="users" Type="Self.users" Multiplicity="*" />
+          <End Type="DontHarmModel.roles" Role="roles" Multiplicity="1" />
+          <End Type="DontHarmModel.users" Role="users" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="roles">
               <PropertyRef Name="id" />
@@ -619,63 +641,6 @@
             </Dependent>
           </ReferentialConstraint>
         </Association>
-        <EntityContainer Name="Entities" annotation:LazyLoadingEnabled="true">
-          <EntitySet Name="clients" EntityType="Self.clients" />
-          <EntitySet Name="employee_services" EntityType="Self.employee_services" />
-          <EntitySet Name="invoices" EntityType="Self.invoices" />
-          <EntitySet Name="login_attempts" EntityType="Self.login_attempts" />
-          <EntitySet Name="order_services" EntityType="Self.order_services" />
-          <EntitySet Name="orders" EntityType="Self.orders" />
-          <EntitySet Name="roles" EntityType="Self.roles" />
-          <EntitySet Name="services" EntityType="Self.services" />
-          <EntitySet Name="sysdiagrams" EntityType="Self.sysdiagrams" />
-          <EntitySet Name="users" EntityType="Self.users" />
-          <EntitySet Name="utilizers" EntityType="Self.utilizers" />
-          <AssociationSet Name="FK_invoices_clients" Association="Self.FK_invoices_clients">
-            <End Role="clients" EntitySet="clients" />
-            <End Role="invoices" EntitySet="invoices" />
-          </AssociationSet>
-          <AssociationSet Name="FK_orders_clients" Association="Self.FK_orders_clients">
-            <End Role="clients" EntitySet="clients" />
-            <End Role="orders" EntitySet="orders" />
-          </AssociationSet>
-          <AssociationSet Name="FK_employee_services_services" Association="Self.FK_employee_services_services">
-            <End Role="services" EntitySet="services" />
-            <End Role="employee_services" EntitySet="employee_services" />
-          </AssociationSet>
-          <AssociationSet Name="FK_employee_services_users" Association="Self.FK_employee_services_users">
-            <End Role="users" EntitySet="users" />
-            <End Role="employee_services" EntitySet="employee_services" />
-          </AssociationSet>
-          <AssociationSet Name="FK_invoices_orders" Association="Self.FK_invoices_orders">
-            <End Role="orders" EntitySet="orders" />
-            <End Role="invoices" EntitySet="invoices" />
-          </AssociationSet>
-          <AssociationSet Name="FK_invoices_users" Association="Self.FK_invoices_users">
-            <End Role="users" EntitySet="users" />
-            <End Role="invoices" EntitySet="invoices" />
-          </AssociationSet>
-          <AssociationSet Name="FK_login_attempts_users" Association="Self.FK_login_attempts_users">
-            <End Role="users" EntitySet="users" />
-            <End Role="login_attempts" EntitySet="login_attempts" />
-          </AssociationSet>
-          <AssociationSet Name="FK_order_services_orders" Association="Self.FK_order_services_orders">
-            <End Role="orders" EntitySet="orders" />
-            <End Role="order_services" EntitySet="order_services" />
-          </AssociationSet>
-          <AssociationSet Name="FK_order_services_services" Association="Self.FK_order_services_services">
-            <End Role="services" EntitySet="services" />
-            <End Role="order_services" EntitySet="order_services" />
-          </AssociationSet>
-          <AssociationSet Name="FK_order_services_utilizers" Association="Self.FK_order_services_utilizers">
-            <End Role="utilizers" EntitySet="utilizers" />
-            <End Role="order_services" EntitySet="order_services" />
-          </AssociationSet>
-          <AssociationSet Name="FK_users_roles" Association="Self.FK_users_roles">
-            <End Role="roles" EntitySet="roles" />
-            <End Role="users" EntitySet="users" />
-          </AssociationSet>
-        </EntityContainer>
       </Schema>
     </edmx:ConceptualModels>
     <!-- C-S mapping content -->
@@ -685,128 +650,130 @@
           <EntitySetMapping Name="clients">
             <EntityTypeMapping TypeName="DontHarmModel.clients">
               <MappingFragment StoreEntitySet="clients">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="type" ColumnName="type" />
-                <ScalarProperty Name="login" ColumnName="login" />
-                <ScalarProperty Name="password" ColumnName="password" />
-                <ScalarProperty Name="surname" ColumnName="surname" />
-                <ScalarProperty Name="name" ColumnName="name" />
-                <ScalarProperty Name="patronymic" ColumnName="patronymic" />
-                <ScalarProperty Name="birthdate" ColumnName="birthdate" />
-                <ScalarProperty Name="passport_series" ColumnName="passport_series" />
-                <ScalarProperty Name="passport_number" ColumnName="passport_number" />
-                <ScalarProperty Name="phone" ColumnName="phone" />
-                <ScalarProperty Name="email" ColumnName="email" />
-                <ScalarProperty Name="company_name" ColumnName="company_name" />
-                <ScalarProperty Name="company_address" ColumnName="company_address" />
-                <ScalarProperty Name="inn" ColumnName="inn" />
-                <ScalarProperty Name="account" ColumnName="account" />
-                <ScalarProperty Name="bik" ColumnName="bik" />
                 <ScalarProperty Name="hidden" ColumnName="hidden" />
+                <ScalarProperty Name="bik" ColumnName="bik" />
+                <ScalarProperty Name="account" ColumnName="account" />
+                <ScalarProperty Name="inn" ColumnName="inn" />
+                <ScalarProperty Name="company_address" ColumnName="company_address" />
+                <ScalarProperty Name="company_name" ColumnName="company_name" />
+                <ScalarProperty Name="email" ColumnName="email" />
+                <ScalarProperty Name="phone" ColumnName="phone" />
+                <ScalarProperty Name="passport_number" ColumnName="passport_number" />
+                <ScalarProperty Name="passport_series" ColumnName="passport_series" />
+                <ScalarProperty Name="birthdate" ColumnName="birthdate" />
+                <ScalarProperty Name="patronymic" ColumnName="patronymic" />
+                <ScalarProperty Name="name" ColumnName="name" />
+                <ScalarProperty Name="surname" ColumnName="surname" />
+                <ScalarProperty Name="password" ColumnName="password" />
+                <ScalarProperty Name="login" ColumnName="login" />
+                <ScalarProperty Name="type" ColumnName="type" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="employee_services">
             <EntityTypeMapping TypeName="DontHarmModel.employee_services">
               <MappingFragment StoreEntitySet="employee_services">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="service_id" ColumnName="service_id" />
                 <ScalarProperty Name="user_id" ColumnName="user_id" />
+                <ScalarProperty Name="service_id" ColumnName="service_id" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="invoices">
             <EntityTypeMapping TypeName="DontHarmModel.invoices">
               <MappingFragment StoreEntitySet="invoices">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="client_id" ColumnName="client_id" />
-                <ScalarProperty Name="accountant_id" ColumnName="accountant_id" />
                 <ScalarProperty Name="order_id" ColumnName="order_id" />
+                <ScalarProperty Name="accountant_id" ColumnName="accountant_id" />
+                <ScalarProperty Name="client_id" ColumnName="client_id" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="login_attempts">
             <EntityTypeMapping TypeName="DontHarmModel.login_attempts">
               <MappingFragment StoreEntitySet="login_attempts">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="user_id" ColumnName="user_id" />
                 <ScalarProperty Name="created_at" ColumnName="created_at" />
+                <ScalarProperty Name="successfull" ColumnName="successfull" />
+                <ScalarProperty Name="login" ColumnName="login" />
+                <ScalarProperty Name="ip_address" ColumnName="ip_address" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="order_services">
             <EntityTypeMapping TypeName="DontHarmModel.order_services">
               <MappingFragment StoreEntitySet="order_services">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="service_id" ColumnName="service_id" />
-                <ScalarProperty Name="order_id" ColumnName="order_id" />
-                <ScalarProperty Name="status" ColumnName="status" />
-                <ScalarProperty Name="utilizer_id" ColumnName="utilizer_id" />
-                <ScalarProperty Name="started_at" ColumnName="started_at" />
                 <ScalarProperty Name="finished_at" ColumnName="finished_at" />
+                <ScalarProperty Name="started_at" ColumnName="started_at" />
+                <ScalarProperty Name="utilizer_id" ColumnName="utilizer_id" />
+                <ScalarProperty Name="status" ColumnName="status" />
+                <ScalarProperty Name="order_id" ColumnName="order_id" />
+                <ScalarProperty Name="service_id" ColumnName="service_id" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="orders">
             <EntityTypeMapping TypeName="DontHarmModel.orders">
               <MappingFragment StoreEntitySet="orders">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="created_at" ColumnName="created_at" />
-                <ScalarProperty Name="client_id" ColumnName="client_id" />
                 <ScalarProperty Name="hidden" ColumnName="hidden" />
+                <ScalarProperty Name="client_id" ColumnName="client_id" />
+                <ScalarProperty Name="created_at" ColumnName="created_at" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="roles">
             <EntityTypeMapping TypeName="DontHarmModel.roles">
               <MappingFragment StoreEntitySet="roles">
-                <ScalarProperty Name="id" ColumnName="id" />
                 <ScalarProperty Name="name" ColumnName="name" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="services">
             <EntityTypeMapping TypeName="DontHarmModel.services">
               <MappingFragment StoreEntitySet="services">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="name" ColumnName="name" />
-                <ScalarProperty Name="price" ColumnName="price" />
-                <ScalarProperty Name="code" ColumnName="code" />
                 <ScalarProperty Name="hidden" ColumnName="hidden" />
+                <ScalarProperty Name="code" ColumnName="code" />
+                <ScalarProperty Name="price" ColumnName="price" />
+                <ScalarProperty Name="name" ColumnName="name" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="sysdiagrams">
             <EntityTypeMapping TypeName="DontHarmModel.sysdiagrams">
               <MappingFragment StoreEntitySet="sysdiagrams">
-                <ScalarProperty Name="name" ColumnName="name" />
-                <ScalarProperty Name="principal_id" ColumnName="principal_id" />
-                <ScalarProperty Name="diagram_id" ColumnName="diagram_id" />
-                <ScalarProperty Name="version" ColumnName="version" />
                 <ScalarProperty Name="definition" ColumnName="definition" />
+                <ScalarProperty Name="version" ColumnName="version" />
+                <ScalarProperty Name="diagram_id" ColumnName="diagram_id" />
+                <ScalarProperty Name="principal_id" ColumnName="principal_id" />
+                <ScalarProperty Name="name" ColumnName="name" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="users">
             <EntityTypeMapping TypeName="DontHarmModel.users">
               <MappingFragment StoreEntitySet="users">
-                <ScalarProperty Name="id" ColumnName="id" />
-                <ScalarProperty Name="role" ColumnName="role" />
-                <ScalarProperty Name="login" ColumnName="login" />
-                <ScalarProperty Name="password" ColumnName="password" />
-                <ScalarProperty Name="hidden" ColumnName="hidden" />
-                <ScalarProperty Name="surname" ColumnName="surname" />
-                <ScalarProperty Name="name" ColumnName="name" />
-                <ScalarProperty Name="patronymic" ColumnName="patronymic" />
                 <ScalarProperty Name="image_path" ColumnName="image_path" />
+                <ScalarProperty Name="patronymic" ColumnName="patronymic" />
+                <ScalarProperty Name="name" ColumnName="name" />
+                <ScalarProperty Name="surname" ColumnName="surname" />
+                <ScalarProperty Name="hidden" ColumnName="hidden" />
+                <ScalarProperty Name="password" ColumnName="password" />
+                <ScalarProperty Name="login" ColumnName="login" />
+                <ScalarProperty Name="role" ColumnName="role" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>
           <EntitySetMapping Name="utilizers">
             <EntityTypeMapping TypeName="DontHarmModel.utilizers">
               <MappingFragment StoreEntitySet="utilizers">
-                <ScalarProperty Name="id" ColumnName="id" />
                 <ScalarProperty Name="name" ColumnName="name" />
+                <ScalarProperty Name="id" ColumnName="id" />
               </MappingFragment>
             </EntityTypeMapping>
           </EntitySetMapping>

+ 21 - 22
src/DontHarmDesktop/Models/DontHarmModel.edmx.diagram

@@ -5,28 +5,27 @@
     <!-- Diagram content (shape and connector positions) -->
     <edmx:Diagrams>
       <Diagram DiagramId="2e790b0fcc70499f800aca8e9fcae3a7" Name="Diagram1">
-        <EntityTypeShape EntityType="DontHarmModel.clients" Width="1.5" PointX="3" PointY="8.5" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.employee_services" Width="1.5" PointX="5.25" PointY="5" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.invoices" Width="1.5" PointX="5.25" PointY="1.75" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.login_attempts" Width="1.5" PointX="5.25" PointY="10.875" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.order_services" Width="1.5" PointX="8.25" PointY="7.125" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.orders" Width="1.5" PointX="3" PointY="14.125" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.roles" Width="1.5" PointX="0.75" PointY="5.125" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.services" Width="1.5" PointX="3" PointY="0.75" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.sysdiagrams" Width="1.5" PointX="7.75" PointY="1.625" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.users" Width="1.5" PointX="3" PointY="4.125" IsExpanded="true" />
-        <EntityTypeShape EntityType="DontHarmModel.utilizers" Width="1.5" PointX="6" PointY="7.875" IsExpanded="true" />
-        <AssociationConnector Association="DontHarmModel.FK_invoices_clients" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_orders_clients" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_employee_services_services" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_employee_services_users" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_invoices_orders" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_invoices_users" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_login_attempts_users" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_order_services_orders" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_order_services_services" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_order_services_utilizers" ManuallyRouted="false" />
-        <AssociationConnector Association="DontHarmModel.FK_users_roles" ManuallyRouted="false" />
+        <EntityTypeShape EntityType="DontHarmModel.clients" Width="1.5" PointX="3" PointY="11.125" />
+        <EntityTypeShape EntityType="DontHarmModel.employee_services" Width="1.5" PointX="5.25" PointY="4" />
+        <EntityTypeShape EntityType="DontHarmModel.invoices" Width="1.5" PointX="5.25" PointY="0.75" />
+        <EntityTypeShape EntityType="DontHarmModel.login_attempts" Width="1.5" PointX="5.75" PointY="7" />
+        <EntityTypeShape EntityType="DontHarmModel.order_services" Width="1.5" PointX="5.25" PointY="12.625" />
+        <EntityTypeShape EntityType="DontHarmModel.orders" Width="1.5" PointX="3" PointY="8" />
+        <EntityTypeShape EntityType="DontHarmModel.roles" Width="1.5" PointX="0.75" PointY="4.125" />
+        <EntityTypeShape EntityType="DontHarmModel.services" Width="1.5" PointX="3" PointY="17.75" />
+        <EntityTypeShape EntityType="DontHarmModel.sysdiagrams" Width="1.5" PointX="7.75" PointY="2" />
+        <EntityTypeShape EntityType="DontHarmModel.users" Width="1.5" PointX="3" PointY="3.25" />
+        <EntityTypeShape EntityType="DontHarmModel.utilizers" Width="1.5" PointX="3" PointY="21.25" />
+        <AssociationConnector Association="DontHarmModel.FK_invoices_clients" />
+        <AssociationConnector Association="DontHarmModel.FK_orders_clients" />
+        <AssociationConnector Association="DontHarmModel.FK_employee_services_services" />
+        <AssociationConnector Association="DontHarmModel.FK_employee_services_users" />
+        <AssociationConnector Association="DontHarmModel.FK_invoices_orders" />
+        <AssociationConnector Association="DontHarmModel.FK_invoices_users" />
+        <AssociationConnector Association="DontHarmModel.FK_order_services_orders" />
+        <AssociationConnector Association="DontHarmModel.FK_order_services_services" />
+        <AssociationConnector Association="DontHarmModel.FK_order_services_utilizers" />
+        <AssociationConnector Association="DontHarmModel.FK_users_roles" />
       </Diagram>
     </edmx:Diagrams>
   </edmx:Designer>

+ 3 - 3
src/DontHarmDesktop/Models/login_attempts.cs

@@ -15,9 +15,9 @@ namespace DontHarmDesktop.Models
     public partial class login_attempts
     {
         public int id { get; set; }
-        public int user_id { get; set; }
+        public string ip_address { get; set; }
+        public string login { get; set; }
+        public byte successfull { get; set; }
         public System.DateTime created_at { get; set; }
-    
-        public virtual users users { get; set; }
     }
 }

+ 0 - 3
src/DontHarmDesktop/Models/users.cs

@@ -19,7 +19,6 @@ namespace DontHarmDesktop.Models
         {
             this.employee_services = new HashSet<employee_services>();
             this.invoices = new HashSet<invoices>();
-            this.login_attempts = new HashSet<login_attempts>();
         }
     
         public int id { get; set; }
@@ -36,8 +35,6 @@ namespace DontHarmDesktop.Models
         public virtual ICollection<employee_services> employee_services { get; set; }
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
         public virtual ICollection<invoices> invoices { get; set; }
-        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
-        public virtual ICollection<login_attempts> login_attempts { get; set; }
         public virtual roles roles { get; set; }
     }
 }

+ 0 - 2
src/DontHarmDesktop/Pages/AuthPage.xaml.cs

@@ -44,8 +44,6 @@ namespace DontHarmDesktop.Pages
             if (success)
             {
                 NavigationService.Navigate(new WelcomePage());
-            } else { 
-                MessageBox.Show("Введённые логин или пароль неверны");
             }
         }
     }