由于仪表板不是真正的资源,它是一个上下文敏感的东西,我不会像其他帖子建议的那样担心休息。所以,你有你的个人资料:
trait Profile
case object AdminProfile extends Profile
case object CustomerProfile extends Profile
case object CompanyProfile extends Profile
而且您有一个从请求标头中提取配置文件的方法:
def extractProfile(rh: RequestHeader): Option[Profile] = rh.session.get("profile").map {
case "admin" => AdminProfile
case "customer" => CustomerProfile
case "company" => CompanyProfile
}
您可以在您的操作中执行此操作:
def dashboard = Action { req =>
extractProfile(req).map {
case AdminProfile => // code here that loads stuff and renders it for admin
case CustomerProfile => // code here for customer
case CompanyProfile => // code here for company
} getOrElse NotFound
}
假设您希望管理员能够访问客户或公司仪表板,因此您已经拥有原始帖子中描述的 3 条路线,因此您可以根据需要转到特定的路线。您可以轻松添加第四个操作,将 /dashboard 简单地委托给适当的操作。例如:
def dashboard = EssentialAction { req =>
extractProfile(req).map {
case AdminProfile => Admin.dashboard(req)
case CustomerProfile => Customer.dashboard(req)
case CompanyProfile => Company.dashboard(req)
} getOrElse NotFound
}
注意EssentialAction
这里的使用。如果您想将多个动作组合成一个动作,这是必要的。