Commit 1d64944a authored by Phùng Quốc Toàn's avatar Phùng Quốc Toàn

feat: add permission

parent 7a114ddc
package com.devteria.identityservice.configuration;
import com.devteria.identityservice.entity.User;
import com.devteria.identityservice.enums.Role;
import com.devteria.identityservice.repository.UserRepository;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
......@@ -12,8 +11,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.HashSet;
@Configuration
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
......@@ -26,13 +23,13 @@ public class ApplicationInitConfig {
ApplicationRunner runner(UserRepository userRepository) {
return args -> {
if (!userRepository.existsByUsername("admin")) {
var roles = new HashSet<String>();
roles.add(Role.ADMIN.name());
// var roles = new HashSet<>();
// roles.add(Role.ADMIN.name());
User user = User.builder()
.username("admin")
.password(passwordEncoder.encode("admin"))
.roles(roles)
// .roles(roles)
.build();
userRepository.save(user);
......
package com.devteria.identityservice.controller;
import com.devteria.identityservice.dto.request.ApiResponse;
import com.devteria.identityservice.dto.request.PermissionRequest;
import com.devteria.identityservice.dto.response.PermissionResponse;
import com.devteria.identityservice.service.PermissionService;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/permissions")
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
@Slf4j
public class PermissionController {
PermissionService permissionService;
@PostMapping
ApiResponse<PermissionResponse> create(@RequestBody PermissionRequest request) {
return ApiResponse.<PermissionResponse>builder()
.result(permissionService.create(request))
.build();
}
@GetMapping
ApiResponse<List<PermissionResponse>> getAll() {
return ApiResponse.<List<PermissionResponse>>builder()
.result(permissionService.getAll())
.build();
}
@DeleteMapping
ApiResponse<String> delete(@RequestParam String permission) {
permissionService.delete(permission);
return ApiResponse.<String>builder()
.result("Permission deleted successfully")
.build();
}
}
package com.devteria.identityservice.dto.request;
import lombok.*;
import lombok.experimental.FieldDefaults;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PermissionRequest {
String name;
String description;
}
package com.devteria.identityservice.dto.response;
public class PermissionResponse {
}
package com.devteria.identityservice.dto.response;
import com.devteria.identityservice.entity.Role;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -17,6 +18,6 @@ public class UserResponse {
String firstName;
String lastName;
LocalDate dob;
Set<String> roles;
Set<Role> roles;
}
package com.devteria.identityservice.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.*;
import lombok.experimental.FieldDefaults;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
public class Permission {
@Id
String name;
String description;
}
package com.devteria.identityservice.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import lombok.*;
import lombok.experimental.FieldDefaults;
import java.util.Set;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
public class Role {
@Id
String name;
String description;
@ManyToMany
Set<Permission> permissions;
}
package com.devteria.identityservice.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -26,6 +23,8 @@ public class User {
String firstName;
String lastName;
LocalDate dob;
Set<String> roles;
@ManyToMany
Set<Role> roles;
}
package com.devteria.identityservice.mapper;
import com.devteria.identityservice.dto.request.PermissionRequest;
import com.devteria.identityservice.dto.response.PermissionResponse;
import com.devteria.identityservice.entity.Permission;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface PermissionMapper {
Permission toPermission(PermissionRequest permissionRequest);
PermissionResponse toPermissionResponse(Permission permission);
}
package com.devteria.identityservice.repository;
import com.devteria.identityservice.entity.Permission;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PermissionRepository extends JpaRepository<Permission, String> {
}
......@@ -22,7 +22,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.ParseException;
import java.time.Instant;
......@@ -104,10 +103,10 @@ public class AuthenticationService {
private String buildScope(User user) {
StringJoiner stringJoiner = new StringJoiner("");
if (!CollectionUtils.isEmpty(user.getRoles())) {
user.getRoles().forEach(stringJoiner::add);
}
//
// if (!CollectionUtils.isEmpty(user.getRoles())) {
// user.getRoles().forEach(stringJoiner::add);
// }
return stringJoiner.toString();
}
......
package com.devteria.identityservice.service;
import com.devteria.identityservice.dto.request.PermissionRequest;
import com.devteria.identityservice.dto.response.PermissionResponse;
import com.devteria.identityservice.entity.Permission;
import com.devteria.identityservice.mapper.PermissionMapper;
import com.devteria.identityservice.repository.PermissionRepository;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
@Slf4j
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class PermissionService {
PermissionRepository permissionRepository;
PermissionMapper permissionMapper;
public PermissionResponse create(PermissionRequest request) {
Permission permission = permissionMapper.toPermission(request);
permission = permissionRepository.save(permission);
return permissionMapper.toPermissionResponse(permission);
}
public List<PermissionResponse> getAll() {
var permissions = permissionRepository.findAll();
return permissions.stream().map(permissionMapper::toPermissionResponse).toList();
}
public void delete(String permission) {
permissionRepository.deleteById(permission);
}
}
......@@ -4,7 +4,6 @@ import com.devteria.identityservice.dto.request.UserCreationRequest;
import com.devteria.identityservice.dto.request.UserUpdateRequest;
import com.devteria.identityservice.dto.response.UserResponse;
import com.devteria.identityservice.entity.User;
import com.devteria.identityservice.enums.Role;
import com.devteria.identityservice.exception.AppException;
import com.devteria.identityservice.exception.ErrorCode;
import com.devteria.identityservice.mapper.UserMapper;
......@@ -19,7 +18,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
@Service
......@@ -38,9 +36,9 @@ public class UserService {
User user = userMapper.toUser(request);
user.setPassword(passwordEncoder.encode(request.getPassword()));
HashSet<String> roles = new HashSet<>();
roles.add(Role.USER.name());
user.setRoles(roles);
// HashSet<String> roles = new HashSet<>();
// roles.add(Role.USER.name());
// user.setRoles(roles);
return userMapper.toUserResponse(userRepository.save(user));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment