разрешить только администратору входить в зону действия администратора - PullRequest
1 голос
/ 29 августа 2011

Я пробую аутентификацию с использованием безопасного модуля playframework. У меня есть два пользователя - один с правами администратора, другой с обычными привилегиями. Они определены как

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

Я хочу, чтобы только пользователь с правами администратора могвойдите в административную область и создайте сущности, используя интерфейс crud. Как мне это сделать?

*       /admin          module:crud

вызывает экран входа, который после входа в систему выше двух пользователей, доставляет их в область администратора. Какя могу ограничить доступ в область администратора только администратором и сказать обычному пользователю, что у него недостаточно прав для доступа в область администратора?

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

Используя 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();
    }
}
2 голосов
/ 29 августа 2011

Я еще не знаком с модулем CRUD, но в вашем контроллере вы можете использовать аннотацию @ Check ("admin") .Это гарантирует, что перед каждым вызовом аннотированного метода модуль безопасности будет вызывать метод static boolean check (String) в вашем собственном классе реализации Security.Там вы можете просто проверить, является ли текущий пользователь администратором и разрешить доступ или нет.См. Пример ниже.

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;

}

Надеюсь, это поможет./ Richard

...