2012. 8. 17. 20:35 IT

배경 : xacml 을 버튼에 대해서도 적용해달란다.

이미 적용된 상태에서 또다른 솔루션 (spring security 등등)을 적용하는 경우 관리 비용이 증가할 것을 우려하여, 한곳에서 관리하고 싶어했다. 


구현방향 : interceptor대신 validation을 처리할 controller 와 javascript function 을 제공. 


1. javascript로 object (button, image etc.. ) 의 id를  전달.

2. controller에 해당 object 에 대한 권한 여부를 확인

3. 결과에 따라 disable, enable 처리


단점 : 

- 버튼 권한까지 서버에게 물어봐야 하니???

- id가 중복될 경우 잘못 처리될 수 있음.


구현내용

1. javascript function

$.authorizeWebElement = function(objectid){

$.ajax({

type: "POST",

dataType: "json",

url:  "/authorize" ,

data : {"objectId":objectid},

success: function(data){

$(objectid)[data.message]();

}

});

};


2. controller

public @ResponseBody Map<String, Object> authorize(@RequestParam(value="objectId") String objectId, HttpServletRequest request){

ACManager acm = ACManager.getInstance(this.pdpPath); 

                List<String> roles = getRoles(request); // get user role from session or persistence data 

                Map map = new HashMap(); 

if(acm.evaluate(roles, objectId)){

map.put("message ", " show");

}else{

map.put("message ", " hide");

}

return map;

}


3. screen 

function xxx(){

    $.authorizeUI("#OnlyAdminAvailableButton");

}


cf) 주의사항 

반드시 elementId 는 유일해야한다. ...

posted by smplnote