7.Access Control

사용자 정의 리소스 (view resource) 에 대해 DB 기반의 permission 을 지정할 수 있으며(Data 관리는 IAM Admin 에서 제공) 이에 대한 허가된 Permission 의 확인을 위해 IAM Core 에서는 로그인한 사용자가 해당 view resource 에 대해 나열한 permission 을 가지고 있는지 체크하기 위한 API(서비스) 및 이를 활용하는 Tag Library 를 제공한다.

Spring Security 의 ACL 에서 사용하는 것과 마찬가지로 Bit Masking 에 의한 permission 을 처리할 수 있도록 하였다.

SI 프로젝트에서 일반적으로 요구하는 화면에 대한 READ, WRITE, CREATE, DELETE, ADMINISTRATION .. 에 대한 permission 확인을 위한 기능으로 활용한다.

permission 을 체크하기 원하는 자바 코드에서 아래의 viewResourceAccessService 를 통하여 권한이 있는지 체크한다. (AOP 를 적용하여 permission 체크 로직을 공통화하는 것이 좋음. - 추후 가이드 예정)

boolean result = viewResourceAccessService.isGranted("updateCategory", Arrays.asList(new Integer[] { 3 }))

위에서 3 은 bit mask 표시로 0..00011 이며 이는 READ,WRITE 권한을 나타낸다. 위에서 3 에 해당하는 bit mask 를 얻기 위해 ExtBasePermission.getPermissionMask("READ,WRITE") 와 같이 사용할 수도 있다.

jsp 화면에서 아래와 같이 서비스 호출 function 영역이나 버튼 영역을 Tag 로 감싸 권한이 있는 경우에만 HTML 이 그려지도록 적용한다.

<%@ taglib uri="/WEB-INF/anyframe-iam.tld" prefix="iam" %>
..
<iam:access hasPermission="${iam:getPermissionMask(\"CREATE\")}" viewResourceId="listCategory">
 function fncAddCategoryView() {
  ..
 }
</iam:access>
..
<iam:access hasPermission="${iam:getPermissionMask(\"CREATE\")}" viewResourceId="listCategory">
  Add 버튼 영역
</iam:access>

위와 같이 화면표시를 제한한다 하더라도 실제로 권한 처리가 된것은 아님에 유의한다. 보안상 서버단에서 반드시 실제적인 방어(Web request authorization, method authorization, view resource ACL, domain 객체 ACL ..)가 필요하다.