2015-07-23 3 views
3

У меня есть класс (учетная запись), представляющая систему пользователя. Учетная запись содержит роль поля. Это перечисление содержит три случая. счета классаPlay Framework 2.4 авторизация

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; 

MyRole

public enum MyRole { 

ADMIN, 
TEACHER, 
USER 

} 

Как я могу осуществить авторизацию?

+1

Если вы выберете Deadbolt 2, взгляните на [руководство по быстрому старту] (https://github.com/schaloner/deadbolt-2-java/blob/master/QuickStart.md) –

ответ

1

Библиотека 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 выше.

1

Я думаю, вы могли бы использовать библиотеку Deadbolt-2, указанную в Play Framework plugins.

В этой же идее не изобретать колесо, вы взглянули на плагин Play-Authenticate? Еще одно преимущество этого последнего заключается в том, что оно совместимо с Deadbolt-2.

Смежные вопросы