2014-10-09 4 views
6

У меня есть роли пользователя: user, manager, admin. Мне нужно аутентифицировать их в контроллерах (методах). Например только admin можно удалить (теперь это выглядит так, нужно изменить, что только администратор должен иметь разрешение):Play framework, Scala: authenticate User by Role

def deleteBook(id: Int) = DBAction { 
    findById(id) match { 
     case Some(entity) => { 
      books.filter(_.id === id).delete 
      Ok("") 
     } 
     case None => Ok("") 
    } 
} 

Я много контроллеров и методов. Мне нужно выполнить аутентификацию перед запросом процесса (например, удаление книги). Мой routes файл содержит:

... 
DELETE  /books/:id     @controllers.Book.deleteBook(id: Int) 
... 

Некоторые маршруты доступны только для администратора и менеджера. Некоторые из них предназначены для всех типов пользователей.

Я в настоящее время вижу deadbolt2scala модуль авторизации для игры.

Можете ли вы рекомендовать лучший способ аутентификации многопользовательских пользователей в playframework scala?

ответ

1

Мне удалось это сделать, используя StackableControllers, предоставленные https://github.com/t2v/stackable-controller В принципе, я использую базовый список управления доступом, предоставляемый моим application.conf. Я начинаю с проверки наличия пользователя в моем запросе. Если он есть, я могу проверить, имеет ли он достаточные права доступа для выполнения действия.

Такая функция может быть реализована с использованием композиции BodyParser. Я никогда этого не делал, поэтому чей-то совет может быть лучше для вас.