2017-11-29 4 views
0

私は説明しようとします。私は電子商取引アプリケーションを開発しており、バックエンド認可を提供するために、私はラーベルポリシーをモデル(製品モデル)に適用しました。モデルのラーバルポリシーと特定のビューでの承認を回避する方法

問題は、すべてのユーザーが製品を見ることができるフロントエンドビューで同じ製品モデルを使用しようとしたときに発生します。

ルートビューが保護されていても、ポリシーを適用しないモデル(たとえば、frontend> list products)を残す方法が見つからない場合でも、ポリシーはすべてのモデルに適用されます。

例:バックエンドで見るために適用されるポリシーの:

public function view(User $user) 
{ 
    $method = (string)$this->ability; 
    if ($user->hasRole($this->Model) === null) { 
     return 0; 

    } 
    return $user->hasRole($this->Model)->$method; 
} 

私は、ユーザーに許可を要求することなく、フロントエンドの製品を一覧表示する製品のポリシーで別のパブリック関数を作成することです必要なもの。

ありがとうございました。

答えて

1

コントローラで、認証されていないユーザーが製品ビューにアクセスできるコンストラクタ関数を作成することができます。次のスニペットは、destroy(セッション破棄、ログアウト)機能を除いて、コントローラ内のすべての機能へのアクセスを提供します。

public function __construct() 
{ 
    $this->middleware('guest', ['except' => 'destroy']); 
} 

これが正しい方向に向けることを願っています。

+0

ありがとうございます。それは問題の一部を解決します。ミドルウェアのゲストはビューをレンダリングしますが、(ポリシーのために)製品情報は表示されません。 –

関連する問題