Laravel 5.4プロジェクト(管理者用と正規ユーザー向けの1つ)に複数の認証ガードを実装しました。これまでのところうまくいき、管理者とユーザーの両方がログインできるようになりました。私は、両方の認証ガードの両方で動作するPolicyクラスを実装しようとしています。これは、すべての管理者に編集を許可し、モデルを所有するユーザーだけが編集できるようにする特定のモデルがあるためです。だから私はこの方法でポリシーを定義しました。1つのポリシーに対して複数の認証ガードを使用する
のApp \ポリシー\ ModelPolicyその後、私は私のモデルのために持っているものは何でもコントローラ方法で
public function update(User $user, Model $model)
{
if ($user->id === $model->user_id) {
return true;
}
if (Auth::guard('admin')->check()) {
return true;
}
return false;
}
:
のApp \のHttpコントローラは\ \ ModelController
public function update(Model $model)
{
$this->authorize('update', $model);
// update model
}
これを通常のユーザーがログインしている場合は完全に機能します。ただし、管理ユーザーがログインしている場合、それはポリシーにも達しません(私はエラーログからこれを知っています)。 Auth::check()
のデフォルトのガードが失敗した場合、Policyクラスがリクエストを自動的に拒否する何かを実行していると推測しています。しかし、私のユーザーが(デフォルト以外の)いくつかのガードの1つを持つことは有効なので、私はこの動作を回避する必要があります。
私は私のコントローラメソッドで管理ロジックを実装し、唯一の私は非管理者を扱っています知っていれば、ポリシーを使用することができます知っている:
public function update(Model $model)
{
if (!Auth::guard('admin')->check()) {
$this->authorize('update', $model);
}
// update model
}
しかし、これはすぐにあれば制御不能にスパイラルすることができます私の管理者の状態は、単にログインしているよりも複雑です。もっと重要なのは、この論理のすべてがポリシーに属していて、私のコントローラーを泥沼にしているわけではありません。
複数の認証ガードに対してどのように同じポリシークラスを使用できますか?
私はまったく同じ状況にあります。 – llioor