diff --git a/AsbCloudApp/Data/PermissionDto.cs b/AsbCloudApp/Data/PermissionDto.cs index 9bedc10a..7145ce70 100644 --- a/AsbCloudApp/Data/PermissionDto.cs +++ b/AsbCloudApp/Data/PermissionDto.cs @@ -1,8 +1,7 @@ namespace AsbCloudApp.Data { - public class PermissionDto : IId + public class PermissionDto { - public int Id { get; set; } public int IdUserRole { get; set; } public int IdPermission { get; set; } public int PermissionValue { get; set; } diff --git a/AsbCloudApp/Data/PermissionInfoDto.cs b/AsbCloudApp/Data/PermissionInfoDto.cs new file mode 100644 index 00000000..bcbe06ca --- /dev/null +++ b/AsbCloudApp/Data/PermissionInfoDto.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace AsbCloudApp.Data +{ + public class PermissionInfoDto : IId + { + public int Id { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public IDictionary BitDescription { get; set; } + } +} \ No newline at end of file diff --git a/AsbCloudApp/Services/IPermissionService.cs b/AsbCloudApp/Services/IPermissionService.cs new file mode 100644 index 00000000..93f4f595 --- /dev/null +++ b/AsbCloudApp/Services/IPermissionService.cs @@ -0,0 +1,17 @@ +using AsbCloudApp.Data; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudApp.Services +{ + public interface IPermissionService + { + Task> GetPermissionsAsync(int idRole, CancellationToken token); + Task InsertPermissionAsync(PermissionDto dto, CancellationToken token); + Task InsertPermissionsRangeAsync(IEnumerable dtos, CancellationToken token); + Task UpdatePermissionAsync(int id, PermissionDto dto, CancellationToken token); + Task DeletePermissionAsync(int idRole, int idPermission, CancellationToken token); + + } +} \ No newline at end of file diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 41e67d43..745165f3 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -39,8 +39,8 @@ namespace AsbCloudDb.Model public virtual DbSet DrillParams { get; set; } public virtual DbSet DrillFlowChart { get; set; } public virtual DbSet RelationUserUserRoles { get; set; } - public virtual DbSet RelationUserRolesPermissions { get; set; } - public virtual DbSet Permissions { get; set; } + public virtual DbSet Permissions { get; set; } + public virtual DbSet PermissionInfos { get; set; } //var options = new DbContextOptionsBuilder() // .UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True") diff --git a/AsbCloudDb/Model/IAsbCloudDbContext.cs b/AsbCloudDb/Model/IAsbCloudDbContext.cs index c17261ad..f0125ea9 100644 --- a/AsbCloudDb/Model/IAsbCloudDbContext.cs +++ b/AsbCloudDb/Model/IAsbCloudDbContext.cs @@ -37,8 +37,8 @@ namespace AsbCloudDb.Model DbSet DrillParams { get; set; } DbSet DrillFlowChart { get; set; } DbSet RelationUserUserRoles { get; set; } - DbSet RelationUserRolesPermissions { get; set; } - DbSet Permissions { get; set; } + DbSet Permissions { get; set; } + DbSet PermissionInfos { get; set; } DatabaseFacade Database { get; } diff --git a/AsbCloudDb/Model/PermissionInfo.cs b/AsbCloudDb/Model/PermissionInfo.cs index 901400a7..d159086e 100644 --- a/AsbCloudDb/Model/PermissionInfo.cs +++ b/AsbCloudDb/Model/PermissionInfo.cs @@ -6,7 +6,7 @@ using System.ComponentModel.DataAnnotations.Schema; namespace AsbCloudDb.Model { [Table("t_permission_info"), Comment("Разрешения на доступ к данным")] - public class PermissionInfo + public class PermissionInfo : IId { [Key] [Column("id")] diff --git a/AsbCloudDbDemoData/DbDemoDataFiller.cs b/AsbCloudDbDemoData/DbDemoDataFiller.cs index 7a1d5f8b..fb991f2f 100644 --- a/AsbCloudDbDemoData/DbDemoDataFiller.cs +++ b/AsbCloudDbDemoData/DbDemoDataFiller.cs @@ -169,7 +169,7 @@ namespace AsbCloudDevOperations new WellOperation { Id = 76341, IdWell = 1, IdWellSectionType = 1, IdCategory = 1047, IdType = 0, DepthEnd = 1250, DateStart = DateTime.Parse("2021-08-26 11:30"), DurationHours = 3.5 } ); - demoContext.Permissions.AddRange( + demoContext.PermissionInfos.AddRange( new PermissionInfo() { Id = 1, @@ -186,7 +186,7 @@ namespace AsbCloudDevOperations } ); - demoContext.RelationUserRolesPermissions.AddRange( + demoContext.Permissions.AddRange( new Permission() { IdUserRole = 2, diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index d7d06ba9..e1900270 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -58,6 +58,8 @@ namespace AsbCloudInfrastructure services.AddTransient, UserRoleService>(); services.AddTransient, CrudServiceBase>(); services.AddTransient, DrillParamsService>(); + services.AddTransient(); + services.AddTransient, CrudServiceBase>(); // TelemetryData services services.AddTransient, TelemetryDataSaubService>(); diff --git a/AsbCloudInfrastructure/Services/PermissionService.cs b/AsbCloudInfrastructure/Services/PermissionService.cs new file mode 100644 index 00000000..05cf9bfe --- /dev/null +++ b/AsbCloudInfrastructure/Services/PermissionService.cs @@ -0,0 +1,66 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Services; +using AsbCloudDb.Model; +using Mapster; +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Services +{ + public class PermissionService : IPermissionService + { + private readonly IAsbCloudDbContext db; + + public PermissionService(IAsbCloudDbContext db) + { + this.db = db; + } + + + public async Task> GetPermissionsAsync(int idRole, CancellationToken token) + { + var entities = await (from p in db.Permissions + where p.IdUserRole == idRole + select p) + .ToListAsync(token).ConfigureAwait(false); + var dto = entities.Adapt(); + return dto; + } + + public Task InsertPermissionAsync(PermissionDto dto, CancellationToken token) + { + var entity = dto.Adapt(); + db.Permissions.Add(entity); + return db.SaveChangesAsync(token); + } + + public Task InsertPermissionsRangeAsync(IEnumerable dtos, CancellationToken token) + { + var entities = dtos.Adapt(); + + db.Permissions.AddRange(entities); + return db.SaveChangesAsync(token); + } + + public Task UpdatePermissionAsync(int id, PermissionDto dto, CancellationToken token) + { + var entity = dto.Adapt(); + db.Permissions.Update(entity); + return db.SaveChangesAsync(token); + } + + public Task DeletePermissionAsync(int idRole, int idPermission, CancellationToken token) + { + var entities = db.Permissions.AsNoTracking() + .Where(e => e.IdUserRole == idRole && e.IdPermission == idPermission) + .ToList(); + if (!entities.Any()) + return Task.FromResult(0); + db.Permissions.RemoveRange(entities); + return db.SaveChangesAsync(token); + } + } +} \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/AdminPermissionController.cs b/AsbCloudWebApi/Controllers/AdminPermissionController.cs new file mode 100644 index 00000000..508793a2 --- /dev/null +++ b/AsbCloudWebApi/Controllers/AdminPermissionController.cs @@ -0,0 +1,23 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace AsbCloudWebApi.Controllers +{ + [Route("api/admin/user/permission")] + [ApiController] + [Authorize] + public class AdminPermissionController : ControllerBase + { + private readonly IPermissionService permissionService; + private readonly ICrudService permissionInfoService; + + public AdminPermissionController(IPermissionService permissionService, + ICrudService permissionInfoService) + { + this.permissionService = permissionService; + this.permissionInfoService = permissionInfoService; + } + } +} \ No newline at end of file