2012-07-20 80 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檢查兩個請求,即使第二路徑應檢查許可delete objects

原因似乎是/objects/delete/42低於/objects的路徑。同樣的問題並不與路線/prefs,其不具有與其他路線的公共基地發生。

我目前的解決辦法是把規則/objects低於的一個/objects/delete/:id,但這是一個)unelegant和爲b)去當另一家開發商編輯該文件打破。我能否明確禁用在這種情況下看到的嵌套行爲?

+2

這看起來非常簡單的行爲給我。而你所謂的解決方法是Mojolicious如何匹配路線的邏輯結果。海事組織你回答你的問題。 – 2012-07-20 09:28:40

回答

1

Mojolicious文檔似乎表明您應該建立處理較短的對象的擴展路線。見Nested Routes節的文檔中。

這意味着你有一個$對象路線,和$ objects_delete路線從它派生。消除排序問題(除了首先聲明較短的路線)。