【问题标题】:Laravel service providers validate the routesLaravel 服务提供商验证路由
【发布时间】:2017-07-26 07:17:23
【问题描述】:

在 Laravel 5.4 中,我为显示特定路线创建了一个自定义服务提供者。我的代码工作正常,但我面临一个问题。问题是,如果用户 ABC 分配两条路线(菜单),例如

user\list
user\form

现在,如果用户 ABC 尝试调用其他 URL,例如 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);
        });
    }

}

请建议我如何解决。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 如何在 UserNavigationServiceProvider 中设置$menu 全局变量
    • 所以$menu 全局变量我可以访问任何控制器
    • 您可以使用一个 setter 方法和一个 getter 方法来创建外观。从 UserNavigationServiceProvider 设置它的值并使用控制器中的 get 方法来获取该值。或者您可以在会话中设置它。希望这会有所帮助..
    猜你喜欢
    • 2015-04-20
    • 2016-08-23
    • 2016-01-02
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多