Поставщики услуг Laravel проверяют маршруты

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

}

Пожалуйста, предложите мне, как решить.


person sandip kakade    schedule 06.03.2017    source источник


Ответы (1)


Вы можете определить класс Custom Request и в его методе authorize() проверить наличие разрешений. Или вы можете добавить промежуточное ПО для авторизации запроса и перенаправления на 404 из этого промежуточного ПО.

Этот вопрос может помочь вам. https://laracasts.com/discuss/channels/general-discussion/l5-middleware-or-authorize-method?page=1

person sp11    schedule 06.03.2017
comment
как установить глобальную переменную $menu в UserNavigationServiceProvider - person sandip kakade; 06.03.2017
comment
Так что $menu глобальная переменная я могу получить доступ к любому контроллеру - person sandip kakade; 06.03.2017
comment
Вы можете создать фасад с помощью одного метода установки и метода получения. Установите его значение из UserNavigationServiceProvider и используйте методы получения в контроллере, чтобы получить это значение. Или вы можете установить его в сеансе. Надеюсь это поможет.. - person sp11; 07.03.2017