我正在用Laravel構建一些API端點,並且我正在使用JWTAuth作爲授權請求的令牌提供程序。如何通過JWTAuth和Laravel阻止通過id訪問Model?
我已經得到的設置來保護一組正常工作使用API路線:
Route::group(['prefix' => '/v1', 'middleware' => 'jwt.auth'], function() {
Route::resource('messages', 'MessagesController');
});
的Message
模型屬於User
我試圖執行使用某些請求關係,同時保留提供不屬於用戶的數據的請求:
- 獲取登錄用戶消息列表
- 獲取用戶
登錄的個人信息主要的問題我已經是如何阻止用戶訪問Message
不屬於他們。我有這個在我的控制器:
public function show($message_id)
{
$message = Message::findOrFail($message_id);
return $message;
}
這顯然將返回Message
不管它是否屬於該用戶。 有關如何改善限制訪問其他用戶消息的建議?
的所有郵件的列表,我能夠做到在控制器中的以下內容:
public function index()
{
$user_id = Auth::User()->id;
$messages = Message::where('user_id', $user_id)->paginate(10);
return $messages;
}
這工作,但我不知道這是做的最好的方法。也許是的,但一些反饋將不勝感激。我很困惑中間件是否應該處理用戶有權訪問的內容,或者它是否應該成爲雄辯查詢的一部分?
您可能需要一個[global scope](https://laravel.com/docs/5.4/eloquent#global-scopes)。如果需要,您可以將範圍應用於給定模型上的所有查詢 – Ohgodwhy
找到任何解決方案了嗎? – Gayan