Zizaco Entrust Laravel делает запрос mysql для каждого @ разрешения на странице - PullRequest
0 голосов
/ 29 апреля 2020

Я использую Laravel 5.2 с Zicaco Entrust для управления разрешениями и ролями.

У меня есть меню для пользователя, и я использую блейд-систему laravel, чтобы показать меню с @permission для каждого раздела меню, потому что я показываю раздел меню, только если у пользователя есть разрешение на видеть это.

@permission(['upload'])
    <ul class="nav side-menu">
      <li><a><i class="fa fa-home"></i>DB Feed <span class="fa fa-chevron-down"></span></a>
        <ul class="nav child_menu">
          @permission(['file-upload'])
            <li><a href="{!!route('uploadform')!!}">file upload</a></li>
          @endpermission
          @permission(['***-upload'])
            <li><a href="{!!route('***uploadform')!!}">*** upload</a></li>
          @endpermission
          @permission(['***-upload'])
            <li><a href="{!!route('***uploadform')!!}">*** upload</a></li>
          @endpermission
          @permission(['***-upload'])
            <li><a href="{!!route('***uploadform')!!}">*** upload</a></li>
          @endpermission
        </ul>
      </li>
    </ul>
    @endpermission

И так продолжается, так как у меня есть около 50 различных @permission в разделе моего меню.

Теперь, когда я смотрю другой доступ mysql, я вижу, что это выполняет 50 раз один и тот же запрос к БД:

select `roles`.*, `role_user`.`user_id` as `pivot_user_id`, `role_user`.`role_id` as `pivot_role_id` from `roles` inner join `role_user` on `roles`.`id` = `role_user`.`role_id` where `role_user`.`user_id` = '1'
select `permissions`.*, `permission_role`.`role_id` as `pivot_role_id`, `permission_role`.`permission_id` as `pivot_permission_id` from `permissions` inner join `permission_role` on `permissions`.`id` = `permission_role`.`permission_id` where `permission_role`.`role_id` = '1'

Как я могу изменить это поведение, чтобы оно выполняло только один набор запросов?

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

Хорошо, похоже, что дополнение Entrust к Laravel больше не разработано. Я мог бы найти решение, хотя через кеш. php файл в папке конфигурации и добавить следующую строку:

'ttl' => 30 //In minutes
...