Несколько промежуточное программное обеспечение не работает на Laravel - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть группа ресурсов маршрута, которая может быть доступна только по одному из 2 правил промежуточного программного обеспечения. Я зарегистрировал их обоих, и они оба работают независимо, если я протестирую их обоих в одиночку, но когда они у меня есть, они не работают

Я попытался запустить их оба как оператор "или" (что означает, что промежуточное программное обеспечение работает как задумано), но это означает, что любой, кто не вошел в систему, также может получить доступ к маршрутам по некоторым причинам. Если я использую запятую для разделения промежуточного программного обеспечения, он будет заблокирован для всех. Я знаю, что оба промежуточных программного обеспечения работают нормально, так как они работают, если я попробую их самостоятельно. Я использую код ниже

Route::group(['middleware' => ['IsAdmin' or 'IsPatreon']], function(){
Route::resource('patreon', 'patreonGalleryController', ['names'=>[

  'index'=>'patreonGallery.index',
  'create'=>'patreonGallery.create',
  'store'=>'patreonGallery.store',
  'edit'=>'patreonGallery.edit',
  'show'=>'patreonGallery.show',
  'destroy'=>'patreonGallery.destroy',
  ]]);
});

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

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

вы не можете использовать условие or внутри массива промежуточного программного обеспечения. промежуточный массив всегда возвращает and условие. вы можете указать роль пользователя в вашем промежуточном программном обеспечении.

0 голосов
/ 30 апреля 2019

Два промежуточных программного обеспечения работают отдельно.IsAdmin проверяет, что пользователь является администратором IsPatreon проверяет, что пользователь является patreon ...

Вы не можете объединить эти 2 промежуточных программного обеспечения с помощью OR Operator

Возможно, вам нужно создать новое промежуточное программное обеспечение, что-то вродеIsAdminOrPatreon и проверяете ли вы внутри этого промежуточного программного обеспечения и предоставляете это промежуточное программное обеспечение своей группе.

Или вы можете попробовать с параметрами промежуточного программного обеспечения, например,

Route::group(['middleware' => ['checkRoles:admin,patreon']], function(){
  Route::resource('patreon', 'patreonGalleryController', ['names'=>[

    'index'=>'patreonGallery.index',
    'create'=>'patreonGallery.create',
    'store'=>'patreonGallery.store',
    'edit'=>'patreonGallery.edit',
    'show'=>'patreonGallery.show',
    'destroy'=>'patreonGallery.destroy',
  ]]);
});

И у вас checkRoles middleware получает роли admin и patreaon, например:

public function handle($request, Closure $next) {

    // will contain ['role1', 'role2']
    $allowedRoles = array_slice(func_get_args(), 2);

    // here you can loop and check your roles
}

Примечание!Если вы сдадите 'checkRoles:admin,patreon', вы получите

array(admin,patreon)

Если вы пройдете 'checkRoles:admin', вы получите

array(admin)
...