Прежде чем я начну, это в основном порт существующей службы стиля ASP.MVC REST для Sinatra.Я довольно новичок в Ruby, так что пока не знаю лучших практик, и сеть, похоже, немного взволнована по этому вопросу.
Так что в настоящее время во вкусе ASP у нас есть некоторые контроллеры, такие как:
public class MyController : Controller
{
[Authenticate]
public ActionResult AccessSecretStuffs()
{...}
public ActionResult AccessPublicStuffs()
{...}
}
Теперь мы используем фильтр, чтобы убедиться, что любые действия с Authenticate проверяют аутентификацию текущего пользователя перед загрузкой действия.Маршруты для этих маршрутов довольно ванильные, они просто сопоставляются с контроллером и действиями.
Теперь на земле Ruby, использующей Sinatra, у вас, как правило, нет контроллеров, все является действием, а мы просто хотим разоблачитьДанные в спокойном виде это кажется великолепным.Однако я должен быть в состоянии убедиться, что всякий раз, когда определенные маршруты вызываются с помощью Sinatra, он сначала будет вызывать немного кода, чтобы проверить, могут ли они получить доступ к действию, а затем, если нет, перенаправить их на страницу входа.
Я думал о том, чтобы просто добавить AOP для этого, но после небольшого прочтения все говорят, что Ruby не нужен AOP и уже предоставляет большинство функций из коробки.Так может кто-нибудь пролить свет на лучшую практику для этого?
В документации Sinatra есть метод before, который был бы применим, но тогда мне нужно было бы сделать метод before для любого другого метода маршрута, который не идеален,На мой взгляд, я просто хочу объявить маршрут, а затем поставить в конце какую-то аннотацию / атрибут, который указывает, что что-то должно произойти ...
Надеюсь, что это имеет какой-то смысл:)