初步添加了用户权限区别对待。

This commit is contained in:
高子兴 2024-07-05 02:21:59 +08:00
parent 2c12fc075f
commit f104c89d08
4 changed files with 28 additions and 4 deletions

View File

@ -6,7 +6,10 @@ import org.cmh.backend.NewsManagement.dto.MessageResponse;
import org.cmh.backend.NewsManagement.dto.NewsRequest; import org.cmh.backend.NewsManagement.dto.NewsRequest;
import org.cmh.backend.NewsManagement.model.News; import org.cmh.backend.NewsManagement.model.News;
import org.cmh.backend.NewsManagement.service.NewsService; import org.cmh.backend.NewsManagement.service.NewsService;
import org.cmh.backend.Utils.JwtUtil;
import org.cmh.backend.Utils.JwtVerify; import org.cmh.backend.Utils.JwtVerify;
import org.cmh.backend.authentication.model.UserHS;
import org.cmh.backend.authentication.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -19,14 +22,26 @@ public class NewsController {
@Autowired @Autowired
private NewsService newsService; private NewsService newsService;
@Autowired
private UserService userService;
@GetMapping @GetMapping
@JwtVerify @JwtVerify
public ResponseEntity<GetNewsListResponse> getNewsByRange(@RequestParam Integer start, @RequestParam Integer end, @RequestParam String token) { public ResponseEntity<GetNewsListResponse> getNewsByRange(@RequestParam Integer start, @RequestParam Integer end, @RequestParam String token) {
String username = JwtUtil.extractUsername(token);
UserHS user = userService.getUserByUsername(username);
// TODO:完善用户权限
if (user.getSuperAdmin()) {
} else {
}
if (start >= end) { if (start >= end) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} }
long newsCount = newsService.getNewsCount(); long newsCount = newsService.getNewsCount();
return new ResponseEntity<>(new GetNewsListResponse(newsCount, newsService.getNewsByRange(start, end)), HttpStatus.OK); return new ResponseEntity<>(new GetNewsListResponse(newsCount, newsService.getNewsByRange(start, end, user)), HttpStatus.OK);
} }
@GetMapping("/{id}") @GetMapping("/{id}")

View File

@ -31,6 +31,6 @@ public class News {
@CreationTimestamp @CreationTimestamp
private LocalDateTime createdAt; private LocalDateTime createdAt;
// TODO:添加外键绑定
private String tenant; private String tenant;
} }

View File

@ -7,4 +7,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
public interface NewsRepository extends JpaRepository<News, Long> { public interface NewsRepository extends JpaRepository<News, Long> {
Page<News> findAllByOrderByIdDesc(Pageable pageable); Page<News> findAllByOrderByIdDesc(Pageable pageable);
Page<News> findByTenantOrderByIdDesc(String tenant, Pageable pageable);
} }

View File

@ -4,6 +4,7 @@ import jakarta.persistence.EntityNotFoundException;
import org.cmh.backend.NewsManagement.dto.NewsRequest; import org.cmh.backend.NewsManagement.dto.NewsRequest;
import org.cmh.backend.NewsManagement.model.News; import org.cmh.backend.NewsManagement.model.News;
import org.cmh.backend.NewsManagement.repository.NewsRepository; import org.cmh.backend.NewsManagement.repository.NewsRepository;
import org.cmh.backend.authentication.model.UserHS;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
@ -18,7 +19,7 @@ public class NewsService {
@Autowired @Autowired
private NewsRepository newsRepository; private NewsRepository newsRepository;
public List<News> getNewsByRange(int start, int end) { public List<News> getNewsByRange(int start, int end, UserHS user) {
if (start < 0 || end <= start) { if (start < 0 || end <= start) {
throw new IllegalArgumentException("Invalid start or end range"); throw new IllegalArgumentException("Invalid start or end range");
} }
@ -31,7 +32,12 @@ public class NewsService {
for (int pageNumber = startPageNumber; pageNumber <= endPageNumber; pageNumber++) { for (int pageNumber = startPageNumber; pageNumber <= endPageNumber; pageNumber++) {
Pageable pageable = PageRequest.of(pageNumber, pageSize); Pageable pageable = PageRequest.of(pageNumber, pageSize);
Page<News> newsPage = newsRepository.findAllByOrderByIdDesc(pageable); Page<News> newsPage = null;
if (user.getSuperAdmin()) {
newsPage = newsRepository.findAllByOrderByIdDesc(pageable);
} else {
newsPage = newsRepository.findByTenantOrderByIdDesc(user.getUsername(), pageable);
}
if (newsPage.hasContent()) { if (newsPage.hasContent()) {
result.addAll(newsPage.getContent()); result.addAll(newsPage.getContent());