首页 > 解决方案 > 权限用户和角色

问题描述

我需要一些建议,基本上我有一个应用程序,用户可以在其中注册为普通客户,并且在仪表板内有一个选项可以注册为类别列表的作者。一个客户可以是许多作者。

因此,基本上在自定义仪表板中注册/订阅为作者后,会出现一个他创建的作者框,单击它后会转到具有不同菜单的特定仪表板等。

我唯一的问题是当我开始创建权限时,例如我创建了一个名为“作者”的中间件,所以当有人尝试访问这些页面时,它必须是作者。

中间件代码:

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

        if(isset($request->id) && auth()->check() && count(auth()->user()->authorsProfile) > 0){
            return $next($request);
        }
        return redirect('/dashboard')->with("error","Only Authors Allowed");
    }

例子:

Route::group(['middleware' => ['auth','author']], function() {
//Dashboard
Route::get('authorsarea/{id}','AuthorController@dashboard')->name('author-dashboard');
});

所以我需要进行的第二个验证是在控制器内部,我需要根据 ID 检查作者 ID 是否属于客户/用户。

例子:

 public function dashboard($id)
    {

        $user = Auth::user();

        $user_author = Author::find($id);

        if($user_author->user_id != Auth::user()->id){
            return back()->with("error","This Author is not you");
        }

        //Go to dashboard
        return view('frontend.author.dashboard');
    }

我觉得始终粘贴此代码并检查此作者是否属于用户感觉不太干净,有没有比在我尝试访问作者的私人区域的每个页面控制器中始终粘贴此代码更好的方法?

或者即使你们觉得有一种完全不同的方式来做这一切,我也愿意接受。

标签: phplaravellaravel-5

解决方案


您可以制作另一个中间件并在那里进行检查,类似于您创建的作者中间件。像这样的东西:

public function handle($request, Closure $next)
{
    $authorID = $request->route()->parameter('id');
    $user_author = Author::find($authorID);

    if($user_author->user_id != auth()->user()->id){
        return back()->with('error', 'This Author is not you');
    }

    return $next($request);
}

推荐阅读