Explorar el Código

2.2.0数据权限角色管理改版

zhontai hace 2 años
padre
commit
fc6a42871b
Se han modificado 21 ficheros con 188 adiciones y 372 borrados
  1. 12 9
      src/platform/ZhonTai.Admin/Domain/Role/RoleEntity.cs
  2. 22 0
      src/platform/ZhonTai.Admin/Domain/Role/RoleTypeEnum.cs
  3. 0 27
      src/platform/ZhonTai.Admin/Domain/RoleGroup/Dto/RoleGroupDataOutput.cs
  4. 0 10
      src/platform/ZhonTai.Admin/Domain/RoleGroup/Dto/RoleGroupGetPageDto.cs
  5. 0 7
      src/platform/ZhonTai.Admin/Domain/RoleGroup/IRoleGroupRepository.cs
  6. 0 29
      src/platform/ZhonTai.Admin/Domain/RoleGroup/RoleGroupEntity.cs
  7. 4 0
      src/platform/ZhonTai.Admin/Domain/User/UserStatusEnum.cs
  8. 2 2
      src/platform/ZhonTai.Admin/Services/Organization/Output/OrganizationListOutput.cs
  9. 7 2
      src/platform/ZhonTai.Admin/Services/Role/Dto/RoleAddInput.cs
  10. 5 0
      src/platform/ZhonTai.Admin/Services/Role/Dto/RoleGetListOutput.cs
  11. 2 2
      src/platform/ZhonTai.Admin/Services/Role/Dto/RoleGetPageOutput.cs
  12. 2 0
      src/platform/ZhonTai.Admin/Services/Role/IRoleService.cs
  13. 50 18
      src/platform/ZhonTai.Admin/Services/Role/RoleService.cs
  14. 0 17
      src/platform/ZhonTai.Admin/Services/RoleGroup/Dto/RoleGroupAddInput.cs
  15. 0 17
      src/platform/ZhonTai.Admin/Services/RoleGroup/Dto/RoleGroupUpdateInput.cs
  16. 0 18
      src/platform/ZhonTai.Admin/Services/RoleGroup/IRoleGroupService.cs
  17. 0 80
      src/platform/ZhonTai.Admin/Services/RoleGroup/RoleGroupService.cs
  18. 2 0
      src/platform/ZhonTai.Admin/Services/User/IUserService.cs
  19. 23 10
      src/platform/ZhonTai.Admin/Services/User/UserService.cs
  20. 4 4
      src/platform/ZhonTai.Admin/ZhonTai.Admin.csproj
  21. 53 120
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

+ 12 - 9
src/platform/ZhonTai.Admin/Domain/Role/RoleEntity.cs

@@ -6,7 +6,7 @@ using ZhonTai.Admin.Domain.Permission;
 using ZhonTai.Admin.Domain.User;
 using ZhonTai.Admin.Domain.UserRole;
 using ZhonTai.Admin.Domain.RolePermission;
-using ZhonTai.Admin.Domain.RoleGroup;
+using ZhonTai.Admin.Domain.Organization;
 
 namespace ZhonTai.Admin.Domain.Role;
 
@@ -14,8 +14,7 @@ namespace ZhonTai.Admin.Domain.Role;
 /// 角色
 /// </summary>
 [Table(Name = "ad_role")]
-[Index("idx_{tablename}_01", $"{nameof(TenantId)},{nameof(Name)}", true)]
-[Index("idx_{tablename}_02", $"{nameof(TenantId)},{nameof(Code)}", true)]
+[Index("idx_{tablename}_01", $"{nameof(TenantId)},{nameof(ParentId)},{nameof(Name)}", true)]
 public partial class RoleEntity : EntityFull, ITenant
 {
     /// <summary>
@@ -25,14 +24,12 @@ public partial class RoleEntity : EntityFull, ITenant
     public long? TenantId { get; set; }
 
     /// <summary>
-    /// 分组Id
+    /// 父级Id
     /// </summary>
-    public long RoleGroupId { get; set; }
+    public long ParentId { get; set; }
 
-    /// <summary>
-    /// 分组
-    /// </summary>
-    public RoleGroupEntity RoleGroup { get; set; }
+    [Navigate(nameof(ParentId))]
+    public List<OrganizationEntity> Childs { get; set; }
 
     /// <summary>
     /// 名称
@@ -46,6 +43,12 @@ public partial class RoleEntity : EntityFull, ITenant
     [Column(StringLength = 50)]
     public string Code { get; set; }
 
+    /// <summary>
+    /// 角色类型
+    /// </summary>
+    [Column(MapType = typeof(int))]
+    public RoleTypeEnum Type { get; set; }
+
     /// <summary>
     /// 说明
     /// </summary>

+ 22 - 0
src/platform/ZhonTai.Admin/Domain/Role/RoleTypeEnum.cs

@@ -0,0 +1,22 @@
+namespace ZhonTai.Admin.Domain.Role;
+
+/// <summary>
+/// 角色类型
+/// </summary>
+public enum RoleTypeEnum
+{
+    /// <summary>
+    /// 自定义
+    /// </summary>
+    Custom = 0,
+
+    /// <summary>
+    /// 默认
+    /// </summary>
+    Default = 1,
+
+    /// <summary>
+    /// 主管理员
+    /// </summary>
+    MainAdmin = 101,
+}

+ 0 - 27
src/platform/ZhonTai.Admin/Domain/RoleGroup/Dto/RoleGroupDataOutput.cs

@@ -1,27 +0,0 @@
-namespace ZhonTai.Admin.Domain.RoleGroup.Dto;
-
-/// <summary>
-/// 角色分组导出
-/// </summary>
-public partial class RoleGroupDataOutput
-{
-    /// <summary>
-    /// 租户Id
-    /// </summary>
-    public long? TenantId { get; set; }
-
-    /// <summary>
-    /// 数据Id
-    /// </summary>
-    public long Id { get; set; }
-
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public string Name { get; set; }
-
-    /// <summary>
-    /// 排序
-    /// </summary>
-	public int Sort { get; set; }
-}

+ 0 - 10
src/platform/ZhonTai.Admin/Domain/RoleGroup/Dto/RoleGroupGetPageDto.cs

@@ -1,10 +0,0 @@
-
-namespace ZhonTai.Admin.Domain.RoleGroup.Dto;
-
-public partial class RoleGroupGetPageDto
-{
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public string Name { get; set; }
-}

+ 0 - 7
src/platform/ZhonTai.Admin/Domain/RoleGroup/IRoleGroupRepository.cs

@@ -1,7 +0,0 @@
-using ZhonTai.Admin.Core.Repositories;
-
-namespace ZhonTai.Admin.Domain.RoleGroup;
-
-public partial interface IRoleGroupRepository : IRepositoryBase<RoleGroupEntity>
-{
-}

+ 0 - 29
src/platform/ZhonTai.Admin/Domain/RoleGroup/RoleGroupEntity.cs

@@ -1,29 +0,0 @@
-using ZhonTai.Admin.Core.Entities;
-using FreeSql.DataAnnotations;
-
-namespace ZhonTai.Admin.Domain.RoleGroup;
-
-/// <summary>
-/// 角色分组
-/// </summary>
-[Table(Name = "ad_role_group")]
-[Index("idx_{tablename}_01", nameof(TenantId) + "," + nameof(Name), true)]
-public class RoleGroupEntity : EntityFull, ITenant
-{
-    /// <summary>
-    /// 租户Id
-    /// </summary>
-    [Column(Position = 2, CanUpdate = false)]
-    public long? TenantId { get; set; }
-
-    /// <summary>
-    /// 名称
-    /// </summary>
-    [Column(StringLength = 50)]
-    public string Name { get; set; }
-
-    /// <summary>
-    /// 排序
-    /// </summary>
-	public int Sort { get; set; }
-}

+ 4 - 0
src/platform/ZhonTai.Admin/Domain/User/UserStatusEnum.cs

@@ -9,18 +9,22 @@ public enum UserStatusEnum
     /// 正常
     /// </summary>
     Enabled = 0,
+
     /// <summary>
     /// 禁用
     /// </summary>
     Disabled = 1,
+
     /// <summary>
     /// 锁定
     /// </summary>
     Locked = 2,
+
     /// <summary>
     /// 待修改密码
     /// </summary>
     WaitChangePasssword = 3,
+
     /// <summary>
     /// 待激活
     /// </summary>

+ 2 - 2
src/platform/ZhonTai.Admin/Services/Organization/Output/OrganizationListOutput.cs

@@ -12,7 +12,7 @@ public class OrganizationListOutput
     /// <summary>
     /// 父级
     /// </summary>
-		public long ParentId { get; set; }
+	public long ParentId { get; set; }
 
     /// <summary>
     /// 名称
@@ -37,7 +37,7 @@ public class OrganizationListOutput
     /// <summary>
     /// 启用
     /// </summary>
-		public bool Enabled { get; set; }
+	public bool Enabled { get; set; }
 
     /// <summary>
     /// 创建时间

+ 7 - 2
src/platform/ZhonTai.Admin/Services/Role/Dto/RoleAddInput.cs

@@ -5,6 +5,11 @@
 /// </summary>
 public class RoleAddInput
 {
+    /// <summary>
+    /// 父级Id
+    /// </summary>
+    public long ParentId { get; set; }
+
     /// <summary>
     /// 名称
     /// </summary>
@@ -21,7 +26,7 @@ public class RoleAddInput
     public string Description { get; set; }
 
     /// <summary>
-    /// 启用
+    /// 排序
     /// </summary>
-		public bool Enabled { get; set; }
+    public int Sort { get; set; }
 }

+ 5 - 0
src/platform/ZhonTai.Admin/Services/Role/Dto/RoleGetListOutput.cs

@@ -7,6 +7,11 @@ public class RoleGetListOutput
     /// </summary>
     public long Id { get; set; }
 
+    /// <summary>
+    /// 父级Id
+    /// </summary>
+    public long ParentId { get; set; }
+
     /// <summary>
     /// 名称
     /// </summary>

+ 2 - 2
src/platform/ZhonTai.Admin/Services/Role/Dto/RoleGetPageOutput.cs

@@ -25,9 +25,9 @@ public class RoleGetPageOutput
     public string Description { get; set; }
 
     /// <summary>
-    /// 启用
+    /// 隐藏
     /// </summary>
-		public bool Enabled { get; set; }
+    public bool Hidden { get; set; }
 
     /// <summary>
     /// 创建时间

+ 2 - 0
src/platform/ZhonTai.Admin/Services/Role/IRoleService.cs

@@ -22,6 +22,8 @@ public interface IRoleService
 
     Task<IResultOutput> DeleteAsync(long id);
 
+    Task<IResultOutput> BatchDeleteAsync(long[] ids);
+
     Task<IResultOutput> SoftDeleteAsync(long id);
 
     Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);

+ 50 - 18
src/platform/ZhonTai.Admin/Services/Role/RoleService.cs

@@ -10,6 +10,9 @@ using ZhonTai.DynamicApi;
 using ZhonTai.DynamicApi.Attributes;
 using Microsoft.AspNetCore.Mvc;
 using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Attributes;
+using ZhonTai.Admin.Domain.UserRole;
+using System.DirectoryServices.Protocols;
 
 namespace ZhonTai.Admin.Services.Role;
 
@@ -20,15 +23,11 @@ namespace ZhonTai.Admin.Services.Role;
 public class RoleService : BaseService, IRoleService, IDynamicApi
 {
     private IRoleRepository _roleRepository => LazyGetRequiredService<IRoleRepository>();
-    private readonly IRepositoryBase<RolePermissionEntity> _rolePermissionRepository;
+    private IRepositoryBase<UserRoleEntity> _userRoleRepository => LazyGetRequiredService<IRepositoryBase<UserRoleEntity>>();
+    private IRepositoryBase<RolePermissionEntity> _rolePermissionRepository => LazyGetRequiredService<IRepositoryBase<RolePermissionEntity>>();
 
-    public RoleService(
-        //IRoleRepository roleRepository,
-        IRepositoryBase<RolePermissionEntity> rolePermissionRepository
-    )
+    public RoleService()
     {
-        //_roleRepository = roleRepository;
-        _rolePermissionRepository = rolePermissionRepository;
     }
 
     /// <summary>
@@ -51,7 +50,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     {
         var list = await _roleRepository.Select
         .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name))
-        .OrderByDescending(true, c => c.Id)
+        .OrderBy(a => new {a.ParentId, a.Sort})
         .ToListAsync<RoleGetListOutput>();
 
         return ResultOutput.Ok(list);
@@ -91,7 +90,22 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <returns></returns>
     public async Task<IResultOutput> AddAsync(RoleAddInput input)
     {
+        if(await _roleRepository.Select.AnyAsync(a=>a.ParentId == input.ParentId && a.Name == input.Name))
+        {
+            return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组":"角色")}已存在");
+        }
+
+        if (input.Code.NotNull() && await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code))
+        {
+            return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在");
+        }
+
         var entity = Mapper.Map<RoleEntity>(input);
+        if (entity.Sort == 0)
+        {
+            var sort = await _roleRepository.Select.Where(a=>a.ParentId == input.ParentId).MaxAsync(a => a.Sort);
+            entity.Sort = sort + 1;
+        }
         var id = (await _roleRepository.InsertAsync(entity)).Id;
 
         return ResultOutput.Result(id > 0);
@@ -125,15 +139,29 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
+    [Transaction]
     public async Task<IResultOutput> DeleteAsync(long id)
     {
-        var result = false;
-        if (id > 0)
-        {
-            result = (await _roleRepository.DeleteAsync(m => m.Id == id)) > 0;
-        }
+        await _userRoleRepository.DeleteAsync(a => a.UserId == id);
+        await _rolePermissionRepository.DeleteAsync(a => a.RoleId == id);
+        await _roleRepository.DeleteAsync(m => m.Id == id);
 
-        return ResultOutput.Result(result);
+        return ResultOutput.Ok();
+    }
+
+    /// <summary>
+    /// 批量彻底删除
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    [Transaction]
+    public async Task<IResultOutput> BatchDeleteAsync(long[] ids)
+    {
+        await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId));
+        await _rolePermissionRepository.DeleteAsync(a => ids.Contains(a.RoleId));
+        await _roleRepository.DeleteAsync(a => ids.Contains(a.Id));
+
+        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -141,12 +169,14 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
+    [Transaction]
     public async Task<IResultOutput> SoftDeleteAsync(long id)
     {
-        var result = await _roleRepository.SoftDeleteAsync(id);
+        await _userRoleRepository.DeleteAsync(a => a.RoleId == id);
         await _rolePermissionRepository.DeleteAsync(a => a.RoleId == id);
+        await _roleRepository.SoftDeleteAsync(id);
 
-        return ResultOutput.Result(result);
+        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -154,11 +184,13 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
+    [Transaction]
     public async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
     {
-        var result = await _roleRepository.SoftDeleteAsync(ids);
+        await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId));
         await _rolePermissionRepository.DeleteAsync(a => ids.Contains(a.RoleId));
+        await _roleRepository.SoftDeleteAsync(ids);
 
-        return ResultOutput.Result(result);
+        return ResultOutput.Ok();
     }
 }

+ 0 - 17
src/platform/ZhonTai.Admin/Services/RoleGroup/Dto/RoleGroupAddInput.cs

@@ -1,17 +0,0 @@
-namespace ZhonTai.Admin.Services.RoleGroup.Dto;
-
-/// <summary>
-/// 添加
-/// </summary>
-public class RoleGroupAddInput
-{
-    /// <summary>
-    /// 名称
-    /// </summary>
-    public string Name { get; set; }
-
-    /// <summary>
-    /// 排序
-    /// </summary>
-	public int Sort { get; set; }
-}

+ 0 - 17
src/platform/ZhonTai.Admin/Services/RoleGroup/Dto/RoleGroupUpdateInput.cs

@@ -1,17 +0,0 @@
-namespace ZhonTai.Admin.Services.RoleGroup.Dto;
-
-/// <summary>
-/// 修改
-/// </summary>
-public class RoleGroupUpdateInput : RoleGroupAddInput
-{
-    /// <summary>
-    /// 主键Id
-    /// </summary>
-    public long Id { get; set; }
-
-    /// <summary>
-    /// 版本
-    /// </summary>
-    public long Version { get; set; }
-}

+ 0 - 18
src/platform/ZhonTai.Admin/Services/RoleGroup/IRoleGroupService.cs

@@ -1,18 +0,0 @@
-using ZhonTai.Admin.Core.Dto;
-using System.Threading.Tasks;
-using ZhonTai.Admin.Services.RoleGroup.Dto;
-
-namespace ZhonTai.Admin.Services.RoleGroup;
-
-/// <summary>
-/// 角色分组接口
-/// </summary>
-public partial interface IRoleGroupService
-{
-
-    Task<IResultOutput> AddAsync(RoleGroupAddInput input);
-
-    Task<IResultOutput> UpdateAsync(RoleGroupUpdateInput input);
-
-    Task<IResultOutput> DeleteAsync(long id);
-}

+ 0 - 80
src/platform/ZhonTai.Admin/Services/RoleGroup/RoleGroupService.cs

@@ -1,80 +0,0 @@
-using System.Threading.Tasks;
-using ZhonTai.Admin.Core.Attributes;
-using ZhonTai.Admin.Core.Dto;
-using ZhonTai.Admin.Services.RoleGroup.Dto;
-using ZhonTai.Admin.Domain.RoleGroup;
-using ZhonTai.DynamicApi;
-using ZhonTai.DynamicApi.Attributes;
-using ZhonTai.Admin.Core.Consts;
-using ZhonTai.Admin.Domain.Role;
-
-namespace ZhonTai.Admin.Services.RoleGroup;
-
-/// <summary>
-/// 角色分组服务
-/// </summary>
-[DynamicApi(Area = AdminConsts.AreaName)]
-public class RoleGroupService : BaseService, IRoleGroupService, IDynamicApi
-{
-    private readonly IRoleGroupRepository _RoleGroupRepository;
-    private readonly IRoleRepository _roleRepository;
-    public RoleGroupService(IRoleGroupRepository RoleGroupRepository, IRoleRepository roleRepository)
-    {
-        _RoleGroupRepository = RoleGroupRepository;
-        _roleRepository = roleRepository;
-    }
-
-    /// <summary>
-    /// 新增
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(RoleGroupAddInput input)
-    {
-        var RoleGroup = Mapper.Map<RoleGroupEntity>(input);
-        var id = (await _RoleGroupRepository.InsertAsync(RoleGroup)).Id;
-        return ResultOutput.Result(id > 0);
-    }
-
-    /// <summary>
-    /// 修改
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(RoleGroupUpdateInput input)
-    {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
-        var entity = await _RoleGroupRepository.GetAsync(input.Id);
-        if (!(entity?.Id > 0))
-        {
-            return ResultOutput.NotOk("角色分组不存在!");
-        }
-
-        Mapper.Map(input, entity);
-        await _RoleGroupRepository.UpdateAsync(entity);
-        return ResultOutput.Ok();
-    }
-
-    /// <summary>
-    /// 彻底删除
-    /// </summary>
-    /// <param name="id"></param>
-    /// <returns></returns>
-    [Transaction]
-    public async Task<IResultOutput> DeleteAsync(long id)
-    {
-        //判断角色下是否有用户
-
-        //删除角色数据
-        await _roleRepository.DeleteAsync(a => a.RoleGroupId == id);
-
-        //删除角色分组
-        await _RoleGroupRepository.DeleteAsync(a => a.Id == id);
-
-        return ResultOutput.Ok();
-    }
-}

+ 2 - 0
src/platform/ZhonTai.Admin/Services/User/IUserService.cs

@@ -28,6 +28,8 @@ public interface IUserService
 
     Task<IResultOutput> DeleteAsync(long id);
 
+    Task<IResultOutput> BatchDeleteAsync(long[] ids);
+
     Task<IResultOutput> SoftDeleteAsync(long id);
 
     Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);

+ 23 - 10
src/platform/ZhonTai.Admin/Services/User/UserService.cs

@@ -24,6 +24,7 @@ using ZhonTai.Admin.Core.Helpers;
 using ZhonTai.Admin.Core.Consts;
 using ZhonTai.Admin.Domain.User.Dto;
 using ZhonTai.Admin.Services.Role.Dto;
+using Org.BouncyCastle.Crypto;
 
 namespace ZhonTai.Admin.Services.User;
 
@@ -293,15 +294,27 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
+    [Transaction]
     public async Task<IResultOutput> DeleteAsync(long id)
     {
-        var result = false;
-        if (id > 0)
-        {
-            result = (await _userRepository.DeleteAsync(m => m.Id == id)) > 0;
-        }
+        await _userRoleRepository.DeleteAsync(a => a.UserId == id);
+        await _userRepository.DeleteAsync(m => m.Id == id);
 
-        return ResultOutput.Result(result);
+        return ResultOutput.Ok();
+    }
+
+    /// <summary>
+    /// 批量彻底删除用户
+    /// </summary>
+    /// <param name="ids"></param>
+    /// <returns></returns>
+    [Transaction]
+    public async Task<IResultOutput> BatchDeleteAsync(long[] ids)
+    {
+        await _userRoleRepository.DeleteAsync(a => ids.Contains(a.UserId));
+        await _userRepository.DeleteAsync(a => ids.Contains(a.Id));
+
+        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -312,10 +325,10 @@ public class UserService : BaseService, IUserService, IDynamicApi
     [Transaction]
     public async Task<IResultOutput> SoftDeleteAsync(long id)
     {
-        var result = await _userRepository.SoftDeleteAsync(id);
         await _userRoleRepository.DeleteAsync(a => a.UserId == id);
+        await _userRepository.SoftDeleteAsync(id);
 
-        return ResultOutput.Result(result);
+        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -326,10 +339,10 @@ public class UserService : BaseService, IUserService, IDynamicApi
     [Transaction]
     public async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
     {
-        var result = await _userRepository.SoftDeleteAsync(ids);
         await _userRoleRepository.DeleteAsync(a => ids.Contains(a.UserId));
+        await _userRepository.SoftDeleteAsync(ids);
 
-        return ResultOutput.Result(result);
+        return ResultOutput.Ok();
     }
 
     /// <summary>

+ 4 - 4
src/platform/ZhonTai.Admin/ZhonTai.Admin.csproj

@@ -13,8 +13,8 @@
 		<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
 		<PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.1" />
 		<PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
-		<PackageReference Include="CSRedisCore" Version="3.8.668" />
-		<PackageReference Include="Caching.CSRedis" Version="3.8.668" />
+		<PackageReference Include="CSRedisCore" Version="3.8.669" />
+		<PackageReference Include="Caching.CSRedis" Version="3.8.669" />
 		<PackageReference Include="FluentValidation.AspNetCore" Version="11.2.2" />
 		<PackageReference Include="FreeSql" Version="3.2.669" />
 		<PackageReference Include="FreeSql.Repository" Version="3.2.669" />
@@ -23,14 +23,14 @@
 		<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
 		<PackageReference Include="Mapster" Version="7.3.0" />
 		<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="6.0.0" />
-		<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.8" />
+		<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.9" />
 		<PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
 		<PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
 		<PackageReference Include="NLog" Version="5.0.4" />
 		<PackageReference Include="NLog.Web.AspNetCore" Version="5.1.4" />
 		<PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
 		<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14" />
-		<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.0" />
+		<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.1" />
 		<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
 		<PackageReference Include="UAParser" Version="3.1.47" />
 		<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />

+ 53 - 120
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -2411,56 +2411,6 @@
             权限点
             </summary>
         </member>
-        <member name="T:ZhonTai.Admin.Domain.RoleGroup.Dto.RoleGroupDataOutput">
-            <summary>
-            角色分组导出
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.Dto.RoleGroupDataOutput.TenantId">
-            <summary>
-            租户Id
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.Dto.RoleGroupDataOutput.Id">
-            <summary>
-            数据Id
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.Dto.RoleGroupDataOutput.Name">
-            <summary>
-            名称
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.Dto.RoleGroupDataOutput.Sort">
-            <summary>
-            排序
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.Dto.RoleGroupGetPageDto.Name">
-            <summary>
-            名称
-            </summary>
-        </member>
-        <member name="T:ZhonTai.Admin.Domain.RoleGroup.RoleGroupEntity">
-            <summary>
-            角色分组
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.RoleGroupEntity.TenantId">
-            <summary>
-            租户Id
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.RoleGroupEntity.Name">
-            <summary>
-            名称
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.RoleGroup.RoleGroupEntity.Sort">
-            <summary>
-            排序
-            </summary>
-        </member>
         <member name="T:ZhonTai.Admin.Domain.RolePermission.RolePermissionEntity">
             <summary>
             角色权限
@@ -2546,14 +2496,9 @@
             租户Id
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.Role.RoleEntity.RoleGroupId">
-            <summary>
-            分组Id
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Domain.Role.RoleEntity.RoleGroup">
+        <member name="P:ZhonTai.Admin.Domain.Role.RoleEntity.ParentId">
             <summary>
-            分组
+            父级Id
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Domain.Role.RoleEntity.Name">
@@ -2566,6 +2511,11 @@
             编码
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Domain.Role.RoleEntity.Type">
+            <summary>
+            角色类型
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Domain.Role.RoleEntity.Description">
             <summary>
             说明
@@ -2581,6 +2531,26 @@
             排序
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Domain.Role.RoleTypeEnum">
+            <summary>
+            角色类型
+            </summary>
+        </member>
+        <member name="F:ZhonTai.Admin.Domain.Role.RoleTypeEnum.Custom">
+            <summary>
+            自定义
+            </summary>
+        </member>
+        <member name="F:ZhonTai.Admin.Domain.Role.RoleTypeEnum.Default">
+            <summary>
+            默认
+            </summary>
+        </member>
+        <member name="F:ZhonTai.Admin.Domain.Role.RoleTypeEnum.MainAdmin">
+            <summary>
+            主管理员
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.TenantPermission.TenantPermissionEntity">
             <summary>
             租户权限
@@ -5150,70 +5120,14 @@
             映射配置
             </summary>
         </member>
-        <member name="T:ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupAddInput">
+        <member name="T:ZhonTai.Admin.Services.Role.Dto.RoleAddInput">
             <summary>
             添加
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupAddInput.Name">
-            <summary>
-            名称
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupAddInput.Sort">
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleAddInput.ParentId">
             <summary>
-            排序
-            </summary>
-        </member>
-        <member name="T:ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupUpdateInput">
-            <summary>
-            修改
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupUpdateInput.Id">
-            <summary>
-            主键Id
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupUpdateInput.Version">
-            <summary>
-            版本
-            </summary>
-        </member>
-        <member name="T:ZhonTai.Admin.Services.RoleGroup.IRoleGroupService">
-            <summary>
-            角色分组接口
-            </summary>
-        </member>
-        <member name="T:ZhonTai.Admin.Services.RoleGroup.RoleGroupService">
-            <summary>
-            角色分组服务
-            </summary>
-        </member>
-        <member name="M:ZhonTai.Admin.Services.RoleGroup.RoleGroupService.AddAsync(ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupAddInput)">
-            <summary>
-            新增
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:ZhonTai.Admin.Services.RoleGroup.RoleGroupService.UpdateAsync(ZhonTai.Admin.Services.RoleGroup.Dto.RoleGroupUpdateInput)">
-            <summary>
-            修改
-            </summary>
-            <param name="input"></param>
-            <returns></returns>
-        </member>
-        <member name="M:ZhonTai.Admin.Services.RoleGroup.RoleGroupService.DeleteAsync(System.Int64)">
-            <summary>
-            彻底删除
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
-        <member name="T:ZhonTai.Admin.Services.Role.Dto.RoleAddInput">
-            <summary>
-            添加
+            父级Id
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleAddInput.Name">
@@ -5231,9 +5145,9 @@
             说明
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleAddInput.Enabled">
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleAddInput.Sort">
             <summary>
-            启用
+            排序
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetListOutput.Id">
@@ -5241,6 +5155,11 @@
             主键
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetListOutput.ParentId">
+            <summary>
+            父级Id
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetListOutput.Name">
             <summary>
             名称
@@ -5266,9 +5185,9 @@
             说明
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetPageOutput.Enabled">
+        <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetPageOutput.Hidden">
             <summary>
-            启用
+            隐藏
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Services.Role.Dto.RoleGetPageOutput.CreatedTime">
@@ -5343,6 +5262,13 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="M:ZhonTai.Admin.Services.Role.RoleService.BatchDeleteAsync(System.Int64[])">
+            <summary>
+            批量彻底删除
+            </summary>
+            <param name="ids"></param>
+            <returns></returns>
+        </member>
         <member name="M:ZhonTai.Admin.Services.Role.RoleService.SoftDeleteAsync(System.Int64)">
             <summary>
             删除
@@ -6016,6 +5942,13 @@
             <param name="id"></param>
             <returns></returns>
         </member>
+        <member name="M:ZhonTai.Admin.Services.User.UserService.BatchDeleteAsync(System.Int64[])">
+            <summary>
+            批量彻底删除用户
+            </summary>
+            <param name="ids"></param>
+            <returns></returns>
+        </member>
         <member name="M:ZhonTai.Admin.Services.User.UserService.SoftDeleteAsync(System.Int64)">
             <summary>
             删除用户