最新の Web アプリケーションでは、リソースにアクセスまたは変更できるユーザーを制御することが重要です。たとえば、ブログ アプリケーションでは、投稿の所有者のみが投稿を編集または削除できるようにしたい場合があります。 Laravel は、承認を処理する 2 つのエレガントな方法、ゲート と ポリシー クラス を提供します。このガイドでは両方の方法を説明し、リソースを保護し、アプリケーションのセキュリティを確保する方法を示します。
ゲートは、クロージャを使用して認可を処理する迅速かつ簡単な方法を提供します。これらは単純な認証チェックに最適であり、AuthServiceProvider.
で定義されています。投稿所有者だけが投稿を更新または削除できるようにゲートを定義しましょう:
ゲートを定義します: AuthServiceProvider を開き、ゲート定義を追加します:
// app/Providers/AuthServiceProvider.php use Illuminate\Support\Facades\Gate; use App\Models\Post; public function boot() { $this->registerPolicies(); Gate::define('update-post', function ($user, Post $post) { return $user->id === $post->user_id; }); Gate::define('delete-post', function ($user, Post $post) { return $user->id === $post->user_id; }); }
ゲートの適用: コントローラー メソッドでゲートを使用して、承認ロジックを強制します:
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; use App\Models\Post; public function update(Request $request, Post $post) { if (Gate::denies('update-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with updating the post } public function destroy(Post $post) { if (Gate::denies('delete-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with deleting the post }
長所:
短所:
ベスト ユース ケース: 迅速な承認チェックが必要な小規模なアプリケーションまたは単純なユース ケース。 ?
ポリシー クラスは、承認を処理するためのより構造化されたスケーラブルなアプローチを提供します。これらは、複雑な承認ルールを管理し、コードを整理するための明確な方法を提供します。ポリシーは、標準の CRUD 操作 (index、create、edit、update、および を破壊します。
ポリシーの作成と使用ポリシーの生成: Artisan を使用してポリシー クラスを作成します:
php artisan make:policy PostPolicy
ポリシー メソッドの定義: 生成されたポリシー クラスを開き、各アクションの承認を処理するメソッドを追加します。
// app/Policies/PostPolicy.php namespace App\Policies; use App\Models\User; use App\Models\Post; class PostPolicy { /** * Determine if the user can view the list of posts. * * @param User $user * @return bool */ public function viewAny(User $user) { // Example logic to allow viewing posts for authenticated users return true; } /** * Determine if the user can create a post. * * @param User $user * @return bool */ public function create(User $user) { return true; } /** * Determine if the user can update the post. * * @param User $user * @param Post $post * @return bool */ public function update(User $user, Post $post) { return $user->id === $post->user_id; } /** * Determine if the user can delete the post. * * @param User $user * @param Post $post * @return bool */ public function delete(User $user, Post $post) { return $user->id === $post->user_id; } }
ポリシーの使用: コントローラーのアクションにポリシー メソッドを適用します:
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use App\Models\Post; public function update(Request $request, Post $post) { $this->authorize('update', $post); // Proceed with updating the post } public function destroy(Post $post) { $this->authorize('delete', $post); // Proceed with deleting the post }
長所:
短所:
ベストケース シナリオ: 複雑な認証要件があるアプリケーション、またはクリーンで保守可能なコードを目指す場合に最適です。 ?
index、create、edit、更新、および破棄。アプリケーションのニーズに最適な方法を選択し、安全でよく整理されたコードベースを活用してください。 ??
以上がLaravel での認可 - 初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。