只让管理员用户进入playframework admin crud区域

我尝试使用playframework的安全模块进行身份验证。我有两个用户 - 一个管理员,另一个用正常的previleges.They被定义为

User(adminuser):
    email:   siteadmin@mysite.com
    password: secret
    isAdmin:  true
User(normaluser):
    email:   normaluser@gmail.com
    password: normalpass

我只想让管理员用户能够登录到管理区域并使用crud界面创建实体。我应该如何解决这个问题?

*       /admin          module:crud

会弹出一个登录屏幕,从两位用户的上面登录后,将他们带到管理员区域。如何限制管理员进入管理员区域,并仅告诉管理员用户,并告诉普通用户他没有足够的权限访问管理区域?


使用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();
    }
}

我还不熟悉CRUD模块,但在您的控制器中,您可以使用注释@Check(“admin”) 。 这将确保在每次调用带注释的方法之前,安全模块将在您自己的安全实现类中调用静态布尔检查(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;

}

希望这可以帮助。 /理查德

链接地址: http://www.djcxy.com/p/21669.html

上一篇: letting only admin user to enter playframework admin crud area

下一篇: What should every programmer know about security?