Какой рекомендуемый способ управления пользователями в Play!Framework?
Это мои настройки:
UserAwareControllerBase
в качестве базового класса для контроллеров - Шаблон основного вида включает кнопку входа / выхода из системы
- пользовательский
Security
класс, расширяющий Secure.Security
, и контроллеры, которые разрешают вход только зарегистрированным пользователям, помечены @With(Secure.class)
(я еще не внедрил реальный пароль / систему входа в системудостаточно просто ввести правильный адрес электронной почты для входа в систему. TBD)
Настройка хороша, потому что контроллерам не нужно беспокоиться о написании кода управления пользователями, и они могут легко получить зарегистрированного пользователя, вызвав getUser()
.Тем не менее, я уже начинаю чувствовать ограничения этой настройки.Я получаю сложную иерархию наследования и сталкиваюсь с проблемой, если хочу унаследовать от класса CRUD .
Что является лучшим способом обработки аутентификации / авторизации пользователей в Play!без повторения кода?
UserAwareControllerBase.java
public abstract class UserAwareControllerBase extends Controller {
protected final static UserRepository userRepo = new UserRepository();
@Before
static void setConnectedUser() {
if(Security.isConnected()) {
User user = userRepo.findByEmail(Security.connected());
renderArgs.put("user", user);
}
}
static User getUser() {
return renderArgs.get("user", User.class);
}
}
template.html
<div id='header'>
...
#{if user}
<a href="@{Secure.logout()}">Log out (${user.email})</a>
#{/if}
#{else}
<a href="@{Secure.login()}">Log in</a>
#{/else}
</div>
Безопасность.java
public class Security extends Secure.Security {
protected final static UserRepository userRepo = new UserRepository();
static boolean authenticate(String username, String password) {
User user = userRepo.findByEmail(username);
return user != null;
}
public static void onDisconnected() {
Application.index();
}
}