В моем приложении на аукционе rails авторизованные пользователи могут одновременно подключаться к 2 каналам на странице продукта (один канал all_users для продукта, другой канал для прямого обмена сообщениями для конкретного пользователя.)
Теперь я хотел бынравится отправлять конфиденциальную информацию только пользователям группы администратора.Я пытался определить запрос подключения к третьему каналу (admin_channel) в сценарии кофе, но я не мог понять, как я могу авторизовать подключение пользователя для 3-го канала в зависимости от роли.
Другой альтернативой может быть использование существующего пользовательского канала, но здесь я не мог понять, как бэкэнд-классы могут знать, какие пользователи в группе администраторов в данный момент находятся в сети (есть ли пользовательский канал запущен и работает) ..
Ты хоть представляешь, как мне этого добиться?Будем благодарны за любую поддержку.
Ниже вы можете найти мой существующий файл connection.rb и файлы coffeescript.
Вот мой файл connection.rb:
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
protected
def find_verified_user # this checks whether a user is authenticated with devise
if verified_user = env['warden'].user
verified_user
else
reject_unauthorized_connection
end
end
end
end
сценарий кофе:
$( document ).ready ->
App.myauction = App.cable.subscriptions.create({
channel: 'MyauctionChannel'
id: $('#auctionID').attr('data-id')
},
connected: ->
console.log "Connected"
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
speak: (message) ->
@perform 'speak', message: message
received: (data) ->
console.log(data)
# Called when there's incoming data on the websocket for this channel
)
App.myauctionuser = App.cable.subscriptions.create({
channel: 'MyauctionChannel',
id: $('#auctionID').attr('data-uuid-code')
},
connected: ->
console.log "user connected"
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
speak: (message) ->
@perform 'speak', message: message
received: (data) ->
# console.log ("user channel ")
# console.log(data)
)