【问题标题】:Laravel: Check Permission for Each ControllerLaravel:检查每个控制器的权限
【发布时间】:2017-07-13 19:38:36
【问题描述】:

我有一个用于管理员登录的中间件,我正在检查用户是否是管理员。但现在我想检查管理员是否有权访问该页面。我该怎么做?

我的管理中间件是:

public function handle($request, Closure $next)
{
    if(Auth::check())
    {
        $user = Auth::user();
        if($user->user_type=='employee')
        {
        return $next($request);
        }
        else
        {
            return redirect('/');
        }
    }
    else
    {
        return redirect('/');
    }


}

一种方法是将以下代码添加到每个控制器的每个功能中。

    if(Auth::user()->permission=='manage_employee'){
 //code here
}
else
{
//redirect to access denied page
}

但这不是正确的方法并且耗时。有没有其他不使用包的方法?

【问题讨论】:

标签: php laravel


【解决方案1】:

这是使用中间件的正确方法

Route::get('/your-url', 'YourController@yourFucntion')->middleware('admin');

admin 是您在 Kernel.php 文件中注册中间件的名称: 要注册它,您必须将其插入 $routeMiddleware 部分

 'admin' => MustBeAdministrator::class,

如果你想要不同类型的管理员检查,你可以编辑你的路由来传递一个变量:

  ->middleware('admin:employee');

你可以像这样在你的中间件中获取这个变量:

在@param \Closure $next 评论下方输入:

@param 字符串 $permition

并修改您的功能:

public function handle($request, Closure $next, $permition)

然后在 if 语句中使用您的许可变量来做任何您想做的事情。

【讨论】:

  • 我已经在使用中间件组进行身份验证。身份验证后,我想检查经过身份验证的用户是否有权访问特定页面。
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 2020-11-04
  • 2012-01-17
  • 2015-05-28
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多