Laravel服务提供商验证路线

时间:2017-03-06 12:09:38

标签: php laravel-5 laravel-5.4 service-provider laravel-middleware

在Laravel 5.4中,我为节目特定路线制作了一个自定义服务提供商。我的代码工作正常,但我遇到了一个问题。问题是,如果用户ABC分配了两个路线(菜单' s),例如

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);
        });
    }

}

请建议我如何解决。

1 个答案:

答案 0 :(得分:0)

您可以定义自定义请求类,并在其的authorize()方法中检查权限。或者,您可以添加中间件以授权请求并从该中间件重定向到404。

这个问题可能会对你有所帮助。 https://laracasts.com/discuss/channels/general-discussion/l5-middleware-or-authorize-method?page=1