2012-07-20 21 views
6

マイMojoliciousのアプリケーションは、私がルーティング条件に実装いくつかのカスタム認証メカニズムを、持っていauth_permissionと呼ばれる:だから私のルートは、このようなものになりなぜMojoliciousは私のルートを入れ子にするのですか?

$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は、2つ目のルートがアクセス許可delete objectsを確認する必要がある場合でも、両方の要求が確認されます。

/objects/delete/42は、/objects以下のパスであると考えられます。同じ問題は他のルートと共通の基盤を持たないルート/prefsでは発生しません。

私の現在の回避策は/objects/delete/:idため/objects以下のいずれかのルールを配置することですが、それはa)はunelegantだと、b)別の開発者がファイルを編集するとき破るしようとしています。この場合のネスティング動作を明示的に無効にすることはできますか?

+2

これは私にとってはまっすぐ正直なようです。そしてあなたのいわゆる回避策は、Mojoliciousがルートとどのようにマッチするかの論理的な結果です。あなたはあなたの質問に答えました。 –

答えて

1

Mojoliciousのドキュメントは、短いルートを処理するオブジェクトから拡張ルートを構築する必要があることを示しているようです。ドキュメントのNested Routesセクションを参照してください。

これは、$ objectsルートとそれから派生した$ objects_deleteルートがあることを意味します。注文の問題を解消します(最初に短いルートを宣言する必要はありません)。

関連する問題