문제

나는 스칼라/리프트의 스택을 독점하는 것처럼 느껴지므로 사과하지만 질문은 계속옵니다. 여기에 최신이 있습니다.

/로그인 /*의 모든 것에 대한 액세스를 아직 로그인하지 않은 사용자에게 제한하려고합니다.

내가하는 방법은 다음과 같습니다.

val entries = Menu(Loc("Home", List("index"), "Home")) ::  //login stuff
    Menu(Loc("loginBase", ("login"::""::Nil)->true, "Login Base", Hidden, anyLoggedIn))::...

그것이 Sitemap의 항목입니다. 그런 다음 부츠에서 anyloggedin을 정의합니다.

val anyLoggedIn  = If(() => !(Student.loggedIn_? || Provider.loggedIn_?), 
            if (sessionLoginType.is map {_ == StudentLogin} openOr false)
            {
                println("student")
                RedirectResponse("studentHome")

            }
            else 
            {
                println("provider")
                RedirectResponse("providerHome")
            }

이미 로그인 할 때 로그인 페이지에 액세스하려고 할 때 제공자와 학생들을 각각 "집"으로 보내고 싶습니다. 어떤 이유로 든 (어쩌면 내 부울 논리)는 작동하지 않으며 결코 작동하지 않습니다. 리디렉션에.

어떤 아이디어?

감사

도움이 되었습니까?

해결책

일반적인 실수 val 사용 후 변수를 정의하는 것입니다.

scala> object test {  
     | val f = x      
     | val x = 1      
     | }
defined module test

scala> println(test.f)
0

Lift 's와 함께 일할 때 종종 실수입니다. SiteMap 조건 (나는 개인적으로 바닥에서 그것들을 정의하는 경향이 있습니다). 이것을 극복하려면 당신의 것을 정의하십시오 val ~처럼 lazy:

scala> object test {  
     | val f = x      
     | lazy val x = 1 
     | }
defined module test

scala> println(test.f)
1

참고 사항

두 번째 테스트 If 너무 스칼로이처럼 보이지 않으며 기능적 및 절차 적 스타일이 혼합되어 있습니다. 작성 방법에 대한 옵션이 있습니다. 가능한 한 가지 변형 만 참조하십시오.

sessionLoginType.is match {
  case Full(StudentLogin) => 
    println("student")
    RedirectResponse("studentHome")
  case Full(ProviderLogin) =>
    println("provider")
    RedirectResponse("providerHome")
}

또 다른 옵션

로그인 유형에서 URI로 정적 맵을 정의 할 수 있습니다.

val redirectMap = Map(StudentLogin -> "studentHome", ProviderLogin -> "providerHome")

그런 다음 당신은 당신의에서 그것을 사용할 수 있습니다 If 처럼

sessionLoginType.is.flatMap{ redirectMap.get }.map{ RedirectResponse _ }.open_!

for-congrensions를 사용하여 동일하게 다시 작성할 수 있습니다.

(for {val loginType <- sessionLoginType.is
      val uri <- redirectMap.get(loginType) }
      yield RedirectResponse(uri)
).open_!

그러나주의하십시오 redirectMap 키나 당신의가 포함되어 있지 않습니다 sessionLoginType 비어 있고, 당신은 곤경에 처해 있습니다. open_! 빈 상자에 적용해서는 안되므로 실패합니다. 합리적인 기본값을 알고 있다면 더 나은 사용 .openOr defaultRedirect

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top