controller; //取得目前的Route Method $method = $currentRoute->getActionMethod(); //如果Controller為選單項目的子類別 if(is_subclass_of($menuController, \App\Http\Controllers\Admin\Menu\BaseMenuItemController::class)) { //如果方法為預設的route方法 if($method == 'handle') { //取得slug組成的route name $routeName = str_replace(config('admin.route_name_prefix') . config('admin.menu.route_name_prefix'), '', Route::currentRouteName()); //取得Admin選單項目 $adminMenu = app('AdminMenu')->getMenu(); //分解Slug $slugs = explode('.', $routeName); //如果slug數量大於1,則為子選單controller if(sizeof($slugs) > 1) { $permission = Arr::get($adminMenu, "{$slugs[0]}.children.{$slugs[1]}.userHasPermission"); } else { $permission = Arr::get($adminMenu, "{$slugs[0]}.userHasPermission"); } if(!$permission) { abort(403); } } } return $next($request); } }