2016-05-24 69 views
0

我試圖定義一箇中間件FederationMiddleware:

public function handle($request, Closure $next) 
{ 
    dd($request->request); // prints null 
    if (Auth::check()) { 
     $userLogged = Auth::user(); 
     if (!$userLogged->isSuperAdmin()) { 
      throw new UnauthorizedException; 
     } 
    } 
    return $next($request); 
} 

在Kernel.php

protected $routeMiddleware = array( 
    ... 
    'federation' => Middleware\FederationMiddleware::class, 

在我的控制,我有:

public function __construct() 
{ 
    $this->middleware('federation'); 
} 

我基本上需要的是允許聯邦的所有者編輯他自己的信息,所以,我需要解析URL以知道如果URL包含聯邦/聯邦ID和聯邦ID ==用戶 - >聯邦() - > ID,授予訪問權限

+0

嘗試使用dd($ request-> getMethod())而不是dd($ request-> request)進行調試,就好像它不是POST請求,它將爲空 – Brett

+0

它是一個GET,但$ request不應該給我的URL參數? –

+0

- >查詢會給你GET參數我很確定。因爲它使用Symfony請求類 – Brett

回答

0

除非您需要更高級的東西,否則您可以從當前網址解析並進行檢查。

$path = $request->path(); 
if (preg_match('@^federation/(\d+)/[email protected]', $path, $match)) { 
    $federationId = $match[1]; 
    // compare with the user's federation id here 
} 

這將匹配sitename.xyz/federation/[somedigits]/edit並且沒有其他地址。

+0

我baaaaad與正則表達式。但在這種情況下,如果url是/ federations/{id}/edit /,則需要進行比較,因爲有更多url可能包含federationId –

+0

我明白。請看我編輯的答案,我想這就是你想要的原因? –

+0

它不回答我的問題,但它似乎解決了我的問題! TX –