Я создаю приложение реального времени в Laravel с пользовательскими охранниками, используя JWT: person-api для Person и worker-api< /strong> для рабочего. Они представляют разные модели, не одну и ту же с ролями.
Человек может запросить определенную Работу, и Работник может принять эту работу. У меня есть отдельная таблица для каждой модели, jobs — промежуточная таблица между Person и Worker с person_id strong> и 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, это уже реализовано. Я говорю об аутентификации нескольких пользователей с разными охранниками в одном и том же широковещательном канале и изменении условий авторизации в соответствии с типом пользователя и статусом задания.
if (auth('worker')->check())
иif (auth('person')->check())
? - person Ohgodwhy   schedule 09.01.2018$user
для закрытия, но все же мне нужно проверить авторизацию в зависимости от пользователя и состояния задания. - person Reque   schedule 09.01.2018broadcast
и вернуть true, когда захотите. - person Ohgodwhy   schedule 09.01.2018