444
This commit is contained in:
parent
c0d139651c
commit
e4505e0370
|
|
@ -84,6 +84,18 @@ public class AdminUserController : ControllerBase
|
|||
return ApiResponse.Success("删除成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取管理员已分配的角色ID列表
|
||||
/// </summary>
|
||||
/// <param name="id">管理员ID</param>
|
||||
/// <returns>角色ID列表</returns>
|
||||
[HttpGet("{id:long}/roles")]
|
||||
public async Task<ApiResponse<List<long>>> GetRoles(long id)
|
||||
{
|
||||
var result = await _adminUserService.GetRoleIdsAsync(id);
|
||||
return ApiResponse<List<long>>.Success(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分配角色给管理员
|
||||
/// </summary>
|
||||
|
|
@ -96,6 +108,18 @@ public class AdminUserController : ControllerBase
|
|||
return ApiResponse.Success("分配成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取管理员已分配的专属菜单ID列表
|
||||
/// </summary>
|
||||
/// <param name="id">管理员ID</param>
|
||||
/// <returns>菜单ID列表</returns>
|
||||
[HttpGet("{id:long}/menus")]
|
||||
public async Task<ApiResponse<List<long>>> GetMenus(long id)
|
||||
{
|
||||
var result = await _adminUserService.GetMenuIdsAsync(id);
|
||||
return ApiResponse<List<long>>.Success(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分配用户专属菜单
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -93,6 +93,18 @@ public class RoleController : ControllerBase
|
|||
return ApiResponse.Success("删除成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取角色已分配的菜单ID列表
|
||||
/// </summary>
|
||||
/// <param name="id">角色ID</param>
|
||||
/// <returns>菜单ID列表</returns>
|
||||
[HttpGet("{id:long}/menus")]
|
||||
public async Task<ApiResponse<List<long>>> GetMenus(long id)
|
||||
{
|
||||
var result = await _roleService.GetMenuIdsAsync(id);
|
||||
return ApiResponse<List<long>>.Success(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分配菜单给角色
|
||||
/// </summary>
|
||||
|
|
@ -105,6 +117,18 @@ public class RoleController : ControllerBase
|
|||
return ApiResponse.Success("分配成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取角色已分配的权限编码列表
|
||||
/// </summary>
|
||||
/// <param name="id">角色ID</param>
|
||||
/// <returns>权限编码列表</returns>
|
||||
[HttpGet("{id:long}/permissions")]
|
||||
public async Task<ApiResponse<List<string>>> GetPermissions(long id)
|
||||
{
|
||||
var result = await _roleService.GetPermissionCodesAsync(id);
|
||||
return ApiResponse<List<string>>.Success(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分配权限给角色
|
||||
/// </summary>
|
||||
|
|
@ -113,7 +137,7 @@ public class RoleController : ControllerBase
|
|||
[HttpPut("{id:long}/permissions")]
|
||||
public async Task<ApiResponse> AssignPermissions(long id, [FromBody] AssignPermissionsRequest request)
|
||||
{
|
||||
await _roleService.AssignPermissionsAsync(id, request.PermissionIds);
|
||||
await _roleService.AssignPermissionsAsync(id, request.PermissionCodes);
|
||||
return ApiResponse.Success("分配成功");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace HoneyBox.Admin.Models.Role;
|
|||
public class AssignPermissionsRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 权限ID列表
|
||||
/// 权限编码列表
|
||||
/// </summary>
|
||||
public List<long> PermissionIds { get; set; } = new();
|
||||
public List<string> PermissionCodes { get; set; } = new();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -266,6 +266,21 @@ public class AdminUserService : IAdminUserService
|
|||
_logger.LogInformation("删除管理员成功: {UserId} - {Username}", id, user.Username);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<List<long>> 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();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task AssignRolesAsync(long userId, List<long> roleIds)
|
||||
{
|
||||
|
|
@ -294,6 +309,21 @@ public class AdminUserService : IAdminUserService
|
|||
_logger.LogInformation("管理员 {UserId} 分配角色成功,角色数量: {Count}", userId, roleIds.Count);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<List<long>> 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();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task AssignMenusAsync(long userId, List<long> menuIds)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,6 +43,13 @@ public interface IAdminUserService
|
|||
/// <param name="id">管理员ID</param>
|
||||
Task DeleteAsync(long id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取管理员已分配的角色ID列表
|
||||
/// </summary>
|
||||
/// <param name="userId">管理员ID</param>
|
||||
/// <returns>角色ID列表</returns>
|
||||
Task<List<long>> GetRoleIdsAsync(long userId);
|
||||
|
||||
/// <summary>
|
||||
/// 分配角色给管理员
|
||||
/// </summary>
|
||||
|
|
@ -50,6 +57,13 @@ public interface IAdminUserService
|
|||
/// <param name="roleIds">角色ID列表</param>
|
||||
Task AssignRolesAsync(long userId, List<long> roleIds);
|
||||
|
||||
/// <summary>
|
||||
/// 获取管理员已分配的专属菜单ID列表
|
||||
/// </summary>
|
||||
/// <param name="userId">管理员ID</param>
|
||||
/// <returns>菜单ID列表</returns>
|
||||
Task<List<long>> GetMenuIdsAsync(long userId);
|
||||
|
||||
/// <summary>
|
||||
/// 分配用户专属菜单
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -42,6 +42,13 @@ public interface IRoleService
|
|||
/// <param name="id">角色ID</param>
|
||||
Task DeleteAsync(long id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取角色已分配的菜单ID列表
|
||||
/// </summary>
|
||||
/// <param name="roleId">角色ID</param>
|
||||
/// <returns>菜单ID列表</returns>
|
||||
Task<List<long>> GetMenuIdsAsync(long roleId);
|
||||
|
||||
/// <summary>
|
||||
/// 分配菜单给角色
|
||||
/// </summary>
|
||||
|
|
@ -49,12 +56,19 @@ public interface IRoleService
|
|||
/// <param name="menuIds">菜单ID列表</param>
|
||||
Task AssignMenusAsync(long roleId, List<long> menuIds);
|
||||
|
||||
/// <summary>
|
||||
/// 获取角色已分配的权限编码列表
|
||||
/// </summary>
|
||||
/// <param name="roleId">角色ID</param>
|
||||
/// <returns>权限编码列表</returns>
|
||||
Task<List<string>> GetPermissionCodesAsync(long roleId);
|
||||
|
||||
/// <summary>
|
||||
/// 分配权限给角色
|
||||
/// </summary>
|
||||
/// <param name="roleId">角色ID</param>
|
||||
/// <param name="permissionIds">权限ID列表</param>
|
||||
Task AssignPermissionsAsync(long roleId, List<long> permissionIds);
|
||||
/// <param name="permissionCodes">权限编码列表</param>
|
||||
Task AssignPermissionsAsync(long roleId, List<string> permissionCodes);
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有角色(下拉选择用)
|
||||
|
|
|
|||
|
|
@ -190,6 +190,21 @@ public class RoleService : IRoleService
|
|||
_logger.LogInformation("删除角色成功: {RoleId} - {RoleName}", id, role.Name);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<List<long>> 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();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task AssignMenusAsync(long roleId, List<long> menuIds)
|
||||
{
|
||||
|
|
@ -219,7 +234,22 @@ public class RoleService : IRoleService
|
|||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task AssignPermissionsAsync(long roleId, List<long> permissionIds)
|
||||
public async Task<List<string>> 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();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task AssignPermissionsAsync(long roleId, List<string> 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);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
|
|
|||
|
|
@ -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<ApiRespo
|
|||
// 重置密码
|
||||
export function resetPassword(data: ResetPasswordRequest): Promise<ApiResponse<null>> {
|
||||
return request({
|
||||
url: `/admin/users/${data.userId}/password`,
|
||||
url: `/admin/users/${data.userId}/reset-password`,
|
||||
method: 'put',
|
||||
data: { newPassword: data.newPassword }
|
||||
})
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ export interface OperationLogQuery {
|
|||
module?: string
|
||||
startDate?: string
|
||||
endDate?: string
|
||||
pageIndex: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ export interface Role {
|
|||
export interface RoleQuery {
|
||||
keyword?: string
|
||||
status?: number
|
||||
pageIndex: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ export interface ApiResponse<T = any> {
|
|||
|
||||
// 分页结果
|
||||
export interface PagedResult<T> {
|
||||
items: T[]
|
||||
list: T[]
|
||||
total: number
|
||||
pageIndex: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
|
||||
<!-- 分页 -->
|
||||
<el-pagination
|
||||
v-model:current-page="queryParams.pageIndex"
|
||||
v-model:current-page="queryParams.page"
|
||||
v-model:page-size="queryParams.pageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:total="total"
|
||||
|
|
@ -156,7 +156,7 @@ const total = ref(0)
|
|||
const queryParams = reactive<RoleQuery>({
|
||||
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()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
|
||||
<!-- 分页 -->
|
||||
<el-pagination
|
||||
v-model:current-page="queryParams.pageIndex"
|
||||
v-model:current-page="queryParams.page"
|
||||
v-model:page-size="queryParams.pageSize"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:total="total"
|
||||
|
|
@ -219,7 +219,7 @@ const queryParams = reactive<AdminUserQuery>({
|
|||
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()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user