JwtToken 1.0
This commit is contained in:
@@ -3,6 +3,12 @@
|
|||||||
"DefaultConnection": "Data Source=WS2016DC\\SQLEXPRESS;Initial Catalog=WFCUAT;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False"
|
"DefaultConnection": "Data Source=WS2016DC\\SQLEXPRESS;Initial Catalog=WFCUAT;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False"
|
||||||
},
|
},
|
||||||
"ApiKey": "RUJeLSpSMzVASUdaRCEzUyYxRSE0VyFISFRSJC0zRzhLM1hCSDU=",
|
"ApiKey": "RUJeLSpSMzVASUdaRCEzUyYxRSE0VyFISFRSJC0zRzhLM1hCSDU=",
|
||||||
|
"Jwt": {
|
||||||
|
"SecretKey": "9aLxV2t7RpM8BfKqZwXy3GehYJDUNTCrHkVZ",
|
||||||
|
"Issuer": "https://wfcapi.nuvolar.hu/",
|
||||||
|
"Audience": "wfc-application",
|
||||||
|
"TokenLifetimeMinutes": 30
|
||||||
|
},
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ namespace WorkFlowCheck.BL.Mappings
|
|||||||
{
|
{
|
||||||
public MapperProfile()
|
public MapperProfile()
|
||||||
{
|
{
|
||||||
CreateMap<User, UserDTO>();
|
CreateMap<User, UserDTO>().ForMember(dest => dest.RoleDTO, opt => opt.MapFrom(src => src.UserRoles.Select(ur => ur.Role)));
|
||||||
|
CreateMap<Role, RoleDTO>();
|
||||||
CreateMap<UserDTO, User>()
|
CreateMap<UserDTO, User>()
|
||||||
.ForMember(dest => dest.PasswordHash, opt => opt.MapFrom<PasswordHashResolver>());
|
.ForMember(dest => dest.PasswordHash, opt => opt.MapFrom<PasswordHashResolver>());
|
||||||
|
|
||||||
|
|||||||
@@ -11,5 +11,6 @@ namespace WorkFlowCheck.BL.Services.Interfaces
|
|||||||
{
|
{
|
||||||
Task<UserDTO> GetUser(int Id);
|
Task<UserDTO> GetUser(int Id);
|
||||||
Task<UserDTO> Authenticate(string UserName, string Password);
|
Task<UserDTO> Authenticate(string UserName, string Password);
|
||||||
|
string GenerateJwtToken(UserDTO userDTO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ using WorkFlowCheck.Common.DTO;
|
|||||||
using WorkFlowCheck.BL.Services.Interfaces;
|
using WorkFlowCheck.BL.Services.Interfaces;
|
||||||
using WorkFlowCheck.DL;
|
using WorkFlowCheck.DL;
|
||||||
using WorkFlowCheck.Common.Security;
|
using WorkFlowCheck.Common.Security;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using System.IdentityModel.Tokens.Jwt;
|
||||||
|
using System.Security.Claims;
|
||||||
|
using WorkFlowCheck.DL.Entities;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace WorkFlowCheck.BL.Services
|
namespace WorkFlowCheck.BL.Services
|
||||||
{
|
{
|
||||||
@@ -17,14 +22,17 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
{
|
{
|
||||||
private AppDbContext _dbContext;
|
private AppDbContext _dbContext;
|
||||||
private IMapper _mapper;
|
private IMapper _mapper;
|
||||||
public UserService(AppDbContext dbContext, IMapper mapper)
|
private IConfiguration _configuration;
|
||||||
|
|
||||||
|
public UserService(AppDbContext dbContext, IMapper mapper, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
_dbContext = dbContext;
|
_dbContext = dbContext;
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
|
_configuration = configuration;
|
||||||
}
|
}
|
||||||
public async Task<UserDTO> GetUser(int Id)
|
public async Task<UserDTO> GetUser(int Id)
|
||||||
{
|
{
|
||||||
var retVal = new UserDTO();
|
var retVal = new UserDTO() { RoleDTO = new List<RoleDTO>() };
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -43,13 +51,35 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
|
|
||||||
public async Task<UserDTO> Authenticate(string userName, string password)
|
public async Task<UserDTO> Authenticate(string userName, string password)
|
||||||
{
|
{
|
||||||
var retVal = new UserDTO();
|
var retVal = new UserDTO() { RoleDTO = new List<RoleDTO>() };
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var user = await _dbContext.Users.Where(w => w.UserName == userName).FirstOrDefaultAsync();
|
var user = await _dbContext.Users
|
||||||
|
.Include(i => i.UserRoles)
|
||||||
|
.ThenInclude(i => i.Role)
|
||||||
|
.Where(w => w.UserName == userName)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
if (user != null && PasswordHasher.VerifyPassword(user.PasswordHash, password))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
var userDTO = new UserDTO()
|
||||||
|
{
|
||||||
|
Id = user.Id,
|
||||||
|
UserName = user.UserName,
|
||||||
|
RoleDTO = new List<RoleDTO>(),
|
||||||
|
};
|
||||||
|
foreach (var item in user.UserRoles)
|
||||||
|
{
|
||||||
|
userDTO.RoleDTO.Add(new RoleDTO()
|
||||||
|
{
|
||||||
|
Id = item.Role.Id,
|
||||||
|
RoleName = item.Role.RoleName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
user.JwtToken = GenerateJwtToken(userDTO);
|
||||||
|
await _dbContext.SaveChangesAsync();
|
||||||
|
|
||||||
retVal = _mapper.Map<UserDTO>(user);
|
retVal = _mapper.Map<UserDTO>(user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,5 +89,36 @@ namespace WorkFlowCheck.BL.Services
|
|||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GenerateJwtToken(UserDTO userDTO)
|
||||||
|
{
|
||||||
|
var jwtSettings = _configuration.GetSection("Jwt");
|
||||||
|
var secretKey = jwtSettings["SecretKey"];
|
||||||
|
var issuer = jwtSettings["Issuer"];
|
||||||
|
var audience = jwtSettings["Audience"];
|
||||||
|
var tokenLifetime = int.Parse(jwtSettings["TokenLifetimeMinutes"]);
|
||||||
|
|
||||||
|
var claims = new List<Claim>
|
||||||
|
{
|
||||||
|
new Claim(ClaimTypes.Name, userDTO.UserName),
|
||||||
|
new Claim(ClaimTypes.NameIdentifier, userDTO.Id.ToString())
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var role in userDTO.RoleDTO)
|
||||||
|
{
|
||||||
|
claims.Add(new Claim(ClaimTypes.Role, role.RoleName));
|
||||||
|
}
|
||||||
|
|
||||||
|
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));
|
||||||
|
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
|
||||||
|
var token = new JwtSecurityToken(
|
||||||
|
issuer: issuer,
|
||||||
|
audience: audience,
|
||||||
|
claims: claims,
|
||||||
|
expires: DateTime.UtcNow.AddMinutes(tokenLifetime),
|
||||||
|
signingCredentials: creds);
|
||||||
|
|
||||||
|
return new JwtSecurityTokenHandler().WriteToken(token);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace WorkFlowCheck.Common.DTO
|
||||||
|
{
|
||||||
|
public class RoleDTO
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string RoleName { get; set; } = null!;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
public string UserName { get;set; } = null!;
|
public string UserName { get;set; } = null!;
|
||||||
public string Password { get; set; }
|
public string Password { get; set; }
|
||||||
public string JwtToken { get; set; } = null!;
|
public string JwtToken { get; set; } = null!;
|
||||||
|
public required ICollection<RoleDTO> RoleDTO { get; set; } = new List<RoleDTO>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,20 +16,22 @@ namespace WorkFlowCheck.DL
|
|||||||
{
|
{
|
||||||
public class AppDbContext : DbContext
|
public class AppDbContext : DbContext
|
||||||
{
|
{
|
||||||
private readonly IRequestContext _requestContext;
|
|
||||||
|
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
public AppDbContext(DbContextOptions<AppDbContext> options, IRequestContext requestContext)
|
private readonly IRequestContext _requestContext;
|
||||||
|
public AppDbContext(DbContextOptions<AppDbContext> options, IRequestContext requestContext)
|
||||||
: base(options)
|
: base(options)
|
||||||
{
|
{
|
||||||
_requestContext = requestContext;
|
_requestContext = requestContext;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
private dynamic _requestContext;
|
||||||
public AppDbContext(DbContextOptions<AppDbContext> options)
|
public AppDbContext(DbContextOptions<AppDbContext> options)
|
||||||
: base(options)
|
: base(options)
|
||||||
{
|
{
|
||||||
var _requestContext = new { CurrentUserEmail = "", CurrentUsername = "", TraceId = 0 };
|
_requestContext = new { CurrentUserEmail = "", CurrentUsername = "admin", TraceId = 0 };
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#region Entities DbSet
|
#region Entities DbSet
|
||||||
@@ -137,6 +139,7 @@ namespace WorkFlowCheck.DL
|
|||||||
CreatedBy = "System",
|
CreatedBy = "System",
|
||||||
LastModAt = DateTime.UtcNow,
|
LastModAt = DateTime.UtcNow,
|
||||||
LastModBy = "System",
|
LastModBy = "System",
|
||||||
|
JwtToken = ""
|
||||||
},
|
},
|
||||||
new User
|
new User
|
||||||
{
|
{
|
||||||
@@ -151,6 +154,7 @@ namespace WorkFlowCheck.DL
|
|||||||
CreatedBy = "System",
|
CreatedBy = "System",
|
||||||
LastModAt = DateTime.UtcNow,
|
LastModAt = DateTime.UtcNow,
|
||||||
LastModBy = "System",
|
LastModBy = "System",
|
||||||
|
JwtToken = ""
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ namespace WorkFlowCheck.DL.Entities
|
|||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string RoleName { get; set; } = null!;
|
public string RoleName { get; set; } = null!;
|
||||||
|
|
||||||
|
public virtual ICollection<UserRole> UserRoles { get; set; } = new List<UserRole>();
|
||||||
|
|
||||||
public bool IsDeleted { get ; set ; }
|
public bool IsDeleted { get ; set ; }
|
||||||
public DateTime LastModAt { get ; set ; }
|
public DateTime LastModAt { get ; set ; }
|
||||||
public string LastModBy { get ; set ; } = null!;
|
public string LastModBy { get ; set ; } = null!;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using WorkFlowCheck.DL.Interfaces;
|
|||||||
|
|
||||||
namespace WorkFlowCheck.DL.Entities
|
namespace WorkFlowCheck.DL.Entities
|
||||||
{
|
{
|
||||||
public class User:IAuditableEntity,ISoftDeletableEntity
|
public class User : IAuditableEntity, ISoftDeletableEntity
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Email { get; set; } = null!;
|
public string Email { get; set; } = null!;
|
||||||
@@ -11,10 +11,14 @@ namespace WorkFlowCheck.DL.Entities
|
|||||||
public string LastName { get; set; } = null!;
|
public string LastName { get; set; } = null!;
|
||||||
public string UserName { get; set; } = null!;
|
public string UserName { get; set; } = null!;
|
||||||
public string? PasswordHash { get; set; } = null;
|
public string? PasswordHash { get; set; } = null;
|
||||||
public DateTime LastModAt { get ; set ; }
|
public string JwtToken { get; set; } = null!;
|
||||||
public string LastModBy { get ; set ; } = null!;
|
|
||||||
public DateTime CreatedAt { get ; set ; }
|
public virtual ICollection<UserRole> UserRoles { get; set; } = new List<UserRole>();
|
||||||
public string CreatedBy { get ; set ; } = null!;
|
|
||||||
public bool IsDeleted { get ; set ; }
|
public DateTime LastModAt { get; set; }
|
||||||
|
public string LastModBy { get; set; } = null!;
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
public string CreatedBy { get; set; } = null!;
|
||||||
|
public bool IsDeleted { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace WorkFlowCheck.DL.Entities
|
|||||||
public class UserRole
|
public class UserRole
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int RoleId { get; set; } = 0;
|
public int? RoleId { get; set; } = 0;
|
||||||
public virtual Role Role { get; set; } = null!;
|
public virtual Role Role { get; set; } = null!;
|
||||||
public int UserId { get; set; }
|
public int UserId { get; set; }
|
||||||
public virtual User User { get; set; } = null!;
|
public virtual User User { get; set; } = null!;
|
||||||
|
|||||||
+624
@@ -0,0 +1,624 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using WorkFlowCheck.DL;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace WorkFlowCheck.DL.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(AppDbContext))]
|
||||||
|
[Migration("20250312080859_UserRoleExtension")]
|
||||||
|
partial class UserRoleExtension
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "8.0.12")
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("CheckListTemplateHeaderId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("DocumentNumber")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<Guid>("GuidNumber")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<bool>("IsStorno")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("ShortName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CheckListTemplateHeaderId");
|
||||||
|
|
||||||
|
b.ToTable("CheckListHeader", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Answer")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<int>("CheckListHeaderId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("CheckListTemplateRowId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<Guid>("GuidNumber")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<byte[]>("Photo")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("varbinary(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CheckListHeaderId");
|
||||||
|
|
||||||
|
b.HasIndex("CheckListTemplateRowId");
|
||||||
|
|
||||||
|
b.ToTable("CheckListRow", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("Description")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("ShortName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("CheckListTemplateHeader", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("AnswerType")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<int>("CheckListTemplateHeaderId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("CheckPointId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<int>("EquipmentId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("OperationDescription")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<int>("RowIndex")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CheckListTemplateHeaderId");
|
||||||
|
|
||||||
|
b.HasIndex("CheckPointId");
|
||||||
|
|
||||||
|
b.HasIndex("EquipmentId");
|
||||||
|
|
||||||
|
b.ToTable("CheckListTemplateRow", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("Code")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("ShortName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("CheckPoint", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.Equipment", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("EquipmentNumber")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("ShortName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Equipment", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.Location", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("FullName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Location", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("RoleName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Roles", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int>("CheckListTemplateHeaderId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<bool>("Enabled")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<int>("RoleId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CheckListTemplateHeaderId");
|
||||||
|
|
||||||
|
b.HasIndex("RoleId");
|
||||||
|
|
||||||
|
b.ToTable("RoleCheckListTemplateHeader", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("CreatedBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("FirstName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<string>("JwtToken")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<DateTime>("LastModAt")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<string>("LastModBy")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("LastName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("PasswordHash")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("UserName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Users", (string)null);
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
CreatedAt = new DateTime(2025, 3, 12, 8, 8, 57, 555, DateTimeKind.Utc).AddTicks(6125),
|
||||||
|
CreatedBy = "System",
|
||||||
|
Email = "admin@nuvolar.hu",
|
||||||
|
FirstName = "Administrator",
|
||||||
|
IsDeleted = false,
|
||||||
|
JwtToken = "",
|
||||||
|
LastModAt = new DateTime(2025, 3, 12, 8, 8, 57, 555, DateTimeKind.Utc).AddTicks(6129),
|
||||||
|
LastModBy = "System",
|
||||||
|
LastName = "System",
|
||||||
|
PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY",
|
||||||
|
UserName = "admin"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
CreatedAt = new DateTime(2025, 3, 12, 8, 8, 57, 566, DateTimeKind.Utc).AddTicks(6128),
|
||||||
|
CreatedBy = "System",
|
||||||
|
Email = "user@nuvolar.hu",
|
||||||
|
FirstName = "User",
|
||||||
|
IsDeleted = false,
|
||||||
|
JwtToken = "",
|
||||||
|
LastModAt = new DateTime(2025, 3, 12, 8, 8, 57, 566, DateTimeKind.Utc).AddTicks(6129),
|
||||||
|
LastModBy = "System",
|
||||||
|
LastName = "System",
|
||||||
|
PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG",
|
||||||
|
UserName = "user"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
|
b.Property<int?>("RoleId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<int>("UserId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("RoleId");
|
||||||
|
|
||||||
|
b.HasIndex("UserId");
|
||||||
|
|
||||||
|
b.ToTable("UserRoles", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CheckListTemplateHeaderId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("CheckListTemplateHeader");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckListHeader", "CheckListHeader")
|
||||||
|
.WithMany("CheckListRows")
|
||||||
|
.HasForeignKey("CheckListHeaderId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateRow", "CheckListTemplateRow")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CheckListTemplateRowId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("CheckListHeader");
|
||||||
|
|
||||||
|
b.Navigation("CheckListTemplateRow");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader")
|
||||||
|
.WithMany("CheckListTemplateRows")
|
||||||
|
.HasForeignKey("CheckListTemplateHeaderId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint")
|
||||||
|
.WithMany("CheckListTemplateRows")
|
||||||
|
.HasForeignKey("CheckPointId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.Equipment", "Equipment")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("EquipmentId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("CheckListTemplateHeader");
|
||||||
|
|
||||||
|
b.Navigation("CheckPoint");
|
||||||
|
|
||||||
|
b.Navigation("Equipment");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CheckListTemplateHeaderId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("RoleId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("CheckListTemplateHeader");
|
||||||
|
|
||||||
|
b.Navigation("Role");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role")
|
||||||
|
.WithMany("UserRoles")
|
||||||
|
.HasForeignKey("RoleId");
|
||||||
|
|
||||||
|
b.HasOne("WorkFlowCheck.DL.Entities.User", "User")
|
||||||
|
.WithMany("UserRoles")
|
||||||
|
.HasForeignKey("UserId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Role");
|
||||||
|
|
||||||
|
b.Navigation("User");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListHeader", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CheckListRows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CheckListTemplateRows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CheckListTemplateRows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("UserRoles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("UserRoles");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace WorkFlowCheck.DL.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class UserRoleExtension : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "FK_UserRoles_Roles_RoleId",
|
||||||
|
table: "UserRoles");
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "JwtToken",
|
||||||
|
table: "Users",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: "");
|
||||||
|
|
||||||
|
migrationBuilder.AlterColumn<int>(
|
||||||
|
name: "RoleId",
|
||||||
|
table: "UserRoles",
|
||||||
|
type: "int",
|
||||||
|
nullable: true,
|
||||||
|
oldClrType: typeof(int),
|
||||||
|
oldType: "int");
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "Users",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: 1,
|
||||||
|
columns: new[] { "CreatedAt", "JwtToken", "LastModAt" },
|
||||||
|
values: new object[] { new DateTime(2025, 3, 12, 8, 8, 57, 555, DateTimeKind.Utc).AddTicks(6125), "", new DateTime(2025, 3, 12, 8, 8, 57, 555, DateTimeKind.Utc).AddTicks(6129) });
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "Users",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: 2,
|
||||||
|
columns: new[] { "CreatedAt", "JwtToken", "LastModAt" },
|
||||||
|
values: new object[] { new DateTime(2025, 3, 12, 8, 8, 57, 566, DateTimeKind.Utc).AddTicks(6128), "", new DateTime(2025, 3, 12, 8, 8, 57, 566, DateTimeKind.Utc).AddTicks(6129) });
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "FK_UserRoles_Roles_RoleId",
|
||||||
|
table: "UserRoles",
|
||||||
|
column: "RoleId",
|
||||||
|
principalTable: "Roles",
|
||||||
|
principalColumn: "Id");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "FK_UserRoles_Roles_RoleId",
|
||||||
|
table: "UserRoles");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "JwtToken",
|
||||||
|
table: "Users");
|
||||||
|
|
||||||
|
migrationBuilder.AlterColumn<int>(
|
||||||
|
name: "RoleId",
|
||||||
|
table: "UserRoles",
|
||||||
|
type: "int",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: 0,
|
||||||
|
oldClrType: typeof(int),
|
||||||
|
oldType: "int",
|
||||||
|
oldNullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "Users",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: 1,
|
||||||
|
columns: new[] { "CreatedAt", "LastModAt" },
|
||||||
|
values: new object[] { new DateTime(2025, 3, 3, 15, 47, 43, 353, DateTimeKind.Utc).AddTicks(3654), new DateTime(2025, 3, 3, 15, 47, 43, 353, DateTimeKind.Utc).AddTicks(3659) });
|
||||||
|
|
||||||
|
migrationBuilder.UpdateData(
|
||||||
|
table: "Users",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: 2,
|
||||||
|
columns: new[] { "CreatedAt", "LastModAt" },
|
||||||
|
values: new object[] { new DateTime(2025, 3, 3, 15, 47, 43, 364, DateTimeKind.Utc).AddTicks(9120), new DateTime(2025, 3, 3, 15, 47, 43, 364, DateTimeKind.Utc).AddTicks(9122) });
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "FK_UserRoles_Roles_RoleId",
|
||||||
|
table: "UserRoles",
|
||||||
|
column: "RoleId",
|
||||||
|
principalTable: "Roles",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -416,6 +416,10 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
b.Property<bool>("IsDeleted")
|
b.Property<bool>("IsDeleted")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<string>("JwtToken")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<DateTime>("LastModAt")
|
b.Property<DateTime>("LastModAt")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
@@ -442,12 +446,13 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = 1,
|
Id = 1,
|
||||||
CreatedAt = new DateTime(2025, 3, 3, 15, 47, 43, 353, DateTimeKind.Utc).AddTicks(3654),
|
CreatedAt = new DateTime(2025, 3, 12, 8, 8, 57, 555, DateTimeKind.Utc).AddTicks(6125),
|
||||||
CreatedBy = "System",
|
CreatedBy = "System",
|
||||||
Email = "admin@nuvolar.hu",
|
Email = "admin@nuvolar.hu",
|
||||||
FirstName = "Administrator",
|
FirstName = "Administrator",
|
||||||
IsDeleted = false,
|
IsDeleted = false,
|
||||||
LastModAt = new DateTime(2025, 3, 3, 15, 47, 43, 353, DateTimeKind.Utc).AddTicks(3659),
|
JwtToken = "",
|
||||||
|
LastModAt = new DateTime(2025, 3, 12, 8, 8, 57, 555, DateTimeKind.Utc).AddTicks(6129),
|
||||||
LastModBy = "System",
|
LastModBy = "System",
|
||||||
LastName = "System",
|
LastName = "System",
|
||||||
PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY",
|
PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY",
|
||||||
@@ -456,12 +461,13 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = 2,
|
Id = 2,
|
||||||
CreatedAt = new DateTime(2025, 3, 3, 15, 47, 43, 364, DateTimeKind.Utc).AddTicks(9120),
|
CreatedAt = new DateTime(2025, 3, 12, 8, 8, 57, 566, DateTimeKind.Utc).AddTicks(6128),
|
||||||
CreatedBy = "System",
|
CreatedBy = "System",
|
||||||
Email = "user@nuvolar.hu",
|
Email = "user@nuvolar.hu",
|
||||||
FirstName = "User",
|
FirstName = "User",
|
||||||
IsDeleted = false,
|
IsDeleted = false,
|
||||||
LastModAt = new DateTime(2025, 3, 3, 15, 47, 43, 364, DateTimeKind.Utc).AddTicks(9122),
|
JwtToken = "",
|
||||||
|
LastModAt = new DateTime(2025, 3, 12, 8, 8, 57, 566, DateTimeKind.Utc).AddTicks(6129),
|
||||||
LastModBy = "System",
|
LastModBy = "System",
|
||||||
LastName = "System",
|
LastName = "System",
|
||||||
PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG",
|
PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG",
|
||||||
@@ -477,7 +483,7 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||||
|
|
||||||
b.Property<int>("RoleId")
|
b.Property<int?>("RoleId")
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("UserId")
|
b.Property<int>("UserId")
|
||||||
@@ -531,7 +537,7 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint")
|
b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint")
|
||||||
.WithMany()
|
.WithMany("CheckListTemplateRows")
|
||||||
.HasForeignKey("CheckPointId")
|
.HasForeignKey("CheckPointId")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
@@ -571,13 +577,11 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b =>
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role")
|
b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role")
|
||||||
.WithMany()
|
.WithMany("UserRoles")
|
||||||
.HasForeignKey("RoleId")
|
.HasForeignKey("RoleId");
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("WorkFlowCheck.DL.Entities.User", "User")
|
b.HasOne("WorkFlowCheck.DL.Entities.User", "User")
|
||||||
.WithMany()
|
.WithMany("UserRoles")
|
||||||
.HasForeignKey("UserId")
|
.HasForeignKey("UserId")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
@@ -596,6 +600,21 @@ namespace WorkFlowCheck.DL.Migrations
|
|||||||
{
|
{
|
||||||
b.Navigation("CheckListTemplateRows");
|
b.Navigation("CheckListTemplateRows");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckPoint", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("CheckListTemplateRows");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("UserRoles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("UserRoles");
|
||||||
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace WorkFlowCheck.Web.Middleware
|
|||||||
public readonly IConfiguration _configuration;
|
public readonly IConfiguration _configuration;
|
||||||
private readonly HttpClient _httpClient;
|
private readonly HttpClient _httpClient;
|
||||||
|
|
||||||
public JwtService(HttpClient httpClient,IConfiguration configuration)
|
public JwtService(HttpClient httpClient, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
@@ -67,6 +67,7 @@ namespace WorkFlowCheck.Web.Middleware
|
|||||||
Id = 0,
|
Id = 0,
|
||||||
UserName = username,
|
UserName = username,
|
||||||
Password = password,
|
Password = password,
|
||||||
|
RoleDTO = new List<RoleDTO>()
|
||||||
};
|
};
|
||||||
|
|
||||||
// HTTP POST kérés küldése
|
// HTTP POST kérés küldése
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
"ApiBaseUrl": "https://wfcapi.nuvolar.hu/",
|
"ApiBaseUrl": "https://wfcapi.nuvolar.hu/",
|
||||||
"ApiKey": "RUJeLSpSMzVASUdaRCEzUyYxRSE0VyFISFRSJC0zRzhLM1hCSDU=",
|
"ApiKey": "RUJeLSpSMzVASUdaRCEzUyYxRSE0VyFISFRSJC0zRzhLM1hCSDU=",
|
||||||
"Jwt": {
|
"Jwt": {
|
||||||
"SecretKey": "super_secret_key",
|
"SecretKey": "9aLxV2t7RpM8BfKqZwXy3GehYJDUNTCrHkVZ",
|
||||||
"Issuer": "https://wfcapi.nuvolar.hu/",
|
"Issuer": "https://wfcapi.nuvolar.hu/",
|
||||||
"Audience": "https://mywebapp.com",
|
"Audience": "wfc-application",
|
||||||
"TokenLifetimeMinutes": 30
|
"TokenLifetimeMinutes": 30
|
||||||
},
|
},
|
||||||
"Logging": {
|
"Logging": {
|
||||||
|
|||||||
Reference in New Issue
Block a user