2017-09-14 197 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

相关问题