หมวดหมู่: Spring Boot

Spring Security: RepositorySpring Security: Repository

หลังจากสร้าง Folder repository แล้ว คุณต้องมีไฟล์ Interface เพื่อให้ Spring Data JPA จัดการ Query ข้อมูลจาก SQL Server ครับ


สร้างไฟล์ Repository


UserRepository.java

src/main/java/com/example/demo/repository/UserRepository.java
ไฟล์นี้เปรียบเสมือนการสั่ง User::where ('username', $username) ->first () ใน Laravel เพื่อหาผู้ใช้

package com.example.demo.repository; import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional; @Repository
public interface UserRepository extends JpaRepository<User, Long> { // เหมือนการเช็ค User::where ('username', $username) ->first () ใน Laravel Optional<User> findByUsername (String username) ; // เช็คว่ามี Email นี้หรือยัง (สำหรับ Register) Boolean existsByEmail (String email) ;
}

RoleRepository.java

src/main/java/com/example/demo/repository/RoleRepository.java
ไฟล์นี้เปรียบเสมือนการสั่ง Role::where ('name', $name) ->first () ใน Laravel เพื่อใช้เช็คสิทธิ์ของผู้ใช้

package com.example.demo.repository; import com.example.demo.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional; @Repository
public interface RoleRepository extends JpaRepository<Role, Long> { // ค้นหา Role ด้วยชื่อ เช่น 'ROLE_ADMIN' หรือ 'ROLE_USER' Optional<Role> findByName (String name) ; // เช็คว่ามี Role นี้อยู่ในระบบหรือยัง Boolean existsByName (String name) ;
}

PermissionRepository.java

src/main/java/com/example/demo/repository/PermissionRepository.java
ไฟล์นี้ใช้จัดการสิทธิ์ย่อย ๆ เช่น การเช็คว่า User คนนี้สามารถ ‘edit-post’ ได้หรือไม่

package com.example.demo.repository; import com.example.demo.entity.Permission;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
import java.util.Set; @Repository
public interface PermissionRepository extends JpaRepository<Permission, Long> { // ค้นหาสิทธิ์ด้วยชื่อ เช่น 'user-create' Optional<Permission> findByName (String name) ; // ค้นหาหลาย ๆ Permission พร้อมกัน (ใช้ตอนประกาศสิทธิ์ให้ Role) Set<Permission> findByNameIn (Set<String> names) ;
}

วิธีการนำไปใช้งาน

เมื่อคุณมี Repository ครบแล้ว คุณสามารถเรียกใช้ใน Service เพื่อจัดการสิทธิ์ได้ง่าย ๆ เหมือนใน Laravel เลยครับ

@Service
public class UserService { @Autowired private UserRepository userRepository; @Autowired private RoleRepository roleRepository; public void assignRoleToUser (Long userId, String roleName) { User user = userRepository.findById (userId) .orElseThrow () ; Role role = roleRepository.findByName (roleName) .orElseThrow () ; user.getRoles () .add (role) ; userRepository.save (user) ; // เหมือน $user->assignRole ($role) }
}

ข้อควรระวัง

  • Package Name: ตรวจสอบบรรทัด package com.example.demo.repository; ให้ตรงกับชื่อโปรเจกต์จริงของคุณ
  • Imports: ตรวจสอบว่าได้ Import Entity (com.example.demo.entity.*) เข้ามาถูกต้อง