2014-01-17 76 views
1

我正在使用資源控制器,可以像這樣編輯用戶:users/edit/8(8是id)。Laravel資源,檢查特定用戶

如何檢查只有用戶8可以編輯他的帳戶?

因爲另一個用戶可以在URL中設置任何ID並編輯任何帳戶。

我可以使用:

if (!Auth::user()->id === $id) { 
    //throw exception ... 
} 

但是,這並不是laravel點 「一次且僅一次」。

我應該使用資源控制器的用戶相關的東西(如帳戶設置等)? 或只是爲管理相關的東西?

回答

1

不應該$id

if (!Auth::user()->id === $id) { 
    // still throw exception? Which one? 
} 

如果你不希望用戶能夠訪問特定的路線「users.edit」,那麼你需要創建一個過濾路線:

Route::get('users/edit/{id}', array(
         'as' => 'users.edit', 
         'before' => 'auth|checkUser', 
         'uses' => '[email protected]' 
         ) 
); 

Route::filter('checkUser', function($route, $request, $value) 
{ 
    if (! Auth::use()->id === $route->parameter('id')) 
    { 
     return Redirect::to('operation-not-permitted-route'); 
    } 
}); 

當您使用REST風格的控制器,這條路應該是你Route::controller()命令前加。

這是一種方法。另一個將創建一個新的控制器只是爲了你的個人資料,併爲這個控制器創建特定的路由和過濾器。

關於使用RESTful和足智多謀的路線,我總是喜歡從Phil Sturgeon指出這篇文章:http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil

+0

這是真的我忘了$ - 但我怎麼能避免「如果」,因爲我不想使用,如果每次我需要檢查用戶。 |我在上面的問題中修復了$ – Steven

+0

剛剛編輯試圖回答。 –

+0

非常感謝! – Steven