feat(admin): add admin role type management

1. 新增后台角色类型枚举AdminRoleTypeEnum
2. 为AdminRole实体添加角色类型字段并设置默认值
3. 新增/更新管理员角色相关DTO的角色类型属性
4. 完善权限服务中的角色增删改查逻辑,增加系统角色保护校验
5. 修复任务消费中角色类型存储为枚举字符串的问题,改为存储枚举值
6. 新增初始化角色类型的SQL脚本
This commit is contained in:
glz
2026-07-08 09:55:17 +08:00
parent a64d1b459a
commit a8b19cbacc
5 changed files with 61 additions and 3 deletions

View File

@ -1,3 +1,5 @@
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Dto;
/// <summary>
@ -148,6 +150,11 @@ public class AdminRoleInput
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 角色类型
/// </summary>
public AdminRoleTypeEnum Type { get; set; } = AdminRoleTypeEnum.Normal;
/// <summary>
/// 备注
/// </summary>
@ -184,6 +191,11 @@ public class AdminRoleOutput
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 角色类型
/// </summary>
public AdminRoleTypeEnum Type { get; set; }
/// <summary>
/// 备注
/// </summary>
@ -224,6 +236,11 @@ public class AdminRoleSimpleOutput
/// 角色编码
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 角色类型
/// </summary>
public AdminRoleTypeEnum Type { get; set; }
}
/// <summary>
@ -241,6 +258,11 @@ public class AdminRoleQueryInput : PageQueryModel
/// </summary>
public string? Code { get; set; }
/// <summary>
/// 角色类型
/// </summary>
public AdminRoleTypeEnum? Type { get; set; }
/// <summary>
/// 状态
/// </summary>

View File

@ -1,4 +1,5 @@
using SqlSugar;
using QYZH.InteractiveMagazine.Models.Enum;
namespace QYZH.InteractiveMagazine.Models.Entity;
@ -22,6 +23,13 @@ public partial class AdminRole : SqlSugarBaseEntity
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// Desc:角色类型0=普通角色1=系统角色
/// Default:0
/// Nullable:False
/// </summary>
public AdminRoleTypeEnum Type { get; set; } = AdminRoleTypeEnum.Normal;
/// <summary>
/// Desc:备注
/// Default:

View File

@ -0,0 +1,21 @@
using System.ComponentModel;
namespace QYZH.InteractiveMagazine.Models.Enum;
/// <summary>
/// 后台角色类型枚举
/// </summary>
public enum AdminRoleTypeEnum
{
/// <summary>
/// 普通角色
/// </summary>
[Description("普通角色")]
Normal = 0,
/// <summary>
/// 系统角色
/// </summary>
[Description("系统角色")]
System = 1
}

View File

@ -128,6 +128,7 @@ public class AdminPermissionService(
{
Name = input.Name.Trim(),
Code = input.Code.Trim(),
Type = input.Type,
Remark = input.Remark?.Trim(),
Status = input.Status,
CreatedBy = "System",
@ -157,9 +158,11 @@ public class AdminPermissionService(
BusinessException.ThrowIf(role == null, "角色不存在", ResultCode.NOT_FOUND);
await ValidateRoleInputAsync(input, id);
BusinessException.ThrowIf(role!.Type == AdminRoleTypeEnum.System && input.Type != AdminRoleTypeEnum.System, "系统角色不能修改为普通角色", ResultCode.FORBIDDEN);
role!.Name = input.Name.Trim();
role.Name = input.Name.Trim();
role.Code = input.Code.Trim();
role.Type = input.Type;
role.Remark = input.Remark?.Trim();
role.Status = input.Status;
role.UpdatedBy = "System";
@ -182,6 +185,7 @@ public class AdminPermissionService(
public async Task DeleteRoleAsync(long id)
{
var role = await adminRoleRepository.GetByIdAsync(id);
BusinessException.ThrowIf(role?.Type == AdminRoleTypeEnum.System, "系统角色不允许删除", ResultCode.FORBIDDEN);
BusinessException.ThrowIf(role == null, "角色不存在", ResultCode.NOT_FOUND);
var usedByUser = await adminUserRoleRepository.Queryable().AnyAsync(x => x.RoleId == id && !x.IsDeleted);
@ -221,6 +225,7 @@ public class AdminPermissionService(
.Where(x => !x.IsDeleted)
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), x => x.Name.Contains(input.Name!))
.WhereIF(!string.IsNullOrWhiteSpace(input.Code), x => x.Code.Contains(input.Code!))
.WhereIF(input.Type.HasValue, x => x.Type == input.Type!.Value)
.WhereIF(input.Status.HasValue, x => x.Status == input.Status!.Value)
.OrderByDescending(x => x.CreatedAt)
.ToPageListAsync(input.PageIndex, input.PageSize, totalNumber);
@ -283,7 +288,8 @@ public class AdminPermissionService(
{
Id = role.Id,
Name = role.Name,
Code = role.Code
Code = role.Code,
Type = role.Type
})
.ToListAsync();
}
@ -490,6 +496,7 @@ public class AdminPermissionService(
Id = role.Id,
Name = role.Name,
Code = role.Code,
Type = role.Type,
Remark = role.Remark,
Status = role.Status,
MenuIds = menuIds,

View File

@ -963,7 +963,7 @@ public class JournalTaskReceiveConsumer(
LastTag = 0,
DotPageNum = page?.PageNum ?? 0,
PageResultUrl = string.Empty,
Type = task.Type.ToString(),
Type = ((int)task.Type).ToString(),
DotPageNo = page?.PageNo ?? string.Empty,
PageAnswerDotUrl = string.Empty,
BreakCount = GetBreakCount(scoreUnit),