0

재생 프레임 워크 버전 1.2.5을 사용하고 있습니다. 보안 모델을 내 응용 프로그램에 추가했습니다. 사용자 권한에 따라 일부 HTML 메뉴를 숨기려면 내보기를 확인하십시오. 나는 또한 사용자가 내가이프레임 워크 보안 모듈 성능 재생

<html><body> 
     #{secure.check "ADMIN"} 
      <a href="link-to-admin-page" > 
     #{/secure.check} 
     .... some html 
     #{secure.check "EDIT"} 
       <div>some html here </div> 
     #{/secure.check} 
     .... some html 
     #{secure.check "ADD"} 
       <div>some html here </div> 
     #{/secure.check} 

</body></html> 
을이

static boolean check(String profile) { 
    LicenseType license = LicenseType.valueOf(profile); 
    User user = User.find("byEmail", connected()).first(); 
    return user.hadLicense(license); 
} 

같은 보안 클래스의 검사 방법을 사용하고, 예를 들어 내 템플릿에 등을 기록 (약 뷰에서 현재의 내 질문) 확인합니다

내 질문은 이와 같습니다. 복용량이 경우,이 같은 단일보기는 이메일로 사용자를 선택하기 위해 번 4 번 데이터베이스에 액세스한다는 것을 의미합니다. 방금 ​​보안을 확인 하시겠습니까?

감사합니다.

+0

이 점을 이해하는 데 도움이 될 수 있습니다. –

답변

1

예, JPA가 캐시 된 항목을 제공 할 수 있지만 (확인되지는 않았지만) 각 확인에 대해 데이터베이스에 액세스한다는 의미입니다.

은 사용자가 이미 로그인되어 나타납니다, 당신이 제공하는 당신이 코드 샘플에서

Request.args

+0

은 @before 메서드를 사용하여 renderArgs에 사용자 라이센스를 배치 한 다음 Security.check를 통해이를 확인하는 것이 더 빠른 솔루션일까요? –

+0

지금 사용자 라이선스를 저장하기 위해 캐시 (playframework memCache)를 사용하고 있습니다. –

0

에 요청별로 결과를 캐시 할 수 있습니다이를 방지합니다. 그래서 나는 당신이 세션에서 사용자 라이센스 변수를 저장하고 비교를 할 정적 메소드를 가지고 있다고 제안 할 것이다. 라이선스를 캐시 (Memcache)에 동일하게 저장할 수 있습니다.

예 :

static boolean check(String profile){ 
     LicenseType license = LicenseType.valueOf(profile);  
     return User.hadLicense(license, connectedLicense()); 
    } 

NB : connectedLicense은() - 로그인시 사용자 저장소의 라이센스입니다.