2015-12-19 4 views
1

Создание платформы для блога, и моя цель - не дать пользователю возможность прямого доступа к любым страницам, которые позволяют им публиковать их под другим пользователем.Передача параметра в промежуточное ПО Laravel

Например, они создали блог «Blog 1»

Если другой пользователь идет, чтобы добавить новую запись в этом дневнике:

/blog/newupdate/1 

Тогда я хочу, чтобы блокировать это.

У меня есть методы, установленные для моего пользователя, когда я проверяю его в представлениях, но мне нужен способ заблокировать этот доступ.

У меня есть промежуточное программное обеспечение, установленный в группе:

Route::group(['middleware' => 'auth','OwnsProject'], function() { 
    Route::get('/project/newupdate/{id}',[ 
     'as' => 'project/newupdate', 
     'uses' => '[email protected]' 
    ]); 
}); 

В моей средней посуде я хочу сделать:

public function handle($request, Closure $next) 
{ 
    if (!Auth::user()->ownsProject($id)) { 
     // nada 
    } 
    return $next($request); 
} 

Но ничего, кажется, приходит через в запросе?

ответ

0

Ваш OwnsProject промежуточный слой не применяются к маршруту. Если вы используете 2 или более промежуточного ПО, вы должны передать их в массиве:

Route::group([ 'middleware' => ['auth','OwnsProject'] ], function() { 
    Route::get('/project/newupdate/{id}',[ 
     'as' => 'project/newupdate', 
     'uses' => '[email protected]' 
    ]); 
}); 

Как уже упоминалось в ответ Вишал, это вернет вам значение «ид» в вашем ППО.

$id = $request->route()->getParameter('id'); 

Так что вы должны сделать что-то подобное в вашем промежуточного

public function handle($request, Closure $next) 
{ 
    $id = $request->route()->getParameter('id'); 

    if (!(\Auth::user()->ownsProject($id))) { 
     return redirect('/'); // Or anything else you want 
    } 
    return $next($request); 
} 
1

вы можете получить доступ к параметру id, используя ваш объект запроса в

$id = $request->route()->getParameter('id');

затем Ваш остальной код:

public function handle($request, Closure $next) 
{ 
    $id = $request->route()->getParameter('id'); 

    if (!Auth::user()->ownsProject($id)) { 
     // nada 
    } 
    return $next($request); 
} 
+0

Вы можете сократить это. –

+0

попробовал, грустно вернул null. – Lovelock

0

Просто используйте метод route вашего объекта запроса.

$id = $request->route('id'); 
+0

Спасибо, никогда не пробовал! Он работает –

+0

Добро пожаловать :) –

+0

Route() возвращает null. – Lovelock

Смежные вопросы