Update admin

This commit is contained in:
2026-05-08 19:20:49 +08:00
parent e8f36222e7
commit 1828c37fca
28 changed files with 79 additions and 35 deletions
@@ -10,7 +10,7 @@ import java.util.Date;
import java.util.List;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title:
* @Package com.yaoyuan.jiscuss.common
* @Description:
@@ -13,7 +13,7 @@ import java.util.List;
import java.util.Map;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title: 工具类
* @Package com.yaoyuan.jiscuss.common
* @Description: 通用工具类
@@ -40,7 +40,7 @@ import java.util.Set;
import java.util.stream.Collectors;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* 后台系统控制器
*/
@Controller
@@ -98,9 +98,9 @@ public class AdminSystemController extends BaseController {
List<User> users = usersRepository.findAll(Sort.by(Sort.Direction.ASC, "id"));
List<Role> roles = roleRepository.findAllByOrderByIdAsc();
Map<Integer, Set<Integer>> userRoleIds = new HashMap<>();
Map<String, Set<Integer>> userRoleIds = new HashMap<>();
for (UserRole ur : userRoleRepository.findAll()) {
userRoleIds.computeIfAbsent(ur.getUserId(), key -> new HashSet<>()).add(ur.getRoleId());
userRoleIds.computeIfAbsent(String.valueOf(ur.getUserId()), key -> new HashSet<>()).add(ur.getRoleId());
}
map.put("users", users);
@@ -222,10 +222,10 @@ public class AdminSystemController extends BaseController {
Set<Integer> userIds = posts.stream().map(Post::getCreateId).filter(v -> v != null).collect(Collectors.toSet());
Set<Integer> discussionIds = posts.stream().map(Post::getDiscussionId).filter(v -> v != null).collect(Collectors.toSet());
Map<Integer, String> userNames = usersRepository.findAllById(userIds).stream()
.collect(Collectors.toMap(User::getId, User::getUsername));
Map<Integer, String> discussionNames = discussionsRepository.findAllById(discussionIds).stream()
.collect(Collectors.toMap(Discussion::getId, Discussion::getTitle));
Map<String, String> userNames = usersRepository.findAllById(userIds).stream()
.collect(Collectors.toMap(user -> String.valueOf(user.getId()), User::getUsername));
Map<String, String> discussionNames = discussionsRepository.findAllById(discussionIds).stream()
.collect(Collectors.toMap(discussion -> String.valueOf(discussion.getId()), Discussion::getTitle));
map.put("userNames", userNames);
map.put("discussionNames", discussionNames);
@@ -9,7 +9,7 @@ import org.springframework.security.core.context.SecurityContext;
/**
* Base controller exposing helpers shared by web controllers.
*
* @author yaoyuan2.chu
* @author Chuyaoyuan
*/
public class BaseController {
@@ -3,7 +3,7 @@ package com.yaoyuan.jiscuss.controller;
import org.springframework.stereotype.Controller;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* 用户消息控制器
*/
@Controller
@@ -3,7 +3,7 @@ package com.yaoyuan.jiscuss.controller;
import org.springframework.stereotype.Controller;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* 其他控制器——积分/权限等
*/
@Controller
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import jakarta.servlet.http.HttpServletRequest;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title:
* @Package com.yaoyuan.jiscuss.controller
* @Description:
@@ -33,7 +33,7 @@ import java.util.List;
import java.util.Map;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* 主题帖子评论控制器
*/
@Controller
@@ -34,7 +34,7 @@ import java.util.Set;
import java.util.stream.Collectors;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* 首页页面系统控制器
*/
@Controller
@@ -12,7 +12,7 @@ import java.io.Serializable;
import java.util.Date;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
*/
@Data
@Entity
@@ -7,7 +7,7 @@ import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title:
* @Package com.yaoyuan.jiscuss.entity
* @Description:
@@ -8,7 +8,7 @@ import lombok.Setter;
import java.util.List;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title:
* @Package com.yaoyuan.jiscuss.entity.custom
* @Description:
@@ -8,7 +8,7 @@ import lombok.Setter;
import java.util.List;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title:
* @Package com.yaoyuan.jiscuss.entity.custom
* @Description:
@@ -7,7 +7,7 @@ import lombok.Setter;
import jakarta.persistence.Column;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title:
* @Package com.yaoyuan.jiscuss.entity.custom
* @Description:
@@ -1,7 +1,7 @@
package com.yaoyuan.jiscuss.util;
/**
* @author yaoyuan2.chu
* @author Chuyaoyuan
* @Title: 去除内容页代码里的HTML标签
* @Package com.yaoyuan.jiscuss.util
* @Description:
@@ -1,4 +1,4 @@
-- V2.0.2: RBAC foundation + admin upgrade logs (Spring Boot 3 optimization)
-- V4: RBAC foundation + admin upgrade logs (Spring Boot 3 optimization)
CREATE TABLE IF NOT EXISTS rbac_role
(
@@ -1,4 +1,4 @@
-- V2.0.3: Audit log for admin operations (Spring Boot 3 optimization)
-- V5: Audit log for admin operations (Spring Boot 3 optimization)
CREATE TABLE IF NOT EXISTS audit_log
(
@@ -7,7 +7,7 @@
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<title>${title}</title>
<#include "admin-commjs.ftl"/>
<#include "admin/admin-commjs.ftl"/>
<style>
body { background: #f6f7fb; }
.admin-header { background: #1f2937; color: #fff; padding: 12px 18px; }
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 操作审计日志" active=active adminName=adminName>
<h2 class="ui header">操作审计日志</h2>
<p class="small-muted">记录所有管理员的后台操作,包括角色管理、用户管理、内容管理等。</p>
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 文章管理" active=active adminName=adminName>
<h2 class="ui header">文章管理</h2>
<table class="ui striped celled table">
+1 -1
View File
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 总览" active=active adminName=adminName>
<h2 class="ui header">系统总览</h2>
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 插件管理(预留)" active=active adminName=adminName>
<h2 class="ui header">插件管理(预留)</h2>
<div class="ui info message">
+3 -3
View File
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 评论管理" active=active adminName=adminName>
<h2 class="ui header">评论管理</h2>
<table class="ui compact celled table">
@@ -16,8 +16,8 @@
<#list posts as p>
<tr>
<td>${p.id}</td>
<td>${discussionNames[p.discussionId]!('#'+p.discussionId?c)}</td>
<td>${userNames[p.createId]!('#'+p.createId?c)}</td>
<td>${discussionNames[p.discussionId?c]!('#'+p.discussionId?c)}</td>
<td>${userNames[p.createId?c]!('#'+p.createId?c)}</td>
<td><div style="max-width:420px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">${p.content!""}</div></td>
<td>${p.createTime?string('yyyy-MM-dd HH:mm:ss')!""}</td>
<td>
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 主题管理(预留)" active=active adminName=adminName>
<h2 class="ui header">主题管理(预留)</h2>
<div class="ui info message">
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 版本升级日志" active=active adminName=adminName>
<h2 class="ui header">版本功能升级日志</h2>
<p class="small-muted">记录每次升级新增与修复内容,便于发布追踪与回滚评估。</p>
+2 -2
View File
@@ -1,4 +1,4 @@
<#import "admin-shell.ftl" as shell>
<#import "admin/admin-shell.ftl" as shell>
<@shell.page title="后台管理 - 用户与角色" active=active adminName=adminName>
<h2 class="ui header">用户与角色管理</h2>
<p class="small-muted">简单 RBAC:用户可绑定多个角色,拥有 ADMIN 角色的用户可以进入后台管理。</p>
@@ -59,7 +59,7 @@
<div class="field">
<div class="ui checkbox">
<input type="checkbox" name="roleIds" value="${r.id}"
<#if userRoleIds[u.id]?? && userRoleIds[u.id]?seq_contains(r.id)>checked</#if>>
<#if userRoleIds[u.id?c]?? && userRoleIds[u.id?c]?seq_contains(r.id)>checked</#if>>
<label>${r.code}</label>
</div>
</div>