2015-08-17 41 views
0

想象一下個人筆記應用程序。用戶可以添加,查看和編輯自己的筆記,但不能添加屬於其他用戶的筆記。Laravel - 只允許筆記的所有者查看並編輯它:中間件或FormRequests?

該票據的訪問是這樣的:app.dev/notes/{id}

所以很自然,如果我自己是有140 ID的音符,但更改ID,160的網址,我將能夠查看此說明。

我想防止發生這種情況。我想過爲此使用中間件,但我讀過人們說我們不應該使用中間件,因爲它不靈活,我應該使用FormRequests。

問題是,我不明白我在這種情況下如何使用FormRequests。我已經使用FormRequests來防止用戶從編輯不屬於他們的筆記。如果我擁有ID爲140的筆記,並嘗試編輯/張貼ID爲160的筆記,我的表單請求不會讓我這樣做。

但這FormRequest實際上並沒有阻止我與160 ID查看備忘。

有人可以請我指出正確的做法嗎?

謝謝

回答

0

我會爲此使用中間件。讓中間件獲取當前用戶,檢查他們是否有權訪問指定的註釋,並在無權訪問時中止。

如果您使用存儲庫模式,請確保您使用中間件的構造函數來傳入任何必需的存儲庫/依賴項。

1

您可以使用策略。更清晰,更簡單的授權方式。

Authorization Policy : Laravel

創建和註冊您的策略後,你可以這樣做

public function access(User $user, Note $note) 
{ 
    return $user->id === $note->user_id; 
} 

然後在你的方法

if (!$user->cannot('access', $note)) 
{ 
    // throw error or redirect somewhere else 
} 
+0

請在這裏添加最相關的部分。 – CSchulz

+0

創建和註冊您的策略 後,您可以像 '公共功能接入(用戶$用戶,注意$注) { 回報$用戶>的東西ID === $注意 - > USER_ID; }' 然後在你的方法 '如果(!$用戶'不能( '訪問',$注)){ \t //拋出錯誤或重定向別處 \t}' –

+0

作爲你的答案的一部分, 請。 – CSchulz

相關問題