ホームページ > 記事 > ウェブフロントエンド > Laravelでポリシーを使用してユーザー認証を完了する方法の例
Laravel は、ユーザー認証アクションを処理する簡単な方法を提供します。ユーザー認証と同様に、Laravel にはユーザー認証を実装するための主な方法が 2 つあります: ゲートとポリシーです。ここで Policy の使用状況を記録します。 Policy を使用してユーザー認証を完了するには、主に 3 つの手順が含まれます:
ポリシー クラスを定義する
ポリシー クラスとモデルの関連付けを登録する
ポリシーの判断
ポリシー クラスを定義する
ポリシーは、特定のモデルまたはリソース 論理クラス。たとえば、アプリケーションがブログの場合、ブログの作成や更新、ブログの削除などのユーザー アクションを承認するための Post モデルと対応する PostPolicy が存在します。
この時点で、artisan コマンドを使用してポリシー クラスを作成できます。次のコマンドは空の Post ポリシー クラスを作成します
php artisan make:policy PostPolicy
生成されたポリシーは app/Policies ディレクトリに配置されます。このディレクトリがアプリケーションに存在しない場合は、Laravel が自動的に作成します
CURD を含むポリシークラスを生成したい場合は、次の職人コマンドを使用できます
php artisan make:policy PostPolicy --model=Post
ポリシークラスとモデルの関連付けを登録します
ポリシーを登録しますAuthServiceProvider クラス内で
protected $policies = [ //'App\Model' => 'App\Policies\ModelPolicy', 这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy 'App\Post' => 'App\Policies\PostPolicy', //注册Post的policy ];
ポリシー クラスとモデルの間の関連付けは、ポリシー内にポリシー メソッドを記述することです
<?phpnamespace App\Policies;use App\User;use App\Post;use Illuminate\Auth\Access\HandlesAuthorization;class PostPolicy{ use HandlesAuthorization; /** * Determine whether the user can update the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function update(User $user, Post $post) { // return $user->id === $post->user_id; } /** * Determine whether the user can delete the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function delete(User $user, Post $post) { // return $user->id === $post->user_id; }
update メソッドは、User インスタンスと Post インスタンスをパラメータとして受け取り、ユーザーが指定された投稿を更新する権限を与えられています。そこで、この例では、ユーザーのIDが投稿のuser_idと一致するかどうかを判定し、
戦略判定
ここではコントローラー内のコントローラー補助機能を使ってポリシー判定を行っています
//文章编辑逻辑 public function update(Post $post) { $this->validate(request(),[ 'title' => 'required|String|min:5|max:50', 'content' => 'required|String|min:10', ]); $this->authorize('update',$post); ////////////////////策略判断 $post->title = request('title'); $post->content = request('content'); $post->save(); return redirect("/posts/{$post->id}"); } //文章删除 public function delete(Post $post) { //TODO::权限验证 $this->authorize('delete',$post); //////////////////策略判断 $post->delete(); return redirect('/posts'); }
検証が失敗する限り、laravelはHttpException が自動的にスローされます。このアクションは許可されていません。
開発中、ビュー内の編集ボタンや変更ボタンなど、一部のボタンを表示するかどうかを決定する必要がある場合があります。ブレードでは @can を使用して実行できます。モデルボタンを表示するかどうかを指定します
Laravel は、ユーザー認証アクションを処理する簡単な方法を提供します。ユーザー認証と同様に、Laravel にはユーザー認証を実装するための主な方法が 2 つあります: ゲートとポリシーです。
ポリシーの使用法をここに記録します。ポリシーを使用してユーザー認証を完了するには、主に 3 つの手順が含まれます:
ポリシー クラスを定義する
ポリシー クラスとモデルの関連付けを登録する
ポリシーの判断
ポリシー クラスを定義する
ポリシーは特定のモデルまたはリソースにある認可ロジックを構成するクラス。たとえば、アプリケーションがブログの場合、ブログの作成や更新、ブログの削除などのユーザー アクションを承認するための Post モデルと対応する PostPolicy が存在します。
この時点で、artisan コマンドを使用してポリシー クラスを作成できます。次のコマンドは空の Post ポリシー クラスを作成します
php artisan make:policy PostPolicy
生成されたポリシーは app/Policies ディレクトリに配置されます。このディレクトリがアプリケーションに存在しない場合は、Laravel が自動的に作成します
CURD を含むポリシークラスを生成したい場合は、次の職人コマンドを使用できます
php artisan make:policy PostPolicy --model=Post
ポリシークラスとモデルの関連付けを登録します
ポリシーを登録しますAuthServiceProvider クラス内で
protected $policies = [ //'App\Model' => 'App\Policies\ModelPolicy', 这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy 'App\Post' => 'App\Policies\PostPolicy', //注册Post的policy ];
ポリシー クラスとモデルの間の関連付けは、ポリシー内にポリシー メソッドを記述することです
<?phpnamespace App\Policies;use App\User;use App\Post;use Illuminate\Auth\Access\HandlesAuthorization;class PostPolicy{ use HandlesAuthorization; /** * Determine whether the user can update the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function update(User $user, Post $post) { // return $user->id === $post->user_id; } /** * Determine whether the user can delete the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function delete(User $user, Post $post) { // return $user->id === $post->user_id; }
update メソッドは、User インスタンスと Post インスタンスをパラメータとして受け取り、ユーザーが指定された投稿を更新する権限を与えられています。そこで、この例では、ユーザーのIDが投稿のuser_idと一致するかどうかを判定し、
戦略判定
ここではコントローラー内のコントローラー補助機能を使ってポリシー判定を行っています
//文章编辑逻辑 public function update(Post $post) { $this->validate(request(),[ 'title' => 'required|String|min:5|max:50', 'content' => 'required|String|min:10', ]); $this->authorize('update',$post); ////////////////////策略判断 $post->title = request('title'); $post->content = request('content'); $post->save(); return redirect("/posts/{$post->id}"); } //文章删除 public function delete(Post $post) { //TODO::权限验证 $this->authorize('delete',$post); //////////////////策略判断 $post->delete(); return redirect('/posts'); }
検証が失敗する限り、laravelはHttpException が自動的にスローされます。このアクションは許可されていません。
開発中、ビュー内の編集ボタンや変更ボタンなど、一部のボタンを表示するかどうかを決定する必要がある場合があります。ブレードでは @can を使用して実行できます。モデルボタンを表示するかどうかを指定します。
以上がLaravelでポリシーを使用してユーザー認証を完了する方法の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。