Мое приложение 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 )сломается, когда другой разработчик редактирует файл. Могу ли я явно отключить поведение вложенности, наблюдаемое в этом случае?