ORM(JPA,Hibernate)의 미세 권한 제어 1
라고 하면 뭔지 알아듣기 힘들겠지?
일반적으로 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; }
현재 이정도 코드로 하면 되지 않을까 생각하고 있다. 다른 한개의 테이블에 권한을 설정해놓고 다른 테이블의 데이터에 대한 권한을 관리할 수 있다.
데이터가 늘어남에 따라 이 테이블도 비대해지는 문제가 있기는 한데… 문제가 생기면 다시 생각해봐야겠다.