鍍金池/ 問答/PHP/ 關(guān)于在控制器中檢查權(quán)限問題

關(guān)于在控制器中檢查權(quán)限問題

是這樣的,我需要在控制器的不同方法檢查不同的權(quán)限, 我應(yīng)該如何返回這些提示。

public function create()
{
    // 這里我如何在檢查出權(quán)限不足,返回上一頁? 
    $this->checkPermission('create admin');
    $roles = Role::where('guard_name', 'admin')->get();

    return view('admin.admins.create', compact('roles'));
}


public function edit(Admin $admin)
{
    $this->checkPermission('edit admin');

    $roles = Role::where('guard_name', 'admin')->get();

    return view('admin.admins.edit', compact('admin', 'roles'));
}

private function checkPermission($permission)
{
    if (! $this->guard()->user()->can($permission)) {

        return back()->with('status', '權(quán)限不足');
    }
}

覺得如果每一個方法都寫if有點那什么。有沒有更優(yōu)雅的處理方法?

回答
編輯回答
疚幼

創(chuàng)建一個中間件兒,然后給你的相關(guān)route加個值:

    // 創(chuàng)建一個route組,把你需要檢測的route都放到里面,然后指定到你的中間件兒上
    Route::group(["prefix" => "builder", "middleware" => "myRoute"], function(){

        Route::get("/", [
            "uses"  => "Builder@list_programs",
            "as"    => "list-programs", // 加入的自創(chuàng)建值
        ]);

    });


    // 然后在你的中間件兒里面抓as這個值 然后自定根據(jù)你的需求判斷
    
       public function handle( $request, Closure $next ) {
       
       $as_route = marray_search_key( $request->route()->getAction(), 'as' );
       
       // 這里做判斷
       
       $response = $next($request);
       
       return $response;
    }    
2018年5月1日 22:55
編輯回答
夏木

可以創(chuàng)建一個中間件, 設(shè)置時如下:

Route::get('', ['middleware' => 'check:權(quán)限名字']);

class check
{
    public function handle($req, $next, $perName)
    {
        if (判斷權(quán)限) {
        
            return 如果不通過的話.
        }
        return $next($req);
    }

}
2017年4月4日 23:29
編輯回答
執(zhí)念

我打算使用的方法是這樣的:

private function checkPermission($permission)
{
    if (! $this->guard()->user()->can($permission)) {

        abort(404);
    }
}
2017年8月16日 09:49
編輯回答
溫衫

添加一個middleware ,在middleware里處理,如果有權(quán)限next(),沒有權(quán)限就提示無權(quán)限。

2017年11月2日 03:52