Почему Mojolicious вкладывает мои маршруты?

Мое приложение Mojolicious имеет некоторый собственный механизм аутентификации, который я реализую в условии маршрутизации, называемомauth_permission:

$app->add_condition(auth_permission => sub {
    return is_user_allowed(...) ? 1 : 0;
});

Итак, мои маршруты выглядят примерно так:

my $r = $app->routes;

$r->get('/prefs')
    # no permission necessary here
  ->to(...);

$r->get('/objects')
  ->over(auth_permission => 'view objects')
  ->to(...);

$r->get('/objects/delete/:id')
  ->over(auth_permission => 'delete objects')
  ->to(...);

Предложения to()обрабатываются правильно:GET /objectsдает мне список объектов, а GET /objects/delete/42удаляет объект 42.

Проблема в том, что для обоих запросов проверяется разрешение view objects, хотя второй маршрут должен проверять разрешение delete objects.

Причина, по-видимому, в том, что /objects/delete/42— это путь ниже /objects. Та же проблема не возникает с маршрутом /prefs, который не имеет общей базы с другими маршрутами.

Мой текущий обходной путь — разместить правило для/objectsниже один для /objects/delete/:id, но это )неэлегантно и b )сломается, когда другой разработчик редактирует файл. Могу ли я явно отключить поведение вложенности, наблюдаемое в этом случае?

6
задан Stefan Majewsky 20 July 2012 в 09:07
поделиться