最新の 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 }
長所:
短所:
ベスト ケース シナリオ: 複雑な認証要件があるアプリケーション、またはクリーンで保守可能なコードを目指す場合に最適です。 ?
Laravel のゲートクラスとポリシークラスは両方とも、承認を処理する強力な方法を提供します。ゲートは迅速かつ単純なチェックに優れており、ポリシー クラスは、特に index、create、edit などのメソッドを使用するリソース コントローラーで、複雑なシナリオを管理するための構造化されたアプローチを提供します。 ]、更新、および破棄。アプリケーションのニーズに最適な方法を選択し、安全でよく整理されたコードベースを活用してください。 ??
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3