generated from Java-2025Fall/final-vibevault-template
完成作业
This commit is contained in:
parent
9a9f5d4eb2
commit
a8e82ee558
@ -186,12 +186,12 @@ public class PlaylistServiceImpl implements PlaylistService {
|
||||
* [Challenge] 检查用户是否有权限操作指定歌单
|
||||
* 规则:歌单所有者或管理员可以操作
|
||||
*/
|
||||
private void checkPermission(Playlist playlist, String username) {
|
||||
protected void checkPermission(Playlist playlist, String username) {
|
||||
User currentUser = userRepository.findByUsername(username)
|
||||
.orElseThrow(() -> new ResourceNotFoundException("User not found: " + username));
|
||||
|
||||
// 检查是否是歌单所有者或管理员
|
||||
if (!playlist.getOwner().getUsername().equals(username) && !currentUser.getRole().equals("ROLE_ADMIN")) {
|
||||
if (!playlist.getOwner().getUsername().equals(currentUser.getUsername()) && !currentUser.getRole().equals("ROLE_ADMIN")) {
|
||||
throw new UnauthorizedException("You don't have permission to modify this playlist");
|
||||
}
|
||||
}
|
||||
|
||||
80
src/test/java/com/vibevault/service/PermissionCheckTest.java
Normal file
80
src/test/java/com/vibevault/service/PermissionCheckTest.java
Normal file
@ -0,0 +1,80 @@
|
||||
package com.vibevault.service;
|
||||
|
||||
import com.vibevault.exception.UnauthorizedException;
|
||||
import com.vibevault.model.Playlist;
|
||||
import com.vibevault.model.User;
|
||||
import com.vibevault.repository.UserRepository;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class PermissionCheckTest {
|
||||
|
||||
@Mock
|
||||
private UserRepository userRepository;
|
||||
|
||||
private PlaylistServiceImpl playlistService;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
MockitoAnnotations.openMocks(this);
|
||||
// 创建一个没有其他依赖的 PlaylistServiceImpl 实例
|
||||
playlistService = new PlaylistServiceImpl(null, userRepository);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOwnerCanModifyPlaylist() {
|
||||
// 创建用户和歌单
|
||||
User owner = new User("testuser", "password");
|
||||
owner.setRole("ROLE_USER");
|
||||
Playlist playlist = new Playlist("Test Playlist", owner);
|
||||
|
||||
// 模拟用户存储库
|
||||
when(userRepository.findByUsername("testuser")).thenReturn(Optional.of(owner));
|
||||
|
||||
// 所有者应该能够修改自己的歌单,不应该抛出异常
|
||||
assertDoesNotThrow(() -> playlistService.checkPermission(playlist, "testuser"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNonOwnerCannotModifyPlaylist() {
|
||||
// 创建所有者用户和歌单
|
||||
User owner = new User("owner", "password");
|
||||
owner.setRole("ROLE_USER");
|
||||
Playlist playlist = new Playlist("Test Playlist", owner);
|
||||
|
||||
// 创建另一个用户
|
||||
User otherUser = new User("otheruser", "password");
|
||||
otherUser.setRole("ROLE_USER");
|
||||
|
||||
// 模拟用户存储库
|
||||
when(userRepository.findByUsername("otheruser")).thenReturn(Optional.of(otherUser));
|
||||
|
||||
// 非所有者不应该能够修改歌单,应该抛出 UnauthorizedException
|
||||
assertThrows(UnauthorizedException.class, () -> playlistService.checkPermission(playlist, "otheruser"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAdminCanModifyAnyPlaylist() {
|
||||
// 创建所有者用户和歌单
|
||||
User owner = new User("owner", "password");
|
||||
owner.setRole("ROLE_USER");
|
||||
Playlist playlist = new Playlist("Test Playlist", owner);
|
||||
|
||||
// 创建管理员用户
|
||||
User adminUser = new User("admin", "password");
|
||||
adminUser.setRole("ROLE_ADMIN");
|
||||
|
||||
// 模拟用户存储库
|
||||
when(userRepository.findByUsername("admin")).thenReturn(Optional.of(adminUser));
|
||||
|
||||
// 管理员应该能够修改任何歌单,不应该抛出异常
|
||||
assertDoesNotThrow(() -> playlistService.checkPermission(playlist, "admin"));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user