From 611b612177f90f37e0f0676594681f7c578ec446 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 28 Dec 2023 11:43:48 +0800 Subject: [PATCH] =?UTF-8?q?fix=20sys=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dlis.Jinko.Yikatong.sln | 7 + .../Implements/BusinessPlaceService.cs | 2 +- .../Services/Implements/MealUserService.cs | 2 +- .../Entities/DevicePermissionEntity.cs | 4 +- .../Entities/MenuEntity.cs | 4 +- .../Entities/MenuPermissionEntity.cs | 4 +- Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs | 16 +++ Src/Dlhis.Entity/Sys/Entities/UserEntity.cs | 38 +++++ .../Enums/DevicePermissionTypeEnumType.cs | 2 +- .../{Permission => Sys}/Enums/MenuEnumType.cs | 2 +- .../Enums/MenuPermissionTypeEnumType.cs | 2 +- .../Enums/PlatformEnumType.cs | 2 +- .../Menu/Controllers/MenusController.cs | 6 +- .../MenuPermissionAssignmentRequest.cs | 2 +- .../Menu/Request/SaveMenuRequest.cs | 2 +- .../Menu/Response/MenuResponse.cs | 2 +- .../Menu/Services/IMenuService.cs | 3 +- .../Menu/Services/Implements/MenuService.cs | 132 +++++++++++++----- Src/Dlhis.Permission/Program.cs | 17 ++- Src/Dlhis.User/Dlhis.User.csproj | 23 +++ .../Identity/Controllers/RolesController.cs | 27 ++++ .../Identity/Controllers/UsersController.cs | 32 +++++ .../Identity/Request/RolePageRequest.cs | 7 + .../Identity/Request/UserPageRequest.cs | 7 + .../Identity/Response/RoleRespone.cs | 10 ++ .../Identity/Response/UserResponse.cs | 28 ++++ .../Identity/Services/IRoleService.cs | 10 ++ .../Identity/Services/IUserService.cs | 12 ++ .../Services/Implements/UserService.cs | 41 ++++++ Src/Dlhis.User/Program.cs | 21 +++ Src/Dlhis.User/Properties/launchSettings.json | 13 ++ Src/Dlhis.User/SqlSugarPack.cs | 14 ++ Src/Dlhis.User/appsettings.Development.json | 35 +++++ Src/Dlhis.User/appsettings.json | 73 ++++++++++ 34 files changed, 542 insertions(+), 60 deletions(-) rename Src/Dlhis.Entity/{Permission => Sys}/Entities/DevicePermissionEntity.cs (91%) rename Src/Dlhis.Entity/{Permission => Sys}/Entities/MenuEntity.cs (96%) rename Src/Dlhis.Entity/{Permission => Sys}/Entities/MenuPermissionEntity.cs (91%) create mode 100644 Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs create mode 100644 Src/Dlhis.Entity/Sys/Entities/UserEntity.cs rename Src/Dlhis.Entity/{Permission => Sys}/Enums/DevicePermissionTypeEnumType.cs (89%) rename Src/Dlhis.Entity/{Permission => Sys}/Enums/MenuEnumType.cs (91%) rename Src/Dlhis.Entity/{Permission => Sys}/Enums/MenuPermissionTypeEnumType.cs (92%) rename Src/Dlhis.Entity/{Permission => Sys}/Enums/PlatformEnumType.cs (89%) create mode 100644 Src/Dlhis.User/Dlhis.User.csproj create mode 100644 Src/Dlhis.User/Identity/Controllers/RolesController.cs create mode 100644 Src/Dlhis.User/Identity/Controllers/UsersController.cs create mode 100644 Src/Dlhis.User/Identity/Request/RolePageRequest.cs create mode 100644 Src/Dlhis.User/Identity/Request/UserPageRequest.cs create mode 100644 Src/Dlhis.User/Identity/Response/RoleRespone.cs create mode 100644 Src/Dlhis.User/Identity/Response/UserResponse.cs create mode 100644 Src/Dlhis.User/Identity/Services/IRoleService.cs create mode 100644 Src/Dlhis.User/Identity/Services/IUserService.cs create mode 100644 Src/Dlhis.User/Identity/Services/Implements/UserService.cs create mode 100644 Src/Dlhis.User/Program.cs create mode 100644 Src/Dlhis.User/Properties/launchSettings.json create mode 100644 Src/Dlhis.User/SqlSugarPack.cs create mode 100644 Src/Dlhis.User/appsettings.Development.json create mode 100644 Src/Dlhis.User/appsettings.json diff --git a/Dlis.Jinko.Yikatong.sln b/Dlis.Jinko.Yikatong.sln index 604a550b..39e9b47c 100644 --- a/Dlis.Jinko.Yikatong.sln +++ b/Dlis.Jinko.Yikatong.sln @@ -25,6 +25,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scheduled", "Scheduled", "{ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Basic", "Src\Dlhis.Basic\Dlhis.Basic.csproj", "{D1F81CB7-F3EF-4196-A751-468248368020}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.User", "Src\Dlhis.User\Dlhis.User.csproj", "{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -59,6 +61,10 @@ Global {D1F81CB7-F3EF-4196-A751-468248368020}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1F81CB7-F3EF-4196-A751-468248368020}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1F81CB7-F3EF-4196-A751-468248368020}.Release|Any CPU.Build.0 = Release|Any CPU + {9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -70,6 +76,7 @@ Global {4C1FADD9-8AFB-4087-9E52-EE6D6523ED38} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A} {FD8D38C5-0827-49D1-A0BA-7707FBFDA2EC} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A} {D1F81CB7-F3EF-4196-A751-468248368020} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A} + {9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0} = {57074FD8-1A2F-40C7-8476-001778A3F65D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7439494A-E2FD-4FEA-8ABF-74AE57A4A5A0} diff --git a/Src/Dlhis.Basic/BusinessPlace/Services/Implements/BusinessPlaceService.cs b/Src/Dlhis.Basic/BusinessPlace/Services/Implements/BusinessPlaceService.cs index 00766787..4c4538cc 100644 --- a/Src/Dlhis.Basic/BusinessPlace/Services/Implements/BusinessPlaceService.cs +++ b/Src/Dlhis.Basic/BusinessPlace/Services/Implements/BusinessPlaceService.cs @@ -20,7 +20,7 @@ public class BusinessPlaceService : IBusinessPlaceService _dbContext = dbContext; } - [IgnoreTenant] + public async Task> GetPageAsync(BusinessPlacePageRequest request) { var page = await _dbContext.Queryable() diff --git a/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs b/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs index 6b1e3f17..a26f6a42 100644 --- a/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs +++ b/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs @@ -28,7 +28,7 @@ public class MealUserService : IMealUserService public async Task AddAsync(MealUserAddRequest request) { //todo 获取档案信息 - + var entity = new CanteenUserEntity { UserId = request.UserId, diff --git a/Src/Dlhis.Entity/Permission/Entities/DevicePermissionEntity.cs b/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs similarity index 91% rename from Src/Dlhis.Entity/Permission/Entities/DevicePermissionEntity.cs rename to Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs index a475a9be..66c2eff9 100644 --- a/Src/Dlhis.Entity/Permission/Entities/DevicePermissionEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs @@ -1,8 +1,8 @@ -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Enums; using Kurisu.Core.DataAccess.Entity; using SqlSugar; -namespace Dlhis.Entity.Permission.Entities; +namespace Dlhis.Entity.Sys.Entities; /// /// 设备权限 diff --git a/Src/Dlhis.Entity/Permission/Entities/MenuEntity.cs b/Src/Dlhis.Entity/Sys/Entities/MenuEntity.cs similarity index 96% rename from Src/Dlhis.Entity/Permission/Entities/MenuEntity.cs rename to Src/Dlhis.Entity/Sys/Entities/MenuEntity.cs index 8cd474df..a0946177 100644 --- a/Src/Dlhis.Entity/Permission/Entities/MenuEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/MenuEntity.cs @@ -1,8 +1,8 @@ -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Enums; using SqlSugar; using SqlSugar.DbConvert; -namespace Dlhis.Entity.Permission.Entities; +namespace Dlhis.Entity.Sys.Entities; /// /// 菜单 diff --git a/Src/Dlhis.Entity/Permission/Entities/MenuPermissionEntity.cs b/Src/Dlhis.Entity/Sys/Entities/MenuPermissionEntity.cs similarity index 91% rename from Src/Dlhis.Entity/Permission/Entities/MenuPermissionEntity.cs rename to Src/Dlhis.Entity/Sys/Entities/MenuPermissionEntity.cs index 01f34b98..beb83bb2 100644 --- a/Src/Dlhis.Entity/Permission/Entities/MenuPermissionEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/MenuPermissionEntity.cs @@ -1,9 +1,9 @@ -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Enums; using Kurisu.Core.DataAccess.Entity; using SqlSugar; using SqlSugar.DbConvert; -namespace Dlhis.Entity.Permission.Entities; +namespace Dlhis.Entity.Sys.Entities; /// /// 菜单权限 diff --git a/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs b/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs new file mode 100644 index 00000000..cd363143 --- /dev/null +++ b/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs @@ -0,0 +1,16 @@ +using SqlSugar; + +namespace Dlhis.Entity.Sys.Entities; + +[SugarTable(TableName = "Roles")] +public class RoleEntity +{ + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + public string Name { get; set; } + + public string NormalizedName { get; set; } + + public string ConcurrencyStamp { get; set; } +} diff --git a/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs b/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs new file mode 100644 index 00000000..13168e7b --- /dev/null +++ b/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs @@ -0,0 +1,38 @@ +using SqlSugar; + +namespace Dlhis.Entity.Sys.Entities; + +[SugarTable("Users")] +public class UserEntity +{ + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + public string UserName { get; set; } + + public string NormalizedUserName { get; set; } + + public string Email { get; set; } + + public string NormalizedEmail { get; set; } + + public bool EmailConfirmed { get; set; } + + public string PasswordHash { get; set; } + + public string SecurityStamp { get; set; } + + public string ConcurrencyStamp { get; set; } + + public string PhoneNumber { get; set; } + + public string PhoneNumberConfirmed { get; set; } + + public bool TwoFactorEnabled { get; set; } + + public bool LockoutEnd { get; set; } + + public bool LockoutEnabled { get; set; } + + public int AccessFailedCount { get; set; } +} diff --git a/Src/Dlhis.Entity/Permission/Enums/DevicePermissionTypeEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/DevicePermissionTypeEnumType.cs similarity index 89% rename from Src/Dlhis.Entity/Permission/Enums/DevicePermissionTypeEnumType.cs rename to Src/Dlhis.Entity/Sys/Enums/DevicePermissionTypeEnumType.cs index 7a0a692f..c956942b 100644 --- a/Src/Dlhis.Entity/Permission/Enums/DevicePermissionTypeEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/DevicePermissionTypeEnumType.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace Dlhis.Entity.Permission.Enums; +namespace Dlhis.Entity.Sys.Enums; /// /// 设备权限类型 diff --git a/Src/Dlhis.Entity/Permission/Enums/MenuEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/MenuEnumType.cs similarity index 91% rename from Src/Dlhis.Entity/Permission/Enums/MenuEnumType.cs rename to Src/Dlhis.Entity/Sys/Enums/MenuEnumType.cs index bd0e32e7..a6766b54 100644 --- a/Src/Dlhis.Entity/Permission/Enums/MenuEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/MenuEnumType.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace Dlhis.Entity.Permission.Enums; +namespace Dlhis.Entity.Sys.Enums; /// /// 菜单类型 diff --git a/Src/Dlhis.Entity/Permission/Enums/MenuPermissionTypeEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/MenuPermissionTypeEnumType.cs similarity index 92% rename from Src/Dlhis.Entity/Permission/Enums/MenuPermissionTypeEnumType.cs rename to Src/Dlhis.Entity/Sys/Enums/MenuPermissionTypeEnumType.cs index 8ded493b..6413fb12 100644 --- a/Src/Dlhis.Entity/Permission/Enums/MenuPermissionTypeEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/MenuPermissionTypeEnumType.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace Dlhis.Entity.Permission.Enums; +namespace Dlhis.Entity.Sys.Enums; /// /// 权限类型 diff --git a/Src/Dlhis.Entity/Permission/Enums/PlatformEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/PlatformEnumType.cs similarity index 89% rename from Src/Dlhis.Entity/Permission/Enums/PlatformEnumType.cs rename to Src/Dlhis.Entity/Sys/Enums/PlatformEnumType.cs index 8f393dae..c2b2e107 100644 --- a/Src/Dlhis.Entity/Permission/Enums/PlatformEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/PlatformEnumType.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace Dlhis.Entity.Permission.Enums; +namespace Dlhis.Entity.Sys.Enums; /// /// 平台类型 diff --git a/Src/Dlhis.Permission/Menu/Controllers/MenusController.cs b/Src/Dlhis.Permission/Menu/Controllers/MenusController.cs index 7d1bac5c..bc162d0b 100644 --- a/Src/Dlhis.Permission/Menu/Controllers/MenusController.cs +++ b/Src/Dlhis.Permission/Menu/Controllers/MenusController.cs @@ -1,11 +1,10 @@ -using Dlhis.Entity.Permission.Enums; -using Kurisu.SqlSugar.Attributes; -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using Dlhis.Sys.Menu.Services; using Dlhis.Sys.Menu.Response; using Dlhis.Sys.Menu.Request; +using Dlhis.Entity.Sys.Enums; namespace Dlhis.Sys.Menu.Controllers; @@ -40,7 +39,6 @@ public class MenusController : ControllerBase /// /// /// - [Transactional] [HttpPost] public async Task Save(SaveMenuRequest request) { diff --git a/Src/Dlhis.Permission/Menu/Request/MenuPermissionAssignmentRequest.cs b/Src/Dlhis.Permission/Menu/Request/MenuPermissionAssignmentRequest.cs index 427b6fbe..d7945625 100644 --- a/Src/Dlhis.Permission/Menu/Request/MenuPermissionAssignmentRequest.cs +++ b/Src/Dlhis.Permission/Menu/Request/MenuPermissionAssignmentRequest.cs @@ -1,5 +1,5 @@ using System.ComponentModel.DataAnnotations; -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Enums; namespace Dlhis.Sys.Menu.Request; diff --git a/Src/Dlhis.Permission/Menu/Request/SaveMenuRequest.cs b/Src/Dlhis.Permission/Menu/Request/SaveMenuRequest.cs index b5e03cbf..4e72baab 100644 --- a/Src/Dlhis.Permission/Menu/Request/SaveMenuRequest.cs +++ b/Src/Dlhis.Permission/Menu/Request/SaveMenuRequest.cs @@ -1,5 +1,5 @@ using System.ComponentModel.DataAnnotations; -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Enums; namespace Dlhis.Sys.Menu.Request; diff --git a/Src/Dlhis.Permission/Menu/Response/MenuResponse.cs b/Src/Dlhis.Permission/Menu/Response/MenuResponse.cs index 819fd886..cc1400ab 100644 --- a/Src/Dlhis.Permission/Menu/Response/MenuResponse.cs +++ b/Src/Dlhis.Permission/Menu/Response/MenuResponse.cs @@ -1,4 +1,4 @@ -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Enums; namespace Dlhis.Sys.Menu.Response; diff --git a/Src/Dlhis.Permission/Menu/Services/IMenuService.cs b/Src/Dlhis.Permission/Menu/Services/IMenuService.cs index df8c6083..5e19b56c 100644 --- a/Src/Dlhis.Permission/Menu/Services/IMenuService.cs +++ b/Src/Dlhis.Permission/Menu/Services/IMenuService.cs @@ -1,4 +1,5 @@ -using Dlhis.Entity.Permission.Enums; + +using Dlhis.Entity.Sys.Enums; using Dlhis.Sys.Menu.Request; using Dlhis.Sys.Menu.Response; diff --git a/Src/Dlhis.Permission/Menu/Services/Implements/MenuService.cs b/Src/Dlhis.Permission/Menu/Services/Implements/MenuService.cs index 1e8deb37..5606c08b 100644 --- a/Src/Dlhis.Permission/Menu/Services/Implements/MenuService.cs +++ b/Src/Dlhis.Permission/Menu/Services/Implements/MenuService.cs @@ -1,5 +1,5 @@ -using Dlhis.Entity.Permission.Entities; -using Dlhis.Entity.Permission.Enums; +using Dlhis.Entity.Sys.Entities; +using Dlhis.Entity.Sys.Enums; using Dlhis.Sys.Menu.Request; using Dlhis.Sys.Menu.Response; using Kurisu.AspNetCore.Utils.Extensions; @@ -23,10 +23,10 @@ public class MenuService : IMenuService public async Task> GetListAsync(PlatformEnumType platform) { var result = await _dbContext.Queryable() - .Where(x => x.Platform == platform) - .OrderBy(x => x.Sequence) - .Select() - .ToListAsync(); + .Where(x => x.Platform == platform) + .OrderBy(x => x.Sequence) + .Select() + .ToListAsync(); var top = result.Where(x => x.PCode.IsEmpty()).ToList(); foreach (var menu in top) @@ -64,17 +64,11 @@ public class MenuService : IMenuService { //修改下级的PCode为当前的code var menus = await _dbContext.Queryable().Where(x => x.PCode == beforeCode).ToListAsync(); - menus.ForEach(x => - { - x.PCode = pcode; - }); + menus.ForEach(x => { x.PCode = pcode; }); //修改权限code为当前的code,避免权限丢失 var permissions = await _dbContext.Queryable().Where(x => x.Code == beforeCode).ToListAsync(); - permissions.ForEach(x => - { - x.Code = pcode; - }); + permissions.ForEach(x => { x.Code = pcode; }); await _dbContext.UpdateAsync(menus); await _dbContext.UpdateAsync(permissions); @@ -87,9 +81,9 @@ public class MenuService : IMenuService //清空覆盖 var permissionsToDelete = await _dbContext.Queryable() - .Where(x => x.UniqueType == request.UniqueType) - .Where(x => x.UniqueValue == request.UniqueValue) - .ToListAsync(); + .Where(x => x.UniqueType == request.UniqueType) + .Where(x => x.UniqueValue == request.UniqueValue) + .ToListAsync(); //触发日志记录 await _dbContext.DeleteAsync(permissionsToDelete); @@ -98,7 +92,6 @@ public class MenuService : IMenuService Code = x, UniqueType = request.UniqueType, UniqueValue = request.UniqueValue - }).ToList(); @@ -110,24 +103,78 @@ public class MenuService : IMenuService throw new NotImplementedException(); } - public Task> GetAllAssignmentPermissionsAsync() + public async Task> GetAllAssignmentPermissionsAsync() { - throw new NotImplementedException(); + var all = await GetAllAssignmentCodesAsync(); + + return await _dbContext.Queryable().Where(x => all.Contains(x.Code)).Select(x => x.Permission).ToListAsync(); } - public Task> GetCurrentMenusAsync() + public async Task> GetCurrentMenusAsync() { - throw new NotImplementedException(); + //我能看到的权限code,非permissions + var allCodes = await GetAllAssignmentCodesAsync(); + if (!allCodes.Any()) + { + return await GetListAsync(PlatformEnumType.PCAdmin); + } + + var allMenus = await _dbContext.Queryable() + .Where(x => x.Platform == PlatformEnumType.PCAdmin) + .Where(x => x.Visible) + .Where(x => allCodes.Contains(x.Code)) + .Select() + .ToListAsync(); + + //获取顶级数据 + var menus = await _dbContext.Queryable() + .Where(x => x.Platform == PlatformEnumType.PCAdmin) + .Where(x => x.Visible) + .Where(x => string.IsNullOrEmpty(x.PCode)) + .Select() + .ToListAsync(); + + foreach (var menu in menus) + { + RecursionGetNext(menu, allMenus); + } + + menus.RemoveAll(x => !x.Items.Any()); + return menus; } - public Task IsPass(IEnumerable p) + public async Task IsPass(IEnumerable p) { - throw new NotImplementedException(); + var permissions = await GetAllAssignmentPermissionsAsync(); + return permissions.Count == 0 || permissions.All(x => p.Contains(x)); } - public Task ResetAsync(List request) + public async Task ResetAsync(List request) { - throw new NotImplementedException(); + var menus = await _dbContext.Queryable().Where(x => x.Platform == PlatformEnumType.PCAdmin).ToListAsync(); + await _dbContext.Client.Deleteable(menus).ExecuteCommandAsync(); + + foreach (var item in request) + { + await SaveMenuAsync(item); + if (item.Items?.Any() == true) + { + await RecursionSaveNextAsync(item.Items); + } + } + + //递归处理下一级 + async Task RecursionSaveNextAsync(List menus) + { + foreach (var item in menus) + { + await SaveMenuAsync(item); + if (item.Items?.Any() == true) + { + await RecursionSaveNextAsync(item.Items); + } + } + } } @@ -145,22 +192,22 @@ public class MenuService : IMenuService { //检查重复code var exists = await _dbContext.Queryable() - .Where(x => x.Code == request.Code) - .WhereIF(request.Id.HasValue, x => x.Id != request.Id).AnyAsync(); + .Where(x => x.Code == request.Code) + .WhereIF(request.Id.HasValue, x => x.Id != request.Id).AnyAsync(); exists.ThrowIfTrue($"{request.Title}存在重复code"); //检查name exists = await _dbContext.Queryable() - .Where(x => x.Name == request.Name) - .WhereIF(request.Id.HasValue, x => x.Id != request.Id).AnyAsync(); + .Where(x => x.Name == request.Name) + .WhereIF(request.Id.HasValue, x => x.Id != request.Id).AnyAsync(); exists.ThrowIfTrue($"{request.Title}存在重复name"); //判断权限重复 if (request.Permission.IsPresent()) { exists = await _dbContext.Queryable() - .Where(x => x.Permission == request.Permission && (request.MenuType == MenuEnumType.Menu || request.MenuType == MenuEnumType.Button)) - .WhereIF(request.Id.HasValue, x => x.Id != request.Id).AnyAsync(); + .Where(x => x.Permission == request.Permission && (request.MenuType == MenuEnumType.Menu || request.MenuType == MenuEnumType.Button)) + .WhereIF(request.Id.HasValue, x => x.Id != request.Id).AnyAsync(); exists.ThrowIfTrue($"{request.Title}存在重复权限标识"); } @@ -188,4 +235,23 @@ public class MenuService : IMenuService } } } -} + + private async Task> GetAllAssignmentCodesAsync() + { + var user = await _dbContext.Queryable().Where(x => x.Id == _currentUser.GetIntSubjectId()).FirstAsync(); + if (user == null) + { + return new List(); + } + + // var gP = await GetAssignmentCodesAsync(MenuPermissionTypeEnumType.Group, manager.usergrp); + // + // //user + // var uP = await GetAssignmentCodesAsync(MenuPermissionTypeEnumType.User, manager.account); + // var all = gP.Concat(uP).Distinct().ToList(); + + //return all; + + return new List(); + } +} \ No newline at end of file diff --git a/Src/Dlhis.Permission/Program.cs b/Src/Dlhis.Permission/Program.cs index 183eef6d..2f2202fc 100644 --- a/Src/Dlhis.Permission/Program.cs +++ b/Src/Dlhis.Permission/Program.cs @@ -1,18 +1,21 @@ using Kurisu.AspNetCore.Startup; using Kurisu.Startup; -class Program +namespace Dlhis.Sys { - static void Main(string[] args) + class Program { - KurisuHost.Run(true, args); + static void Main(string[] args) + { + KurisuHost.Run(true, args); + } } -} -public class Startup : DefaultStartup -{ - public Startup(IConfiguration configuration) : base(configuration) + public class Startup : DefaultStartup { + public Startup(IConfiguration configuration) : base(configuration) + { + } } } \ No newline at end of file diff --git a/Src/Dlhis.User/Dlhis.User.csproj b/Src/Dlhis.User/Dlhis.User.csproj new file mode 100644 index 00000000..6ac4aa28 --- /dev/null +++ b/Src/Dlhis.User/Dlhis.User.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + disable + enable + + + + + + + + + + + + + + + + + diff --git a/Src/Dlhis.User/Identity/Controllers/RolesController.cs b/Src/Dlhis.User/Identity/Controllers/RolesController.cs new file mode 100644 index 00000000..0f8e0f99 --- /dev/null +++ b/Src/Dlhis.User/Identity/Controllers/RolesController.cs @@ -0,0 +1,27 @@ +using Dlhis.User.Identity.Request; +using Dlhis.User.Identity.Response; +using Dlhis.User.Identity.Services; +using Kurisu.Core.DataAccess.Dto; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.User.Identity.Controllers; + +[Authorize(Roles = "admin")] +[Route("api/[controller]")] +[ApiController] +public class RolesController : ControllerBase +{ + private readonly IRoleService _roleService; + + public RolesController(IRoleService roleService) + { + _roleService = roleService; + } + + [HttpGet] + public async Task> GetPageAsync(RolePageRequest request) + { + return await _roleService.GetPageAsync(request); + } +} diff --git a/Src/Dlhis.User/Identity/Controllers/UsersController.cs b/Src/Dlhis.User/Identity/Controllers/UsersController.cs new file mode 100644 index 00000000..0700500c --- /dev/null +++ b/Src/Dlhis.User/Identity/Controllers/UsersController.cs @@ -0,0 +1,32 @@ +using Dlhis.User.Identity.Request; +using Dlhis.User.Identity.Response; +using Dlhis.User.Identity.Services; +using Kurisu.Core.DataAccess.Dto; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.User.Identity.Controllers; + +[Authorize(Roles = "admin")] +[Route("api/[controller]")] +[ApiController] +public class UsersController : ControllerBase +{ + private readonly IUserService _userService; + + public UsersController(IUserService userService) + { + _userService = userService; + } + + /// + /// 用户分页 + /// + /// + /// + [HttpGet("page")] + public async Task> GetPageAsync([FromQuery] UserPageRequest request) + { + return await _userService.GetPageAsync(request); + } +} diff --git a/Src/Dlhis.User/Identity/Request/RolePageRequest.cs b/Src/Dlhis.User/Identity/Request/RolePageRequest.cs new file mode 100644 index 00000000..cd83c5a7 --- /dev/null +++ b/Src/Dlhis.User/Identity/Request/RolePageRequest.cs @@ -0,0 +1,7 @@ +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.User.Identity.Request; + +public class RolePageRequest : PageDto +{ +} diff --git a/Src/Dlhis.User/Identity/Request/UserPageRequest.cs b/Src/Dlhis.User/Identity/Request/UserPageRequest.cs new file mode 100644 index 00000000..578d3daa --- /dev/null +++ b/Src/Dlhis.User/Identity/Request/UserPageRequest.cs @@ -0,0 +1,7 @@ +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.User.Identity.Request; + +public class UserPageRequest : PageDto +{ +} diff --git a/Src/Dlhis.User/Identity/Response/RoleRespone.cs b/Src/Dlhis.User/Identity/Response/RoleRespone.cs new file mode 100644 index 00000000..7ad308cb --- /dev/null +++ b/Src/Dlhis.User/Identity/Response/RoleRespone.cs @@ -0,0 +1,10 @@ +namespace Dlhis.User.Identity.Response; + +public class RoleRespone +{ + public int Id { get; set; } + + public string Name { get; set; } + + public string NormalizedName { get; set; } +} diff --git a/Src/Dlhis.User/Identity/Response/UserResponse.cs b/Src/Dlhis.User/Identity/Response/UserResponse.cs new file mode 100644 index 00000000..c3be89b8 --- /dev/null +++ b/Src/Dlhis.User/Identity/Response/UserResponse.cs @@ -0,0 +1,28 @@ +namespace Dlhis.User.Identity.Response; + +public class UserResponse +{ + public int Id { get; set; } + + public string UserName { get; set; } + + public string NormalizedUserName { get; set; } + + public string Email { get; set; } + + public string NormalizedEmail { get; set; } + + public bool EmailConfirmed { get; set; } + + public string PhoneNumber { get; set; } + + public string PhoneNumberConfirmed { get; set; } + + public bool TwoFactorEnabled { get; set; } + + public bool LockoutEnd { get; set; } + + public bool LockoutEnabled { get; set; } + + public int AccessFailedCount { get; set; } +} diff --git a/Src/Dlhis.User/Identity/Services/IRoleService.cs b/Src/Dlhis.User/Identity/Services/IRoleService.cs new file mode 100644 index 00000000..78930ffd --- /dev/null +++ b/Src/Dlhis.User/Identity/Services/IRoleService.cs @@ -0,0 +1,10 @@ +using Dlhis.User.Identity.Request; +using Dlhis.User.Identity.Response; +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.User.Identity.Services; + +public interface IRoleService : IScopeDependency +{ + Task> GetPageAsync(RolePageRequest request); +} diff --git a/Src/Dlhis.User/Identity/Services/IUserService.cs b/Src/Dlhis.User/Identity/Services/IUserService.cs new file mode 100644 index 00000000..227bdf6e --- /dev/null +++ b/Src/Dlhis.User/Identity/Services/IUserService.cs @@ -0,0 +1,12 @@ +using Dlhis.User.Identity.Request; +using Dlhis.User.Identity.Response; +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.User.Identity.Services; + +public interface IUserService : IScopeDependency +{ + Task> GetPageAsync(UserPageRequest request); + + Task ResetAccessFailedCountAsync(int id); +} diff --git a/Src/Dlhis.User/Identity/Services/Implements/UserService.cs b/Src/Dlhis.User/Identity/Services/Implements/UserService.cs new file mode 100644 index 00000000..b4c0844a --- /dev/null +++ b/Src/Dlhis.User/Identity/Services/Implements/UserService.cs @@ -0,0 +1,41 @@ +using Dlhis.Entity.Sys.Entities; +using Dlhis.User.Identity.Request; +using Dlhis.User.Identity.Response; +using Kurisu.AspNetCore.Utils.Extensions; +using Kurisu.Core.DataAccess.Dto; +using Kurisu.SqlSugar.Extensions; +using Kurisu.SqlSugar.Services; + +namespace Dlhis.User.Identity.Services.Implements; + +public class UserService : IUserService +{ + private readonly IDbContext _dbContext; + + public UserService(IDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task> GetPageAsync(UserPageRequest request) + { + return await _dbContext.Queryable() + .WhereIF(request.Search.IsPresent(), x => x.UserName.Contains(request.Search) + || x.NormalizedUserName.Contains(request.Search) + || x.Email.Contains(request.Search) + || x.NormalizedEmail.Contains(request.Search) + || x.PhoneNumber.Contains(request.Search) + ) + .Select() + .ToPageListAsync(request); + } + + public async Task ResetAccessFailedCountAsync(int id) + { + var user = await _dbContext.Queryable().Where(x => x.Id == id).FirstAsync(); + user.ThrowIfNull("用户不存在,无法重置"); + + user.AccessFailedCount = 0; + await _dbContext.UpdateAsync(user); + } +} diff --git a/Src/Dlhis.User/Program.cs b/Src/Dlhis.User/Program.cs new file mode 100644 index 00000000..a151cbce --- /dev/null +++ b/Src/Dlhis.User/Program.cs @@ -0,0 +1,21 @@ +using Kurisu.AspNetCore.Startup; +using Kurisu.Startup; + +namespace Dlhis.User +{ + class Program + { + static void Main(string[] args) + { + KurisuHost.Run(true, args); + } + } + + public class Startup : DefaultStartup + { + public Startup(IConfiguration configuration) : base(configuration) + { + + } + } +} \ No newline at end of file diff --git a/Src/Dlhis.User/Properties/launchSettings.json b/Src/Dlhis.User/Properties/launchSettings.json new file mode 100644 index 00000000..ebd6db88 --- /dev/null +++ b/Src/Dlhis.User/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "Dlhis.User": { + "commandName": "Project", + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5010", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Src/Dlhis.User/SqlSugarPack.cs b/Src/Dlhis.User/SqlSugarPack.cs new file mode 100644 index 00000000..f20935cb --- /dev/null +++ b/Src/Dlhis.User/SqlSugarPack.cs @@ -0,0 +1,14 @@ +using Kurisu.AspNetCore.Startup; +using Kurisu.SqlSugar.Extensions; + +namespace Dlhis.User; + +public class SqlSugarPack : BaseAppPack +{ + public override bool IsBeforeUseRouting { get; } + + public override void ConfigureServices(IServiceCollection services) + { + services.AddSqlSugar(); + } +} diff --git a/Src/Dlhis.User/appsettings.Development.json b/Src/Dlhis.User/appsettings.Development.json new file mode 100644 index 00000000..d4cafc4f --- /dev/null +++ b/Src/Dlhis.User/appsettings.Development.json @@ -0,0 +1,35 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "InternalRequest": { + "CommonRequestUrl": "http://localhost:5001" + }, + "SwaggerOptions": { + "Enable": true, + "Authority": "https://yikatong.isawesome.cn/oauth2", + "ClientId": "4fb184324eac4180", + "ClientSecret": "8ac8f235152f1524", + "Scopes": { + "openid": "openid", + "profile": "profile", + "role": "role", + "yikatong": "yikatong" + } + }, + "IdentityServerOptions": { + "Authority": "https://yikatong.isawesome.cn/oauth2", + "RequireHttpsMetadata": true, + "Issuer": "identity.isawesome.cn", + "Audience": "", + "Pat": { + "Enable": false, + "Scheme": "token", + "ClientId": "reference", + "ClientSecret": "123456" + } + } +} diff --git a/Src/Dlhis.User/appsettings.json b/Src/Dlhis.User/appsettings.json new file mode 100644 index 00000000..adb68f64 --- /dev/null +++ b/Src/Dlhis.User/appsettings.json @@ -0,0 +1,73 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + + "SqlSugarOptions": { + "DefaultConnectionString": "server=192.168.199.124;port=3306;userid=root;password=dlhis123;database=identity;charset=utf8mb4;", + "SlaveConnectionString": [], + "Timeout": 30, + "SlowSqlTime": 1, + "EnableSqlLog": true + }, + "SwaggerOptions": { + "Enable": true, + "Authority": "http://identity.oauth.svc.cluster.local", + "ClientId": "4fb184324eac4180", + "ClientSecret": "8ac8f235152f1524", + "Scopes": { + "openid": "openid", + "profile": "profile", + "role": "role", + "yikatong": "yikatong" + } + }, + "IdentityServerOptions": { + "Authority": "http://identity.oauth.svc.cluster.local", + "RequireHttpsMetadata": false, + "Issuer": "identity.isawesome.cn", + "Audience": "", + "Pat": { + "Enable": false, + "Scheme": "token", + "ClientId": "reference", + "ClientSecret": "123456" + } + }, + "Serilog": { + "MinimumLevel": { + "Default": "Information", + "Override": { + "System": "Warning", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "WriteTo": [ + { + "Name": "Async", + "Args": { + "configure": [ + { + "Name": "Console", + "Args": { + "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "log/log.txt", + "rollingInterval": "Hour" + } + } + ] + } + } + ] + } +}