diff --git a/server/HoneyBox/src/HoneyBox.Admin/Controllers/AdminUserController.cs b/server/HoneyBox/src/HoneyBox.Admin/Controllers/AdminUserController.cs
index 1cf18b9c..38af883f 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Controllers/AdminUserController.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Controllers/AdminUserController.cs
@@ -84,6 +84,18 @@ public class AdminUserController : ControllerBase
return ApiResponse.Success("删除成功");
}
+ ///
+ /// 获取管理员已分配的角色ID列表
+ ///
+ /// 管理员ID
+ /// 角色ID列表
+ [HttpGet("{id:long}/roles")]
+ public async Task>> GetRoles(long id)
+ {
+ var result = await _adminUserService.GetRoleIdsAsync(id);
+ return ApiResponse>.Success(result);
+ }
+
///
/// 分配角色给管理员
///
@@ -96,6 +108,18 @@ public class AdminUserController : ControllerBase
return ApiResponse.Success("分配成功");
}
+ ///
+ /// 获取管理员已分配的专属菜单ID列表
+ ///
+ /// 管理员ID
+ /// 菜单ID列表
+ [HttpGet("{id:long}/menus")]
+ public async Task>> GetMenus(long id)
+ {
+ var result = await _adminUserService.GetMenuIdsAsync(id);
+ return ApiResponse>.Success(result);
+ }
+
///
/// 分配用户专属菜单
///
diff --git a/server/HoneyBox/src/HoneyBox.Admin/Controllers/RoleController.cs b/server/HoneyBox/src/HoneyBox.Admin/Controllers/RoleController.cs
index 91203eb3..e40f4709 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Controllers/RoleController.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Controllers/RoleController.cs
@@ -93,6 +93,18 @@ public class RoleController : ControllerBase
return ApiResponse.Success("删除成功");
}
+ ///
+ /// 获取角色已分配的菜单ID列表
+ ///
+ /// 角色ID
+ /// 菜单ID列表
+ [HttpGet("{id:long}/menus")]
+ public async Task>> GetMenus(long id)
+ {
+ var result = await _roleService.GetMenuIdsAsync(id);
+ return ApiResponse>.Success(result);
+ }
+
///
/// 分配菜单给角色
///
@@ -105,6 +117,18 @@ public class RoleController : ControllerBase
return ApiResponse.Success("分配成功");
}
+ ///
+ /// 获取角色已分配的权限编码列表
+ ///
+ /// 角色ID
+ /// 权限编码列表
+ [HttpGet("{id:long}/permissions")]
+ public async Task>> GetPermissions(long id)
+ {
+ var result = await _roleService.GetPermissionCodesAsync(id);
+ return ApiResponse>.Success(result);
+ }
+
///
/// 分配权限给角色
///
@@ -113,7 +137,7 @@ public class RoleController : ControllerBase
[HttpPut("{id:long}/permissions")]
public async Task AssignPermissions(long id, [FromBody] AssignPermissionsRequest request)
{
- await _roleService.AssignPermissionsAsync(id, request.PermissionIds);
+ await _roleService.AssignPermissionsAsync(id, request.PermissionCodes);
return ApiResponse.Success("分配成功");
}
}
diff --git a/server/HoneyBox/src/HoneyBox.Admin/Models/Role/AssignPermissionsRequest.cs b/server/HoneyBox/src/HoneyBox.Admin/Models/Role/AssignPermissionsRequest.cs
index fd4fb518..100ec61f 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Models/Role/AssignPermissionsRequest.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Models/Role/AssignPermissionsRequest.cs
@@ -8,7 +8,7 @@ namespace HoneyBox.Admin.Models.Role;
public class AssignPermissionsRequest
{
///
- /// 权限ID列表
+ /// 权限编码列表
///
- public List PermissionIds { get; set; } = new();
+ public List PermissionCodes { get; set; } = new();
}
diff --git a/server/HoneyBox/src/HoneyBox.Admin/Services/AdminUserService.cs b/server/HoneyBox/src/HoneyBox.Admin/Services/AdminUserService.cs
index 01072b1b..4a8d87b1 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Services/AdminUserService.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Services/AdminUserService.cs
@@ -266,6 +266,21 @@ public class AdminUserService : IAdminUserService
_logger.LogInformation("删除管理员成功: {UserId} - {Username}", id, user.Username);
}
+ ///
+ public async Task> GetRoleIdsAsync(long userId)
+ {
+ var user = await _dbContext.AdminUsers.FindAsync(userId);
+ if (user == null)
+ {
+ throw new AdminException(AdminErrorCodes.InvalidParameter, "管理员不存在");
+ }
+
+ return await _dbContext.AdminUserRoles
+ .Where(ur => ur.AdminUserId == userId)
+ .Select(ur => ur.RoleId)
+ .ToListAsync();
+ }
+
///
public async Task AssignRolesAsync(long userId, List roleIds)
{
@@ -294,6 +309,21 @@ public class AdminUserService : IAdminUserService
_logger.LogInformation("管理员 {UserId} 分配角色成功,角色数量: {Count}", userId, roleIds.Count);
}
+ ///
+ public async Task> GetMenuIdsAsync(long userId)
+ {
+ var user = await _dbContext.AdminUsers.FindAsync(userId);
+ if (user == null)
+ {
+ throw new AdminException(AdminErrorCodes.InvalidParameter, "管理员不存在");
+ }
+
+ return await _dbContext.AdminUserMenus
+ .Where(um => um.AdminUserId == userId)
+ .Select(um => um.MenuId)
+ .ToListAsync();
+ }
+
///
public async Task AssignMenusAsync(long userId, List menuIds)
{
diff --git a/server/HoneyBox/src/HoneyBox.Admin/Services/IAdminUserService.cs b/server/HoneyBox/src/HoneyBox.Admin/Services/IAdminUserService.cs
index 23203558..35891178 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Services/IAdminUserService.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Services/IAdminUserService.cs
@@ -43,6 +43,13 @@ public interface IAdminUserService
/// 管理员ID
Task DeleteAsync(long id);
+ ///
+ /// 获取管理员已分配的角色ID列表
+ ///
+ /// 管理员ID
+ /// 角色ID列表
+ Task> GetRoleIdsAsync(long userId);
+
///
/// 分配角色给管理员
///
@@ -50,6 +57,13 @@ public interface IAdminUserService
/// 角色ID列表
Task AssignRolesAsync(long userId, List roleIds);
+ ///
+ /// 获取管理员已分配的专属菜单ID列表
+ ///
+ /// 管理员ID
+ /// 菜单ID列表
+ Task> GetMenuIdsAsync(long userId);
+
///
/// 分配用户专属菜单
///
diff --git a/server/HoneyBox/src/HoneyBox.Admin/Services/IRoleService.cs b/server/HoneyBox/src/HoneyBox.Admin/Services/IRoleService.cs
index 7e443aa4..57bd502f 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Services/IRoleService.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Services/IRoleService.cs
@@ -42,6 +42,13 @@ public interface IRoleService
/// 角色ID
Task DeleteAsync(long id);
+ ///
+ /// 获取角色已分配的菜单ID列表
+ ///
+ /// 角色ID
+ /// 菜单ID列表
+ Task> GetMenuIdsAsync(long roleId);
+
///
/// 分配菜单给角色
///
@@ -49,12 +56,19 @@ public interface IRoleService
/// 菜单ID列表
Task AssignMenusAsync(long roleId, List menuIds);
+ ///
+ /// 获取角色已分配的权限编码列表
+ ///
+ /// 角色ID
+ /// 权限编码列表
+ Task> GetPermissionCodesAsync(long roleId);
+
///
/// 分配权限给角色
///
/// 角色ID
- /// 权限ID列表
- Task AssignPermissionsAsync(long roleId, List permissionIds);
+ /// 权限编码列表
+ Task AssignPermissionsAsync(long roleId, List permissionCodes);
///
/// 获取所有角色(下拉选择用)
diff --git a/server/HoneyBox/src/HoneyBox.Admin/Services/RoleService.cs b/server/HoneyBox/src/HoneyBox.Admin/Services/RoleService.cs
index 5a92efa7..d7691691 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/Services/RoleService.cs
+++ b/server/HoneyBox/src/HoneyBox.Admin/Services/RoleService.cs
@@ -190,6 +190,21 @@ public class RoleService : IRoleService
_logger.LogInformation("删除角色成功: {RoleId} - {RoleName}", id, role.Name);
}
+ ///
+ public async Task> GetMenuIdsAsync(long roleId)
+ {
+ var role = await _dbContext.Roles.FindAsync(roleId);
+ if (role == null)
+ {
+ throw new AdminException(AdminErrorCodes.RoleNotFound, "角色不存在");
+ }
+
+ return await _dbContext.RoleMenus
+ .Where(rm => rm.RoleId == roleId)
+ .Select(rm => rm.MenuId)
+ .ToListAsync();
+ }
+
///
public async Task AssignMenusAsync(long roleId, List menuIds)
{
@@ -219,7 +234,22 @@ public class RoleService : IRoleService
}
///
- public async Task AssignPermissionsAsync(long roleId, List permissionIds)
+ public async Task> GetPermissionCodesAsync(long roleId)
+ {
+ var role = await _dbContext.Roles.FindAsync(roleId);
+ if (role == null)
+ {
+ throw new AdminException(AdminErrorCodes.RoleNotFound, "角色不存在");
+ }
+
+ return await _dbContext.RolePermissions
+ .Where(rp => rp.RoleId == roleId)
+ .Join(_dbContext.Permissions, rp => rp.PermissionId, p => p.Id, (rp, p) => p.Code)
+ .ToListAsync();
+ }
+
+ ///
+ public async Task AssignPermissionsAsync(long roleId, List permissionCodes)
{
var role = await _dbContext.Roles.FindAsync(roleId);
if (role == null)
@@ -232,18 +262,23 @@ public class RoleService : IRoleService
_dbContext.RolePermissions.RemoveRange(existingPermissions);
// 添加新关联
- if (permissionIds.Any())
+ if (permissionCodes.Any())
{
- var newPermissions = permissionIds.Distinct().Select(permissionId => new RolePermission
+ // 根据权限编码获取权限ID
+ var permissions = await _dbContext.Permissions
+ .Where(p => permissionCodes.Contains(p.Code))
+ .ToListAsync();
+
+ var newPermissions = permissions.Select(p => new RolePermission
{
RoleId = roleId,
- PermissionId = permissionId
+ PermissionId = p.Id
});
_dbContext.RolePermissions.AddRange(newPermissions);
}
await _dbContext.SaveChangesAsync();
- _logger.LogInformation("角色 {RoleId} 分配权限成功,权限数量: {Count}", roleId, permissionIds.Count);
+ _logger.LogInformation("角色 {RoleId} 分配权限成功,权限数量: {Count}", roleId, permissionCodes.Count);
}
///
diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/adminUser.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/adminUser.ts
index 4e6e972f..a066a188 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/adminUser.ts
+++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/adminUser.ts
@@ -19,7 +19,7 @@ export interface AdminUserQuery {
keyword?: string
departmentId?: number
status?: number
- pageIndex: number
+ page: number
pageSize: number
}
@@ -116,7 +116,7 @@ export function setAdminUserStatus(id: number, status: number): Promise> {
return request({
- url: `/admin/users/${data.userId}/password`,
+ url: `/admin/users/${data.userId}/reset-password`,
method: 'put',
data: { newPassword: data.newPassword }
})
diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/operationLog.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/operationLog.ts
index 8167e0d0..729b33a2 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/operationLog.ts
+++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/operationLog.ts
@@ -22,7 +22,7 @@ export interface OperationLogQuery {
module?: string
startDate?: string
endDate?: string
- pageIndex: number
+ page: number
pageSize: number
}
diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/role.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/role.ts
index 580a161b..d4542702 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/role.ts
+++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/role.ts
@@ -13,7 +13,7 @@ export interface Role {
export interface RoleQuery {
keyword?: string
status?: number
- pageIndex: number
+ page: number
pageSize: number
}
diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/utils/request.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/utils/request.ts
index 5632b52c..5f52843b 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/utils/request.ts
+++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/utils/request.ts
@@ -12,9 +12,9 @@ export interface ApiResponse {
// 分页结果
export interface PagedResult {
- items: T[]
+ list: T[]
total: number
- pageIndex: number
+ page: number
pageSize: number
totalPages: number
}
diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/role/index.vue b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/role/index.vue
index c01aaabf..97c2d7b7 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/role/index.vue
+++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/role/index.vue
@@ -53,7 +53,7 @@
({
keyword: '',
status: undefined,
- pageIndex: 1,
+ page: 1,
pageSize: 10
})
@@ -220,7 +220,7 @@ const fetchData = async () => {
loading.value = true
try {
const res = await getRoleList(queryParams)
- roleList.value = res.data.items
+ roleList.value = res.data.list
total.value = res.data.total
} finally {
loading.value = false
@@ -228,14 +228,14 @@ const fetchData = async () => {
}
const handleSearch = () => {
- queryParams.pageIndex = 1
+ queryParams.page = 1
fetchData()
}
const handleReset = () => {
queryParams.keyword = ''
queryParams.status = undefined
- queryParams.pageIndex = 1
+ queryParams.page = 1
fetchData()
}
diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/user/index.vue b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/user/index.vue
index b3898aa4..8aa0855b 100644
--- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/user/index.vue
+++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/system/user/index.vue
@@ -79,7 +79,7 @@
({
keyword: '',
departmentId: undefined,
status: undefined,
- pageIndex: 1,
+ page: 1,
pageSize: 10
})
@@ -308,7 +308,7 @@ const fetchData = async () => {
loading.value = true
try {
const res = await getAdminUserList(queryParams)
- userList.value = res.data.items
+ userList.value = res.data.list
total.value = res.data.total
} finally {
loading.value = false
@@ -327,7 +327,7 @@ const loadBaseData = async () => {
}
const handleSearch = () => {
- queryParams.pageIndex = 1
+ queryParams.page = 1
fetchData()
}
@@ -335,7 +335,7 @@ const handleReset = () => {
queryParams.keyword = ''
queryParams.departmentId = undefined
queryParams.status = undefined
- queryParams.pageIndex = 1
+ queryParams.page = 1
fetchData()
}