2017-09-14 196 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(); 
    } 
} 

它顯示了消息,但它仍然顯示的頁面不重定向回。

正如你看到的我是從讀會話和模塊名稱的權限被保存在控制器,所以我不認爲這可以通過中間件,除非我正在做的中間件爲每個模塊(可以解決我說的是30個模塊)。

感謝您抽出寶貴的時間來閱讀這篇

+0

所以問題是重定向? –

+3

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

+0

返回回()的工作原理是相同的,我問了不同的方法 – 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

有一個很簡單的解決你的代碼,你忘了定義redirect,所以不是使用

return back(); 

使用

return redirect()->back(); 

這將做重定向。

還有一個在你的推理是錯誤,你可以,而且也應該使用中間件。

中間件確實有訪問用戶,會話和可傳遞的參數。這些是您系統的必要要求。

您也可以assign middleware on a controller basis

+0

我中間件解決它。還返回()==返回重定向 - >返回() – NoOorZ24

相關問題