Как мне аутентифицировать несколько охранников на одном канале в Laravel?

Я создаю приложение реального времени в Laravel с пользовательскими охранниками, используя JWT: person-api для Person и worker-api< /strong> для рабочего. Они представляют разные модели, не одну и ту же с ролями.

Человек может запросить определенную Работу, и Работник может принять эту работу. У меня есть отдельная таблица для каждой модели, jobs — промежуточная таблица между Person и Worker с person_id и worker_id. Когда запрашивается Задание, в столбце worker_id устанавливается значение null до тех пор, пока его не возьмет на себя Worker.

Когда Person запрашивает Job, событие запускается и транслируется по частному каналу, который называется Jobs. Я могу авторизовать человека на этом канале, проверив person_id задания в событии. В этот момент задание доступно любому Рабочему до тех пор, пока он его не возьмет, и тогда только Рабочий, взявший его, может выполнять действия над этим Заданием< /сильный>.

У меня вопрос: как добиться множественной аутентификации с двумя разными сторожами на одном и том же канале, когда метод авторизации может различаться в зависимости от состояния Задания?

Например:

  • Когда запрашивается Задание, я могу авторизовать Person с помощью person_id задания, но worker_id имеет значение null, поэтому оно открыто для любого Worker
  • Когда Рабочий берет задание, авторизация для Человека остается прежней, но теперь в канале авторизуется только Рабочий, который его взял.
  • Когда воркер отказывается от задания, оно снова становится доступным для любого воркера.

Это код в маршрутах моих каналов для вещания:

Broadcast::channel('job.{job}', function ($user, \App\Job $job) {
    // authorization condition goes here
});

Где $user может быть Person или Worker, а условие авторизации может меняться в зависимости от события задания в том же канале.

РЕДАКТИРОВАТЬ: мой вопрос был помечен как возможный дубликат этого вопроса, и я не согласен. Я говорю не только об аутентификации пользователей с помощью JWT, это уже реализовано. Я говорю об аутентификации нескольких пользователей с разными охранниками в одном и том же широковещательном канале и изменении условий авторизации в соответствии с типом пользователя и статусом задания.


person Reque    schedule 09.01.2018    source источник
comment
Не могли бы вы просто сделать if (auth('worker')->check()) и if (auth('person')->check())?   -  person Ohgodwhy    schedule 09.01.2018
comment
@Ohgodпочему, где именно? Я знаю, что могу написать специальное промежуточное ПО для переопределения $user для закрытия, но все же мне нужно проверить авторизацию в зависимости от пользователя и состояния задания.   -  person Reque    schedule 09.01.2018
comment
Вы можете просто сделать это внутри broadcast и вернуть true, когда захотите.   -  person Ohgodwhy    schedule 09.01.2018