2009-02-02 2 views
5

Grails에서 잘 작동하는 레이아웃 지원 (sitemesh)을 사용하고 있습니다. 사용자가 로그인했는지 여부에 따라 레이아웃을 조정하고 싶습니다. 사용자 따라서 S 모델에 액세스 할 수없는 및 :Grails의 레이아웃보기에서 모델에 액세스

<g:if test="${user}"> 
    Username: ${user.username} 
</g:if> 

그러나, 레이아웃-GSP 것처럼 나타납니다

내 Grails에 - 응용 프로그램/뷰/레이아웃/main.gsp는 다음과 같은 코드를 포함 변수 (시도 할 때 "세션 없음"예외가 발생합니다). 내 레이아웃이 사용자가 로그인했는지 여부에 따라 달라지는 권장 방법은 무엇입니까?

미리 감사드립니다.

답변

9

요청 또는 세션 범위를 사용하는 것이 좋습니다. 아마 가장 건조한 방법은 필터를 범위를 채우는 것입니다. 파일 인 grails-app/conf에있는 예를 들어/SecurityFilters.groovy는 (당신은 그것을 만들어야합니다) :

class SecurityFilters { 

    def filters = { 
     populateCurrentUser(controller: '*', action: '*') { 
      before = { 
       request.user = User.get(session.userId) 
      } 
     } 
    } 
}  

예제는 세션 속성 "userId를"에서 현재 사용자의 ID를 저장하는 것으로 가정 Domain 클래스 "User"가 있다고 가정합니다. 레이아웃에서 사용하면 다음과 같이 간단합니다.

<g:if test="${request.user}"> 
    Current User: ${request.user.username} 
</g:if>