2012-07-24 2 views
3

Deadbolt의 모듈을 사용하면 restrictedResource를 ressource 이름과 뷰의 매개 변수로 확인할 수 있습니다.Deadbolt - Play Framework - @RestrictedResource를 컨트롤러의 매개 변수로 확인하는 방법은 무엇입니까?

내보기에 예를 들어

, 나는 그것을 가지고, 그것은 잘 작동 :

#{deadbolt.restrictedResource resourceKeys:['Domain'] , resourceParameters:['domainid':domain.id]} 
    <li><a href="@{Admin.showDomain(domain.id)}">${domain.title}</a></li> 
#{/deadbolt.restrictedResource} 

을하지만 내 컨트롤러, 난 그냥 ressource 이름을 확인할 수 있습니다하지만 난 그것을 확인하는 방법을 찾을 수 없습니다 내 RestrictedResourcesHandler가 domainid를 전달합니다.

나는 그런 일 할 수있는 솔루션을 찾고 있어요 : 사전에

@RestrictedResource(name = {"Domain"}, params = {domainid}) 
public static void showDomain(String domainid) 
{ 
} 

감사를

답변

4

그것은 주석에 동적 정보를 가질 수 아니지만, 당신은 이름을 정의 PARAMS을 사용할 수 있습니다 요청에 들어오는 값의 그러나이 정보는 맵을 예상하기 때문에 현재 처리기로 전달되지 않습니다. restrictedResource 태그의 매개 변수 맵을 전달할 수 있지만 주석에서이 작업을 수행 할 수 없으므로 빈 맵이 핸들러로 전달됩니다.

가장 좋은 방법은 요청 개체에서 잘 알려진 매개 변수 이름을 가져 오는 것입니다. 이전 버전과의 호환성을 파괴하지 않고이를 수행하는 가장 좋은 방법에 대해 다시 생각해 볼 필요가 있습니다.

스티브 (데드 볼트의 저자)

1

나는 방법은, 내가 생각하는 최고의 문제가되지 해결 발견했습니다,하지만 스티브 Chaloner의 솔루션 (데드 볼트의 창조자)이며, 그것은 작동합니다.

예를 들어, 컨트롤러의 메소드 인수는 "ID"라는, 당신은 당신의 checkAccess 메소드 내에서이 ID를 확인하려는 경우 :

// Controller's method : 
@RestrictedResource(name = {"Domain"}) 
public static void showDomain(String id){} 

은 그냥 checkAccess 메소드지도 "resourceParameters의 시작 부분 확인 "빈이며, 매개 변수를 얻기 위해 요청 객체를 사용

public AccessResult checkAccess(List<String> resourceNames, 
           Map<String, String> resourceParameters) 
{  
    Map<String, String> hashm = new HashMap<String,String>(); 

    if(resourceParameters != null && !resourceParameters.isEmpty()){ 
     hashm = resourceParameters; 
    }else if(Http.Request.current().routeArgs!= null && !Http.Request.current().routeArgs.isEmpty()){ 
     hashm = Http.Request.current().routeArgs; 
    } 
} 

그런 다음 당신의 컨트롤러의 방법 인수를 얻을 당신이 원하는대로 액세스를 확인하기 위해 checkAccess 메소드 내부에 해시 맵을 foreach는해야합니다.

for (Map.Entry<String,String> mp : hashm.entrySet()) 
{ 
    // Get the id argument 
    if(mp.getKey().equals("id")) 
    { 
     // Do something with the value.. 
     mp.getValue() 
    }   
} 
관련 문제