新增下载人查询接口,并把管理员判定收敛到服务端
- Gallery 增加 downloaderName,仅在管理员查询任务列表时填充;普通用户 既不获取也不下发他人身份 - 新增 GET /GalleryManage/downloader?gid=&AuthCode=,按 gid 返回实际下载人 昵称,非管理员一律拒绝 - /validate 下发 isAdmin,前端不再各自硬编码 userId === 3 - 管理员判定统一走 UserService.ADMIN_USER_ID - 补充列表填充、按 gid 查询的权限与缺任务分支测试
This commit is contained in:
@@ -67,6 +67,14 @@ public class GalleryManageController {
|
||||
return galleryManageService.deleteGalleryByGid(gid, AuthCode);
|
||||
}
|
||||
|
||||
/** 按 gid 查实际下载人昵称,仅管理员可用。 */
|
||||
@GetMapping("/downloader")
|
||||
public String selectDownloader(Integer gid, String AuthCode){
|
||||
if(gid == null)
|
||||
return Response._failure("参数不全");
|
||||
return galleryManageService.selectDownloaderByGid(gid, AuthCode);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/collect")
|
||||
public String collectGallery(Integer gid, String AuthCode){
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.lion.lionwebsite.Service.PublicService;
|
||||
import com.lion.lionwebsite.Service.QueryService;
|
||||
import com.lion.lionwebsite.Service.RemoteService;
|
||||
import com.lion.lionwebsite.Service.SubService;
|
||||
import com.lion.lionwebsite.Service.UserService;
|
||||
import com.lion.lionwebsite.Util.Response;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
@@ -82,9 +83,12 @@ public class PublicController {
|
||||
Response response = Response.generateResponse();
|
||||
User user = publicService.getUserId(AuthCode);
|
||||
String isAvailable = remoteService.isDead() ? "false": "true";
|
||||
// 管理员标记随登录一起下发,前端据此决定是否显示下载人信息与筛选。
|
||||
String isAdmin = user.getId() == UserService.ADMIN_USER_ID ? "true" : "false";
|
||||
response.success(String.format("{\"userId\": %d, " +
|
||||
"\"username\": \"%s\", " +
|
||||
"\"isAvailable\": %s}", user.getId(), user.getUsername(), isAvailable));
|
||||
"\"isAvailable\": %s, " +
|
||||
"\"isAdmin\": %s}", user.getId(), user.getUsername(), isAvailable, isAdmin));
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ public interface UserMapper {
|
||||
@Select("select * from User where username=#{username}")
|
||||
User selectUserByUsername(String username);
|
||||
|
||||
@Select("select * from User where id=#{id}")
|
||||
User selectUserById(int id);
|
||||
|
||||
@Select("select AuthCode from User")
|
||||
String[] selectAllAuthCode();
|
||||
|
||||
|
||||
@@ -48,6 +48,11 @@ public class Gallery {
|
||||
@JsonProperty("downloader")
|
||||
private int downloader; //下载人
|
||||
|
||||
/** 下载人昵称。仅管理员查询时填充,普通用户拿不到,避免暴露他人信息。 */
|
||||
@JsonProperty("downloaderName")
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
private String downloaderName;
|
||||
|
||||
@JsonProperty("collector")
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
private String collector; //收藏人
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.lion.lionwebsite.Util.GalleryUtil;
|
||||
import com.lion.lionwebsite.Util.Response;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
import tools.jackson.databind.node.ObjectNode;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.Data;
|
||||
@@ -254,10 +255,56 @@ public class GalleryManageService {
|
||||
}
|
||||
}
|
||||
|
||||
// 下载人昵称只对管理员下发;一次建表避免逐条查询。
|
||||
if (userId == UserService.ADMIN_USER_ID)
|
||||
fillDownloaderNames(galleries);
|
||||
|
||||
response.success(new ObjectMapper().valueToTree(galleries).toString());
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
/** 给任务列表补上下载人昵称,找不到用户时保留空值而不是报错。 */
|
||||
private void fillDownloaderNames(Gallery[] galleries) {
|
||||
User[] users = userMapper.selectAllUser();
|
||||
Map<Integer, String> names = new HashMap<>();
|
||||
if (users != null)
|
||||
for (User user : users)
|
||||
names.put(user.getId(), user.getUsername());
|
||||
|
||||
for (Gallery gallery : galleries)
|
||||
gallery.setDownloaderName(names.get(gallery.getDownloader()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询某个任务的实际下载人昵称。
|
||||
* 只有管理员可调用,普通用户一律拒绝,避免暴露他人身份。
|
||||
*
|
||||
* @param gid 任务 gid
|
||||
* @param AuthCode 调用方授权码
|
||||
*/
|
||||
public String selectDownloaderByGid(int gid, String AuthCode) {
|
||||
Response response = Response.generateResponse();
|
||||
User requester = userMapper.selectUserByAuthCode(AuthCode);
|
||||
if (requester == null || requester.getId() != UserService.ADMIN_USER_ID) {
|
||||
response.failure("无权查看下载人");
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
Gallery gallery = galleryMapper.selectGalleryByGid(gid);
|
||||
if (gallery == null) {
|
||||
response.failure("任务不存在");
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
User downloader = userMapper.selectUserById(gallery.getDownloader());
|
||||
ObjectNode node = objectMapper.createObjectNode();
|
||||
node.put("gid", gid);
|
||||
node.put("downloader", gallery.getDownloader());
|
||||
node.put("downloaderName", downloader == null ? "" : downloader.getUsername());
|
||||
response.success(node);
|
||||
return response.toJSONString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过图片名查询图片
|
||||
*
|
||||
|
||||
@@ -135,4 +135,18 @@ public class UserService{
|
||||
public int getUserId(String AuthCode){
|
||||
return userMapper.selectUserByAuthCode(AuthCode).getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员判定。项目没有角色表,历史上以 id=3(狮子)作为管理员,
|
||||
* 前端也是用 userId === 3 判断;这里把这个约定收敛到一处,
|
||||
* 权限相关的服务端校验统一走它。
|
||||
*/
|
||||
public static final int ADMIN_USER_ID = 3;
|
||||
|
||||
public boolean isAdmin(String AuthCode){
|
||||
if(AuthCode == null)
|
||||
return false;
|
||||
User user = userMapper.selectUserByAuthCode(AuthCode);
|
||||
return user != null && user.getId() == ADMIN_USER_ID;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user