Laravel:检查用户是否有权限

时间:2017-09-14 07:10:27

标签: php laravel permissions

我正在编写基于服务器的解决方案。在数据库中,有许多用户具有不同的权限,我必须检查他们是否有权访问他们正在尝试的模块。

在每个控制器中,我都包含了类似的内容:

media="print"

我试着解决它:

protected $module = "moduleName";

它会显示该消息,但仍显示该页面未重定向回来。

如您所见,我从会话中读取权限,模块名称保存在控制器中,所以我不认为这可以通过中间件来解决,除非我为每个模块制作中间件(I&# 39;我在谈论30个模块。)

感谢您抽出宝贵时间阅读本文

2 个答案:

答案 0 :(得分:0)

您的代码有一个非常简单的解决方法,您忘记定义redirect,因此不使用

return back();

使用

return redirect()->back();

这将进行重定向。

你的推理也有一个错误,你可以并且可能应该使用中间件。

中间件确实可以访问用户,会话并且可以传递参数。这些是您系统的必要要求。

您也可以assign middleware on a controller basis

答案 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中间件和

之类的东西包装多个组