我正在尝试使用playframework的安全模块进行身份验证。我有两个用户 - 一个是admin,另一个是普通的previleges。他们被定义为
User(adminuser):
email: siteadmin@mysite.com
password: secret
isAdmin: true
User(normaluser):
email: normaluser@gmail.com
password: normalpass
我希望只有管理员用户能够使用crud界面登录管理区域并创建实体。我该怎么办?
* /admin module:crud
打开一个登录界面,从以上两个用户登录后,将他们带到管理区域。如何限制管理区域只能输入管理员用户,并告诉普通用户他没有足够的用户访问管理区域的权利?
答案 0 :(得分:2)
我还不熟悉CRUD模块,但在您的控制器中,您可以使用注释 @Check(“admin”)。 这将确保在每次调用带注释的方法之前,安全模块将在您自己的Security实现类中调用静态布尔检查(String)方法。在那里,您只需检查当前用户是否为管理员,是否允许访问。见下面的例子。
public class MySecurity extends Secure.Security
{
.... other methods you should/could override ....
static boolean check(String profile)
{
boolean result = false;
if("admin".equalsIgnoreCase(profile))
{
User currentUser = User.find("byUsername", Security.connected()).first();
result = currentUser.isAdmin;
}
return result;
}
希望这会有所帮助。 /理查德
答案 1 :(得分:2)
使用CRUD,您可以为每个实体声明一个控制器。然后,您可以添加安全性所需的注释。
例如,对于用户实体,您将拥有此控制器:
@Check("admin")
@With(Security.class)
@For(models.User.class)
public class Users extends controllers.CRUD {
}
在@With中你必须指向扩展Secure.Security的类。例如:
public class Security extends Secure.Security {
static boolean authenticate(String username, String password) {
return User.connect(email, password) != null;
}
static boolean check(String profile) {
if("admin".equals(profile)) {
return User.all().filter("email", connected()).get().isAdmin;
}
return false;
}
static void onDisconnected() {
Application.index();
}
static void onAuthenticated() {
Admin.index();
}
}