2017-09-14 9 views
-1

私はサーバーベースのソリューションを作成しています。データベースにはさまざまな権限を持つ多くのユーザーがおり、アクセスしようとしているモジュールにアクセスする権限があるかどうかを確認する必要があります。私のようなものが含まれているすべてのコントローラでLaravel:ユーザーに許可があるかどうかの確認

protected $module = "moduleName"; 

を私は好きそれを解決しようとした:

function __construct() 
{ 
    $perm = session()->get('perm'); 
    if (!isset($perm[$this->module]) || !$perm[$this->module]) { 
     Session::flash('message_error', "<span class='glyphicon glyphicon-warning-sign'></span> Access denined!"); 
     return back(); 
    } 
} 

それはメッセージを示していますが、それはまだページが表示され、バックリダイレクトしません。

私はセッションからアクセス許可を読み、モジュール名はコントローラに保存されているので、各モジュールのミドルウェアを作成していない限り、これはミドルウェアでは解決できないとは思われません)。あなたのコードに非常に簡単に修正プログラムがあり、この

+0

だから問題はリダイレクトですか? –

+3

'return redirect() - > back()'? – milo526

+0

return back()は同じですが、私は別のアプローチを求めています – NoOorZ24

答えて

-1

ミドルウェアが実際にこれを解決しました。 ルート:

Route::group(['middleware' => 'module:moduleName'], function() { 
    // Routes... 
}); 

カスタムミドルウェア:

public function handle($request, Closure $next, $module) 
{ 
    $perm = session()->get('perm'); 
    if (!isset($perm[$module]) || !$perm[$module]) { 
     Session::flash('message_error', "<span class='glyphicon glyphicon-warning-sign'></span> Access denined!"); 
     return redirect()->back(); 
    } 

    return $next($request); 
} 

はまた、私はルートグループを入れ子にすることができることを言及します。だから、あなたは同様に認証ミドルウェアのようなもので複数のグループをラップすることができます

0

を読むために時間を割いて

おかげで、あなたはとても代わり

return back(); 

使用

return redirect()->back(); 
を使用しての、 redirectを定義し忘れてしまいました

これはリダイレクトを行います。

あなたの推論に間違いもあります。おそらくミドルウェアを使用する必要があります。

ミドルウェアはユーザー、セッションにアクセスでき、パラメータを渡すことができます。これらはシステムに必要な要件です。

assign middleware on a controller basisでもかまいません。

+0

私はミドルウェアで解決しました。また、return()== return redirect-> back() – NoOorZ24

関連する問題