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