Play Framework 2.4 授权

Posted

技术标签:

【中文标题】Play Framework 2.4 授权【英文标题】:Play Framework 2.4 authorization 【发布时间】:2015-07-23 10:07:43 【问题描述】:

我有一个代表用户系统的类(帐户)。帐户包含字段角色。它是包含三个案例的枚举。 帐号类

public class Account extends Model 

@Id
@Email
public String email;

@Required
@NotNull
public String password;

@Required
@NotNull
public String firstName;

@Required
@NotNull
public String lastName;

@Required
public String phone;

public MyRole role;

我的角色

public enum MyRole 

ADMIN,
TEACHER,
USER


如何实施授权?

【问题讨论】:

如果您选择 Deadbolt 2,请查看quickstart guide 【参考方案1】:

我认为您可以使用Deadbolt-2 库,在Play Framework plugins 中列出。

本着不重新发明***的相同想法,您是否看过Play-Authenticate 插件?最后一个的另一个优点是它与 Deadbolt-2 兼容。

【讨论】:

【参考方案2】:

Deadbolt-2 库是一种解决方案。但是,如果您想构建自己的,首先,您需要阅读https://www.playframework.com/documentation/2.4.x/ScalaActionsComposition。

其实这并不难,你可以实现几乎无限的、非常灵活的解决方案。

基本思想是定义一个 UserAuthAction,比如:

@Singleton
class UserAuthAction @Inject() (principalService: PrincipalService) extends ActionBuilder[Request] with ActionFilter[Request] 
  override protected def filter[A](request: Request[A]) = Future.successful 
    request.session.get(principalService.accessTokenCacheKey).map  accessToken =>
      if (principalService.authenticate(accessToken))
        None
      else
        Some(Results.Redirect(routes.PrincipalController.login()))
     getOrElse 
      Some(Results.Redirect(routes.PrincipalController.login()))
    
  

然后将其与执行实际工作的动作组合起来。例如:

@Singleton
class Application @Inject() (userAuthAction: UserAuthAction) extends Controller 
  def index = (userAuthAction andThen anyAction)  request =>
    Ok(views.html.index())
  

在此过程中,如果您正在使用 ActionRefiner,您甚至可以提取额外的用户信息并将其提供给后面的操作,例如上面的 anyAction。

【讨论】:

以上是关于Play Framework 2.4 授权的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework 2.4 全局对象迁移

在 Play Framework 2.4 中为 Scala 实现 CORS

Play Framework 2.4 - 注入的字段始终为空

从 Play Framework 更改 WS API! 2.4 至 2.5

在 Play Framework 2.4 中为 Scala 实现 Akka

由于构建或路由导致 Play Framework 2.4 编译错误