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

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

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

public function create()
{
    // 這里我如何在檢查出權(quán)限不足,返回上一頁(yè)? 
    $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)限不足');
    }
}

覺(jué)得如果每一個(gè)方法都寫(xiě)if有點(diǎn)那什么。有沒(méi)有更優(yōu)雅的處理方法?

回答
編輯回答
疚幼

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

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

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

    });


    // 然后在你的中間件兒里面抓as這個(gè)值 然后自定根據(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)建一個(gè)中間件, 設(shè)置時(shí)如下:

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

class check
{
    public function handle($req, $next, $perName)
    {
        if (判斷權(quán)限) {
        
            return 如果不通過(guò)的話.
        }
        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
編輯回答
溫衫

添加一個(gè)middleware ,在middleware里處理,如果有權(quán)限next(),沒(méi)有權(quán)限就提示無(wú)權(quán)限。

2017年11月2日 03:52