aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--lib/action_cable/channel/base.rb16
2 files changed, 19 insertions, 0 deletions
diff --git a/README.md b/README.md
index 94c40f079f..5c6cb1c0fe 100644
--- a/README.md
+++ b/README.md
@@ -141,6 +141,9 @@ App.appearance = App.cable.subscriptions.create "AppearanceChannel",
connected: ->
# Called once the subscription has been successfully completed
+ rejected: ->
+ # Called when the subscription is rejected by the server
+
appear: ->
@perform 'appear', appearing_on: @appearingOn()
diff --git a/lib/action_cable/channel/base.rb b/lib/action_cable/channel/base.rb
index 8bfb74fa89..66d60d7e99 100644
--- a/lib/action_cable/channel/base.rb
+++ b/lib/action_cable/channel/base.rb
@@ -66,6 +66,22 @@ module ActionCable
#
# Also note that in this example, current_user is available because it was marked as an identifying attribute on the connection.
# All such identifiers will automatically create a delegation method of the same name on the channel instance.
+ #
+ # == Rejecting subscription requests
+ #
+ # A channel can reject a subscription request in the #subscribed callback by invoking #reject!
+ #
+ # Example:
+ #
+ # class ChatChannel < ApplicationCable::Channel
+ # def subscribed
+ # @room = Chat::Room[params[:room_number]]
+ # reject! unless current_user.can_access?(@room)
+ # end
+ # end
+ #
+ # In this example, the subscription will be rejected if the current_user does not have access to the chat room.
+ # On the client-side, Channel#rejected callback will get invoked when the server rejects the subscription request.
class Base
include Callbacks
include PeriodicTimers