ORM(JPA,Hibernate)의 미세 권한 제어 1

less than 1 minute read

라고 하면 뭔지 알아듣기 힘들겠지?

일반적으로 spring security와 같은 권한프레임워크의 권한관리는 주소패턴을 따른다. 조금 변경한다고 해도 컨트롤러 서비스별로 권한을 처리한다.

하지만 가끔.. 특정 데이터에 대해서는 이런게 필요한 경우가 있다. 각 테이블별 권한제어 또는 각 테이블의 row당 접근권한 제어..

ORM interceptor를 이용해서 이 부분을 처리할 수 있지 않을까 싶다.

@Entity @Table( name = “T_PRECISE_AUTH”, indexes = { @Index(name=”idx_precise_auth_unique”, columnList = “groupName,tableName,tableObjectId”, unique = true) }) @org.hibernate.annotations.Cache(region = “Beansugar.Auth”, usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @DynamicInsert @DynamicUpdate @Getter @Setter public class PreciseAuth extends BaseModel {

@Id // @GeneratedValue(strategy = GenerationType.AUTO) private Long id;

/** * Group.name */ @Column(length = 20, nullable = false) private String groupName;

/** * 각 테이블의 이름 * 예) tbl_zone */ @Column(length = 30, nullable = false) private String tableName;

/** * table.id * 각 테이블 row의 id값 * -1인 경우에는 모든 값에 접근가능 */ private Long tableObjectId;

private boolean readable; private boolean writable;

@Column(length = 100) private String description; }

현재 이정도 코드로 하면 되지 않을까 생각하고 있다. 다른 한개의 테이블에 권한을 설정해놓고 다른 테이블의 데이터에 대한 권한을 관리할 수 있다.

데이터가 늘어남에 따라 이 테이블도 비대해지는 문제가 있기는 한데… 문제가 생기면 다시 생각해봐야겠다.