74 lines
2.4 KiB
Java
74 lines
2.4 KiB
Java
|
|
package com.gcsc.guide.controller;
|
||
|
|
|
||
|
|
import com.gcsc.guide.dto.AddPermissionRequest;
|
||
|
|
import com.gcsc.guide.dto.CreateRoleRequest;
|
||
|
|
import com.gcsc.guide.dto.RoleResponse;
|
||
|
|
import com.gcsc.guide.service.RoleService;
|
||
|
|
import jakarta.validation.Valid;
|
||
|
|
import lombok.RequiredArgsConstructor;
|
||
|
|
import org.springframework.http.ResponseEntity;
|
||
|
|
import org.springframework.web.bind.annotation.*;
|
||
|
|
|
||
|
|
import java.net.URI;
|
||
|
|
import java.util.List;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 관리자 롤/권한 관리 API
|
||
|
|
*/
|
||
|
|
@RestController
|
||
|
|
@RequestMapping("/api/admin/roles")
|
||
|
|
@RequiredArgsConstructor
|
||
|
|
public class AdminRoleController {
|
||
|
|
|
||
|
|
private final RoleService roleService;
|
||
|
|
|
||
|
|
/** 전체 롤 목록 */
|
||
|
|
@GetMapping
|
||
|
|
public ResponseEntity<List<RoleResponse>> getRoles() {
|
||
|
|
return ResponseEntity.ok(roleService.getRoles());
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 롤 생성 */
|
||
|
|
@PostMapping
|
||
|
|
public ResponseEntity<RoleResponse> createRole(@Valid @RequestBody CreateRoleRequest request) {
|
||
|
|
RoleResponse role = roleService.createRole(request.name(), request.description());
|
||
|
|
return ResponseEntity.created(URI.create("/api/admin/roles/" + role.id())).body(role);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 롤 수정 */
|
||
|
|
@PutMapping("/{id}")
|
||
|
|
public ResponseEntity<RoleResponse> updateRole(
|
||
|
|
@PathVariable Long id,
|
||
|
|
@Valid @RequestBody CreateRoleRequest request) {
|
||
|
|
return ResponseEntity.ok(roleService.updateRole(id, request.name(), request.description()));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 롤 삭제 */
|
||
|
|
@DeleteMapping("/{id}")
|
||
|
|
public ResponseEntity<Void> deleteRole(@PathVariable Long id) {
|
||
|
|
roleService.deleteRole(id);
|
||
|
|
return ResponseEntity.noContent().build();
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 롤의 URL 패턴 목록 */
|
||
|
|
@GetMapping("/{id}/permissions")
|
||
|
|
public ResponseEntity<List<String>> getPermissions(@PathVariable Long id) {
|
||
|
|
return ResponseEntity.ok(roleService.getPermissions(id));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** URL 패턴 추가 */
|
||
|
|
@PostMapping("/{id}/permissions")
|
||
|
|
public ResponseEntity<RoleResponse> addPermission(
|
||
|
|
@PathVariable Long id,
|
||
|
|
@Valid @RequestBody AddPermissionRequest request) {
|
||
|
|
return ResponseEntity.ok(roleService.addPermission(id, request.urlPattern()));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** URL 패턴 삭제 */
|
||
|
|
@DeleteMapping("/permissions/{permissionId}")
|
||
|
|
public ResponseEntity<Void> deletePermission(@PathVariable Long permissionId) {
|
||
|
|
roleService.deletePermission(permissionId);
|
||
|
|
return ResponseEntity.noContent().build();
|
||
|
|
}
|
||
|
|
}
|