我正在编写基于服务器的解决方案。在数据库中,有许多用户具有不同的权限,我必须检查他们是否有权访问他们正在尝试的模块。
在每个控制器中,我都包含了类似的内容:
media="print"
我试着解决它:
protected $module = "moduleName";
它会显示该消息,但仍显示该页面未重定向回来。
如您所见,我从会话中读取权限,模块名称保存在控制器中,所以我不认为这可以通过中间件来解决,除非我为每个模块制作中间件(I&# 39;我在谈论30个模块。)
感谢您抽出宝贵时间阅读本文
答案 0 :(得分:0)
您的代码有一个非常简单的解决方法,您忘记定义redirect
,因此不使用
return back();
使用
return redirect()->back();
这将进行重定向。
你的推理也有一个错误,你可以并且可能应该使用中间件。
中间件确实可以访问用户,会话并且可以传递参数。这些是您系统的必要要求。
答案 1 :(得分:-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);
}
另外我会提到Route组可以嵌套。所以你可以用auth中间件和
之类的东西包装多个组