0

在Laravel 5.4中,我爲顯示特定路線創建了一個定製服務提供商。我的代碼工作正常,但我面臨着一個問題。問題是,如果用戶ABC分配兩條路線(菜單的),例如Laravel服務提供商驗證路線

user\list 
user\form 

現在,如果用戶ABC嘗試調用像user\show_form其他網址,以便用戶ABC可以訪問此路線(菜單)。所以如果用戶ABC沒有權限訪問user\show_form並且用戶嘗試訪問這條路線(菜單),那麼它有可能重定向到404頁面。

我的服務提供商

class UserNavigationServiceProvider extends ServiceProvider { 

    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() { 
     $this->getUserNavigation(); 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() { 
     // 
    } 

    /** 
    * getUserNavigation() function use for after user login 
    * fetch the rights 
    * @return void 
    */ 
    private function getUserNavigation() { 
     $user_permission = user_permission(); 
     View::composer('admin.navbar', function($view) use ($user_permission) { 
      $auth_user = Auth::user(); 
      $user_id = $auth_user->id; 
      $user_group = UserPermissionsGroup::select('user_permissions_id') 
        ->where('user_id', $user_id) 
        ->get() 
        ->toArray(); 
      $menu = array(); 
      foreach ($user_group as $k => $v) { 
       foreach($v as $kv) { 
        $menu[$kv] = id_to_text($kv, $user_permission); 
       } 
      } 
      $view->with('menu_list', $menu); 
     }); 
    } 

} 

請建議我該如何解決。

回答

0

您可以定義自定義請求類並在其authorize()方法中檢查權限。或者您可以添加一箇中間件來授權請求​​,並從該中間件重定向到404。

此問題可能會對您有所幫助。 https://laracasts.com/discuss/channels/general-discussion/l5-middleware-or-authorize-method?page=1

+0

我怎麼可以設置UserNavigationServiceProvider –

+0

'$ menu'全局變量所以'$ menu'全局變量,我可以訪問 –

+0

您可以創建一個門面一個setter方法和getter方法的任何控制器。從UserNavigationServiceProvider中設置它的值,並使用控制器中的get方法來獲取該值。或者你可以在會話中設置它。 希望這有助於.. – sp11