diff --git a/src/WorkFlowCheck.API/Controllers/SyncController.cs b/src/WorkFlowCheck.API/Controllers/SyncController.cs index 0f4debb..b54015a 100644 --- a/src/WorkFlowCheck.API/Controllers/SyncController.cs +++ b/src/WorkFlowCheck.API/Controllers/SyncController.cs @@ -462,5 +462,30 @@ namespace WorkFlowCheck.API.Controllers return retVal; } + + [HttpGet("Download")] + public async Task DownloadAPKFileAsync() + { + try + { + string fileName = "com.nuvolar.wfcapp-Signed.apk"; + string downloadFolder = Path.Combine(Directory.GetCurrentDirectory(), "Downloads", "APK"); + string filePath = Path.Combine(downloadFolder, fileName); + + if (!System.IO.File.Exists(filePath)) + { + return NotFound("File not found."); + } + + var fileBytes = await System.IO.File.ReadAllBytesAsync(filePath); + var fileType = "application/octet-stream"; + + return File(fileBytes, fileType, fileName); + } + catch (Exception ex) + { + return StatusCode(500, $"Error: {ex.Message}"); + } + } } } diff --git a/src/WorkFlowCheck.API/Controllers/UserController.cs b/src/WorkFlowCheck.API/Controllers/UserController.cs index 7761b76..c7011e6 100644 --- a/src/WorkFlowCheck.API/Controllers/UserController.cs +++ b/src/WorkFlowCheck.API/Controllers/UserController.cs @@ -139,6 +139,53 @@ namespace WorkFlowCheck.API.Controllers } return retVal; } + [HttpPost("AuthenticateNFC")] + public async Task> AuthenticateNFC([FromBody] UserSimpleDTO userSimpleDTO) + { + var retVal = new ApiResponseDTO() + { + IsSuccess = true + }; + if (string.IsNullOrEmpty(userSimpleDTO.UserName) || string.IsNullOrEmpty(userSimpleDTO.Password)) + { + retVal.IsSuccess = false; + retVal.Errors.Add("Nem megfelelo felhasználói név vagy jelszó"); + return retVal; + } + try + { + var userDTO_Response = await _userService.Authenticate(userSimpleDTO.UserName, userSimpleDTO.Password); + if (userDTO_Response != null) + { + if (string.IsNullOrEmpty(userDTO_Response.UserName) == false && userDTO_Response.UserName == userSimpleDTO.UserName) + { + retVal.IsSuccess = true; + retVal.Data = userDTO_Response; + Log.Information($"Sikeres azonosítás! {userSimpleDTO.UserName}"); + } + else + { + var error = $"Nem megfelelo felhasználó vagy jelszó! {userSimpleDTO.UserName}"; + retVal.IsSuccess = false; + retVal.Errors.Add(error); + Log.Information(error); + } + } + else + { + var error = $"Nem megfelelo felhasználó vagy jelszó! {userSimpleDTO.UserName}"; + retVal.IsSuccess = false; + retVal.Errors.Add(error); + Log.Information(error); + } + } + catch (Exception ex) + { + + Log.Error(ex.Message); + } + return retVal; + } [HttpGet("GetRole/{id}")] public async Task> GetRole(int id) diff --git a/src/WorkFlowCheck.API/Downloads/APK/com.nuvolar.wfcapp-Signed.apk b/src/WorkFlowCheck.API/Downloads/APK/com.nuvolar.wfcapp-Signed.apk new file mode 100644 index 0000000..3f19e33 Binary files /dev/null and b/src/WorkFlowCheck.API/Downloads/APK/com.nuvolar.wfcapp-Signed.apk differ diff --git a/src/WorkFlowCheck.API/Program.cs b/src/WorkFlowCheck.API/Program.cs index 118da57..94002b7 100644 --- a/src/WorkFlowCheck.API/Program.cs +++ b/src/WorkFlowCheck.API/Program.cs @@ -97,6 +97,16 @@ if (!Directory.Exists(pdfDirectory)) { Directory.CreateDirectory(pdfDirectory); } +string downloadDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Downloads"); +if (!Directory.Exists(downloadDirectory)) +{ + Directory.CreateDirectory(downloadDirectory); +} +string downloadAPKDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Downloads","APK"); +if (!Directory.Exists(downloadAPKDirectory)) +{ + Directory.CreateDirectory(downloadAPKDirectory); +} //--------------------------------------------------------------------------- diff --git a/src/WorkFlowCheck.BL/Mappings/MapperProfile.cs b/src/WorkFlowCheck.BL/Mappings/MapperProfile.cs index cc8d6fe..3aa463c 100644 --- a/src/WorkFlowCheck.BL/Mappings/MapperProfile.cs +++ b/src/WorkFlowCheck.BL/Mappings/MapperProfile.cs @@ -16,7 +16,9 @@ namespace WorkFlowCheck.BL.Mappings { CreateMap().ForMember(dest => dest.RoleDTO, opt => opt.MapFrom(src => src.UserRoles.Select(ur => ur.Role))); - CreateMap(); + CreateMap() + .ForMember(dest => dest.ParentId, opt => opt.MapFrom(src => src.ParentId)) + .ForMember(dest => dest.ParentRoleName, opt => opt.MapFrom(src => src.Parent != null ? src.Parent.RoleName : null)); CreateMap() .ForMember(dest => dest.RoleDTO, opt => opt.MapFrom(src => src.Role)) diff --git a/src/WorkFlowCheck.BL/Services/Interfaces/IUserService.cs b/src/WorkFlowCheck.BL/Services/Interfaces/IUserService.cs index b2ca4cb..24b66a1 100644 --- a/src/WorkFlowCheck.BL/Services/Interfaces/IUserService.cs +++ b/src/WorkFlowCheck.BL/Services/Interfaces/IUserService.cs @@ -13,6 +13,7 @@ namespace WorkFlowCheck.BL.Services.Interfaces Task> GetAllUserAsync(); Task UpdateUserAsync(UserDTO userDTO); Task Authenticate(string UserName, string Password); + Task AuthenticateNFC(string NFCCode); Task GetRoleAsync(int Id); Task> GetAllRoleAsync(); diff --git a/src/WorkFlowCheck.BL/Services/UserService.cs b/src/WorkFlowCheck.BL/Services/UserService.cs index 16f5154..0c48b45 100644 --- a/src/WorkFlowCheck.BL/Services/UserService.cs +++ b/src/WorkFlowCheck.BL/Services/UserService.cs @@ -116,6 +116,46 @@ namespace WorkFlowCheck.BL.Services } return retVal; } + public async Task AuthenticateNFC(string NFCCode) + { + var retVal = new UserDTO() { RoleDTO = new List() }; + + try + { + var user = await _dbContext.Users + .Include(i => i.UserRoles) + .ThenInclude(i => i.Role) + .Where(w => w.NFCCode == NFCCode && w.NFCActive == true) + .FirstOrDefaultAsync(); + if (user != null) + { + + var userDTO = new UserDTO() + { + Id = user.Id, + UserName = user.UserName, + RoleDTO = new List(), + }; + 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(user); + } + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } public string GenerateJwtToken(UserDTO userDTO) { var jwtSettings = _configuration.GetSection("Jwt"); @@ -236,7 +276,13 @@ namespace WorkFlowCheck.BL.Services { var role = new Role(); role.RoleName = roleDTO.RoleName; - + if (roleDTO.ParentId > 0) + { + role.ParentId = roleDTO.ParentId; + } + role.IsAdmin = roleDTO.IsAdmin; + role.CanDownloadAPK = roleDTO.CanDownloadAPK; + role.CanEnableBlocked = roleDTO.CanEnableBlocked; _dbContext.Roles.Add(role); await _dbContext.SaveChangesAsync(); @@ -248,7 +294,14 @@ namespace WorkFlowCheck.BL.Services if (role != null) { - role.RoleName += roleDTO.RoleName; + role.RoleName = roleDTO.RoleName; + if (roleDTO.ParentId > 0) + { + role.ParentId = roleDTO.ParentId; + } + role.IsAdmin = roleDTO.IsAdmin; + role.CanDownloadAPK = roleDTO.CanDownloadAPK; + role.CanEnableBlocked = roleDTO.CanEnableBlocked; await _dbContext.SaveChangesAsync(); retVal = _mapper.Map(role); @@ -402,7 +455,7 @@ namespace WorkFlowCheck.BL.Services retVal = _mapper.Map(roleCheckListTemplateHeader); } - else + else { retVal = _mapper.Map(roleCheckListTemplateHeader_Exists); } diff --git a/src/WorkFlowCheck.Common/DTO/RoleDTO.cs b/src/WorkFlowCheck.Common/DTO/RoleDTO.cs index 57689c3..e71717e 100644 --- a/src/WorkFlowCheck.Common/DTO/RoleDTO.cs +++ b/src/WorkFlowCheck.Common/DTO/RoleDTO.cs @@ -10,5 +10,16 @@ namespace WorkFlowCheck.Common.DTO [Required(ErrorMessage = "A szabály megnevezĂ©sĂ©nek megadása kötelezĹ‘.")] [DisplayName("MegnevezĂ©s")] public string RoleName { get; set; } = null!; + + public int? ParentId { get; set; } + + [DisplayName("SzĂĽlĹ‘ szerepkör neve")] + public string? ParentRoleName { get; set; } + [DisplayName("Adminisztrátor?")] + public bool IsAdmin { get; set; } + [DisplayName("Ăšj program letöltĂ©s?")] + public bool CanDownloadAPK { get; set; } + [DisplayName("Folyamat blokk/engedĂ©lyez?")] + public bool CanEnableBlocked { get; set; } } } diff --git a/src/WorkFlowCheck.DL/Configurations/RoleTypeConfiguration.cs b/src/WorkFlowCheck.DL/Configurations/RoleTypeConfiguration.cs index 96de3b4..921faf4 100644 --- a/src/WorkFlowCheck.DL/Configurations/RoleTypeConfiguration.cs +++ b/src/WorkFlowCheck.DL/Configurations/RoleTypeConfiguration.cs @@ -15,6 +15,10 @@ namespace WorkFlowCheck.DL.Configurations builder.ToTable("Roles"); builder.HasKey(e => e.Id); builder.Property(e => e.Id).ValueGeneratedOnAdd(); + builder.HasOne(r => r.Parent) + .WithMany(r => r.Children) + .HasForeignKey(r => r.ParentId) + .OnDelete(DeleteBehavior.Restrict); } } diff --git a/src/WorkFlowCheck.DL/Configurations/UserRoleTypeConfiguration.cs b/src/WorkFlowCheck.DL/Configurations/UserRoleTypeConfiguration.cs index 560686e..604551e 100644 --- a/src/WorkFlowCheck.DL/Configurations/UserRoleTypeConfiguration.cs +++ b/src/WorkFlowCheck.DL/Configurations/UserRoleTypeConfiguration.cs @@ -1,10 +1,5 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace WorkFlowCheck.DL.Configurations { diff --git a/src/WorkFlowCheck.DL/Entities/Role.cs b/src/WorkFlowCheck.DL/Entities/Role.cs index a5eb213..8576142 100644 --- a/src/WorkFlowCheck.DL/Entities/Role.cs +++ b/src/WorkFlowCheck.DL/Entities/Role.cs @@ -8,17 +8,22 @@ using WorkFlowCheck.DL.Interfaces; namespace WorkFlowCheck.DL.Entities { - public class Role :ISoftDeletableEntity,IAuditableEntity + public class Role : ISoftDeletableEntity, IAuditableEntity { - public int Id { get; set; } + public int Id { get; set; } public string RoleName { get; set; } = null!; - + public int? ParentId { get; set; } + public virtual Role? Parent { get; set; } + public bool IsAdmin { get; set; } + public bool CanDownloadAPK { get; set; } + public bool CanEnableBlocked { get; set; } + public virtual ICollection Children { get; set; } = new List(); public virtual ICollection UserRoles { get; set; } = new List(); - 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; } + public DateTime LastModAt { get; set; } + public string LastModBy { get; set; } = null!; + public DateTime CreatedAt { get; set; } + public string CreatedBy { get; set; } = null!; } } diff --git a/src/WorkFlowCheck.DL/Migrations/20250406112447_Extend015.Designer.cs b/src/WorkFlowCheck.DL/Migrations/20250406112447_Extend015.Designer.cs new file mode 100644 index 0000000..2b3d030 --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250406112447_Extend015.Designer.cs @@ -0,0 +1,928 @@ +// +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("20250406112447_Extend015")] + partial class Extend015 + { + /// + 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("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckStatus") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DateExecution") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DocumentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEditable") + .HasColumnType("bit"); + + b.Property("IsStorno") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("UserId"); + + b.ToTable("CheckListHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Answer") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListHeaderId") + .HasColumnType("int"); + + b.Property("CheckListTemplateRowId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GuidNumber") + .HasColumnType("uniqueidentifier"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhotoFileName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CheckListHeaderId"); + + b.HasIndex("CheckListTemplateRowId"); + + b.ToTable("CheckListRow", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NumberGenerator1Id") + .HasColumnType("int"); + + b.Property("NumberGenerator2Id") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("NumberGenerator1Id"); + + b.HasIndex("NumberGenerator2Id"); + + b.ToTable("CheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.CheckListTemplateRow", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AnswerType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentId") + .HasColumnType("int"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OperationDescription") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("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("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.DeviceMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DeviceIdFrom") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DeviceIdTo") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ExtraDataJSON") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsReaded") + .HasColumnType("bit"); + + b.Property("Message") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReceiveDate") + .HasColumnType("datetime2"); + + b.Property("SendDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("DeviceIdTo") + .HasDatabaseName("IX_DeviceMessage_DeviceIdTo"); + + b.ToTable("DeviceMessage", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Equipment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EquipmentNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Equipment", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Location", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("DigitFormat") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("GenerateType") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Prefix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PrefixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Suffix") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SuffixSeparator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("NumberGeneratorTemplate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + DigitFormat = "D4", + GenerateType = 0, + LastGeneratedNumber = "", + Prefix = "CHK", + PrefixSeparator = "-", + ShortName = "EllenĹ‘rzĂ©si dokumentum sorszámozása", + Suffix = "", + SuffixSeparator = "-" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.NumberGeneratorTemplateDate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CurrentNumber") + .HasColumnType("int"); + + b.Property("LastGeneratedNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Month") + .HasColumnType("int"); + + b.Property("NumberGeneratorTemplateId") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("NumberGeneratorTemplateId"); + + b.ToTable("NumberGeneratorTemplateDate", (string)null); + + b.HasData( + new + { + Id = 1, + CurrentNumber = 0, + LastGeneratedNumber = "", + Month = 0, + NumberGeneratorTemplateId = 1, + Year = 1 + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CanDownloadAPK") + .HasColumnType("bit"); + + b.Property("CanEnableBlocked") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentId") + .HasColumnType("int"); + + b.Property("RoleName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckListTemplateHeaderId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckListTemplateHeaderId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckListTemplateHeader", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CheckPointId") + .HasColumnType("int"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CheckPointId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleCheckPoint", (string)null); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreatedBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("JwtToken") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastModAt") + .HasColumnType("datetime2"); + + b.Property("LastModBy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("NFCActive") + .HasColumnType("bit"); + + b.Property("NFCCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("Token2FA") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users", (string)null); + + b.HasData( + new + { + Id = 1, + Active = true, + CreatedAt = new DateTime(2025, 4, 6, 11, 24, 45, 650, DateTimeKind.Utc).AddTicks(7691), + CreatedBy = "System", + Email = "admin@nuvolar.hu", + FirstName = "Administrator", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 6, 11, 24, 45, 650, DateTimeKind.Utc).AddTicks(7694), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMKE5TYwthDBuUsTUEO1fBnCR3VdSCmdz47ue0RoVvnkY", + Token2FA = "", + UserName = "admin" + }, + new + { + Id = 2, + Active = true, + CreatedAt = new DateTime(2025, 4, 6, 11, 24, 45, 661, DateTimeKind.Utc).AddTicks(5371), + CreatedBy = "System", + Email = "user@nuvolar.hu", + FirstName = "User", + IsDeleted = false, + JwtToken = "", + LastModAt = new DateTime(2025, 4, 6, 11, 24, 45, 661, DateTimeKind.Utc).AddTicks(5373), + LastModBy = "System", + LastName = "System", + NFCActive = true, + NFCCode = "00000000", + PasswordHash = "eGM0NUREZnJ0ISFFRDIxMPwM2D9sQSj7zmaSBIsOGe0I9hBFwCGPVbyrYMA5EnKG", + Token2FA = "", + UserName = "user" + }); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.UserRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("RoleId") + .HasColumnType("int"); + + b.Property("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.HasOne("WorkFlowCheck.DL.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckListTemplateHeader"); + + b.Navigation("User"); + }); + + 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.CheckListTemplateHeader", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator1") + .WithMany() + .HasForeignKey("NumberGenerator1Id"); + + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGenerator2") + .WithMany() + .HasForeignKey("NumberGenerator2Id"); + + b.Navigation("NumberGenerator1"); + + b.Navigation("NumberGenerator2"); + }); + + 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.NumberGeneratorTemplateDate", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.NumberGeneratorTemplate", "NumberGeneratorTemplate") + .WithMany("NumberGeneratorTemplateDates") + .HasForeignKey("NumberGeneratorTemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("NumberGeneratorTemplate"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Parent"); + }); + + 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.RoleCheckPoint", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.CheckPoint", "CheckPoint") + .WithMany() + .HasForeignKey("CheckPointId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Role") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CheckPoint"); + + 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.NumberGeneratorTemplate", b => + { + b.Navigation("NumberGeneratorTemplateDates"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.Navigation("Children"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("WorkFlowCheck.DL.Entities.User", b => + { + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/20250406112447_Extend015.cs b/src/WorkFlowCheck.DL/Migrations/20250406112447_Extend015.cs new file mode 100644 index 0000000..8e6f5f5 --- /dev/null +++ b/src/WorkFlowCheck.DL/Migrations/20250406112447_Extend015.cs @@ -0,0 +1,111 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace WorkFlowCheck.DL.Migrations +{ + /// + public partial class Extend015 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "CanDownloadAPK", + table: "Roles", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "CanEnableBlocked", + table: "Roles", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsAdmin", + table: "Roles", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ParentId", + table: "Roles", + type: "int", + nullable: true); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 6, 11, 24, 45, 650, DateTimeKind.Utc).AddTicks(7691), new DateTime(2025, 4, 6, 11, 24, 45, 650, DateTimeKind.Utc).AddTicks(7694) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 6, 11, 24, 45, 661, DateTimeKind.Utc).AddTicks(5371), new DateTime(2025, 4, 6, 11, 24, 45, 661, DateTimeKind.Utc).AddTicks(5373) }); + + migrationBuilder.CreateIndex( + name: "IX_Roles_ParentId", + table: "Roles", + column: "ParentId"); + + migrationBuilder.AddForeignKey( + name: "FK_Roles_Roles_ParentId", + table: "Roles", + column: "ParentId", + principalTable: "Roles", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Roles_Roles_ParentId", + table: "Roles"); + + migrationBuilder.DropIndex( + name: "IX_Roles_ParentId", + table: "Roles"); + + migrationBuilder.DropColumn( + name: "CanDownloadAPK", + table: "Roles"); + + migrationBuilder.DropColumn( + name: "CanEnableBlocked", + table: "Roles"); + + migrationBuilder.DropColumn( + name: "IsAdmin", + table: "Roles"); + + migrationBuilder.DropColumn( + name: "ParentId", + table: "Roles"); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 5, 12, 18, 54, 939, DateTimeKind.Utc).AddTicks(1707), new DateTime(2025, 4, 5, 12, 18, 54, 939, DateTimeKind.Utc).AddTicks(1709) }); + + migrationBuilder.UpdateData( + table: "Users", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "CreatedAt", "LastModAt" }, + values: new object[] { new DateTime(2025, 4, 5, 12, 18, 54, 949, DateTimeKind.Utc).AddTicks(6682), new DateTime(2025, 4, 5, 12, 18, 54, 949, DateTimeKind.Utc).AddTicks(6683) }); + } + } +} diff --git a/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs b/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs index a7a9910..b5d0227 100644 --- a/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs +++ b/src/WorkFlowCheck.DL/Migrations/AppDbContextModelSnapshot.cs @@ -510,6 +510,12 @@ namespace WorkFlowCheck.DL.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("CanDownloadAPK") + .HasColumnType("bit"); + + b.Property("CanEnableBlocked") + .HasColumnType("bit"); + b.Property("CreatedAt") .HasColumnType("datetime2"); @@ -517,6 +523,9 @@ namespace WorkFlowCheck.DL.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); + b.Property("IsAdmin") + .HasColumnType("bit"); + b.Property("IsDeleted") .HasColumnType("bit"); @@ -527,12 +536,17 @@ namespace WorkFlowCheck.DL.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); + b.Property("ParentId") + .HasColumnType("int"); + b.Property("RoleName") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); + b.HasIndex("ParentId"); + b.ToTable("Roles", (string)null); }); @@ -659,13 +673,13 @@ namespace WorkFlowCheck.DL.Migrations { Id = 1, Active = true, - CreatedAt = new DateTime(2025, 4, 5, 12, 18, 54, 939, DateTimeKind.Utc).AddTicks(1707), + CreatedAt = new DateTime(2025, 4, 6, 11, 24, 45, 650, DateTimeKind.Utc).AddTicks(7691), CreatedBy = "System", Email = "admin@nuvolar.hu", FirstName = "Administrator", IsDeleted = false, JwtToken = "", - LastModAt = new DateTime(2025, 4, 5, 12, 18, 54, 939, DateTimeKind.Utc).AddTicks(1709), + LastModAt = new DateTime(2025, 4, 6, 11, 24, 45, 650, DateTimeKind.Utc).AddTicks(7694), LastModBy = "System", LastName = "System", NFCActive = true, @@ -678,13 +692,13 @@ namespace WorkFlowCheck.DL.Migrations { Id = 2, Active = true, - CreatedAt = new DateTime(2025, 4, 5, 12, 18, 54, 949, DateTimeKind.Utc).AddTicks(6682), + CreatedAt = new DateTime(2025, 4, 6, 11, 24, 45, 661, DateTimeKind.Utc).AddTicks(5371), CreatedBy = "System", Email = "user@nuvolar.hu", FirstName = "User", IsDeleted = false, JwtToken = "", - LastModAt = new DateTime(2025, 4, 5, 12, 18, 54, 949, DateTimeKind.Utc).AddTicks(6683), + LastModAt = new DateTime(2025, 4, 6, 11, 24, 45, 661, DateTimeKind.Utc).AddTicks(5373), LastModBy = "System", LastName = "System", NFCActive = true, @@ -809,6 +823,16 @@ namespace WorkFlowCheck.DL.Migrations b.Navigation("NumberGeneratorTemplate"); }); + modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => + { + b.HasOne("WorkFlowCheck.DL.Entities.Role", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Parent"); + }); + modelBuilder.Entity("WorkFlowCheck.DL.Entities.RoleCheckListTemplateHeader", b => { b.HasOne("WorkFlowCheck.DL.Entities.CheckListTemplateHeader", "CheckListTemplateHeader") @@ -886,6 +910,8 @@ namespace WorkFlowCheck.DL.Migrations modelBuilder.Entity("WorkFlowCheck.DL.Entities.Role", b => { + b.Navigation("Children"); + b.Navigation("UserRoles"); }); diff --git a/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml b/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml index 2bb731b..3e37e44 100644 --- a/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml +++ b/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml @@ -15,11 +15,39 @@
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
@@ -34,47 +62,13 @@ const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); var formData = getFormAsNestedObject('#RoleForm'); const $form = $('#RoleForm'); - - + formData.RoleDTO.IsAdmin = $('#RoleForm input[name="RoleDTO.IsAdmin"]').is(':checked'); + formData.RoleDTO.CanDownloadAPK = $('#RoleForm input[name="RoleDTO.CanDownloadAPK"]').is(':checked'); + formData.RoleDTO.CanEnableBlocked = $('#RoleForm input[name="RoleDTO.CanEnableBlocked"]').is(':checked'); if ($form.valid()) { - $.ajax({ - url: $('#RoleEditPostUrl').val(), - type: 'POST', - headers: { - 'X-CSRF-TOKEN': csrfToken, - 'Content-Type': 'application/json' - }, - data: JSON.stringify(formData.RoleDTO), - success: function (response) { - if (response.success) - { - showMessageModal({ - title: 'Figyelmem!', - message: 'Sikeres mentés.', - okText: 'Értettem' - }); - } - else - { - showMessageModal({ - title: 'Figyelmem, HIBA!', - message: 'Sikertelen mentés.', - okText: 'Értettem' - }); - } - }, - error: function (xhr, status, error) { - // Hiba esetén - console.error("Hiba: ", error); - showMessageModal({ - title: 'Hiba!', - message: 'A mentés NEM sikerült!', - okText: 'Értettem' - }); - } - }); + saveEntity(csrfToken, formData.RoleDTO, $('#RoleEditPostUrl').val()); } else { $form[0].reportValidity(); diff --git a/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml.cs b/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml.cs index def4308..511574b 100644 --- a/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml.cs +++ b/src/WorkFlowCheck.Web/Pages/UserAndRole/RoleEditPage.cshtml.cs @@ -1,7 +1,9 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.Mvc.Rendering; using Serilog; using WorkFlowCheck.Common.DTO; +using WorkFlowCheck.Web.Services; using WorkFlowCheck.Web.Services.Interfaces; namespace WorkFlowCheck.Web.Pages.UserAndRole @@ -13,6 +15,9 @@ namespace WorkFlowCheck.Web.Pages.UserAndRole [BindProperty] public RoleDTO RoleDTO { get; set; } + + [BindProperty] + public List Parents { get; set; } public RoleEditPageModel(ILogger logger, IUserService userService) { @@ -22,6 +27,7 @@ namespace WorkFlowCheck.Web.Pages.UserAndRole public async Task OnGet(int id) { + await InitSelectItems(); RoleDTO = await _userService.GetRole(id); } public async Task OnPostSave([FromBody] RoleDTO roleDTO) @@ -45,5 +51,15 @@ namespace WorkFlowCheck.Web.Pages.UserAndRole return new JsonResult(new { success = false }); } + private async Task InitSelectItems() + { + var roles = await _userService.GetAllRoles(); + this.Parents = new List(); + Parents.Add(new SelectListItem() { Value = "-1", Text = "NINCS" }); + foreach (var role in roles) + { + Parents.Add(new SelectListItem() { Value = role.Id.ToString(), Text = role.RoleName }); + } + } } } diff --git a/src/WorkFlowCheck.Web/Pages/UserAndRole/RolePage.cshtml b/src/WorkFlowCheck.Web/Pages/UserAndRole/RolePage.cshtml index d01de11..4fc7857 100644 --- a/src/WorkFlowCheck.Web/Pages/UserAndRole/RolePage.cshtml +++ b/src/WorkFlowCheck.Web/Pages/UserAndRole/RolePage.cshtml @@ -18,14 +18,22 @@ ID - @DisplayNameHelper.GetDisplayName("RoleName", typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.RoleName), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.ParentRoleName), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.IsAdmin), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.CanEnableBlocked), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.CanDownloadAPK), typeof(RoleDTO)) Action ID - @DisplayNameHelper.GetDisplayName("RoleName", typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.RoleName), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.ParentRoleName), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.IsAdmin), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.CanEnableBlocked), typeof(RoleDTO)) + @DisplayNameHelper.GetDisplayName(nameof(RoleDTO.CanDownloadAPK), typeof(RoleDTO)) Action @@ -43,6 +51,37 @@ columns: [ { data: "id" }, { data: "roleName" }, + { data: "parentRoleName" }, + { + data: "isAdmin", + searchable: false, + sortable: false, + className: "text-center", + render: function ( data, type, row ) { + return renderCheckBox(data); + } + + }, + { + data: "canEnableBlocked", + searchable: false, + sortable: false, + className: "text-center", + render: function ( data, type, row ) { + return renderCheckBox(data); + } + + }, + { + data: "canDownloadAPK", + searchable: false, + sortable: false, + className: "text-center", + render: function ( data, type, row ) { + return renderCheckBox(data); + } + + }, { data: null, render: function (data, type, row) { return renderActionButtons(row.id); }} @@ -53,7 +92,7 @@ "visible": false }, { - "targets": 2, + "targets": 6, "className": "text-center", "width": "10%" }