Module: Card::Auth::Proxy

Included in:
Card::Auth
Defined in:
lib/card/auth/proxy.rb

Overview

mechanism for assuming permissions of another user.

Instance Method Summary collapse

Instance Method Details

#as(given_user) ⇒ Object

operate with the permissions of another “proxy” user



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/card/auth/proxy.rb', line 6

def as given_user
  tmp_id = @as_id
  tmp_card = @as_card

  @as_id = Card.id given_user
  @as_card = nil
  # we could go ahead and set as_card if given a card...

  @current_id = @as_id if @current_id.nil?

  return unless block_given?

  yield
ensure
  if block_given?
    @as_id = tmp_id
    @as_card = tmp_card
  end
end

#as_bot(&block) ⇒ Object

operate with the permissions of WagnBot (administrator)



27
28
29
# File 'lib/card/auth/proxy.rb', line 27

def as_bot &block
  as Card::WagnBotID, &block
end

#as_cardCard

proxy user card

Returns:



39
40
41
42
43
# File 'lib/card/auth/proxy.rb', line 39

def as_card
  return @as_card if @as_card&.id == as_id

  @as_card = Card[as_id]
end

#as_idInteger

id of proxy user

Returns:

  • (Integer)


33
34
35
# File 'lib/card/auth/proxy.rb', line 33

def as_id
  @as_id || current_id
end

#with(auth_data) ⇒ Object

Parameters:

  • auth_data (Integer|Hash)

    user id, user name, or a hash

Options Hash (auth_data):

  • current_id (Integer)
  • as_id (Integer)


48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/card/auth/proxy.rb', line 48

def with auth_data
  if auth_data.is_a?(Integer) || auth_data.is_a?(String)
    auth_data = { current_id: Card.id(auth_data) }
  end

  temporarily do
    # resets @as and @as_card
    self.current_id = auth_data[:current_id]
    @as_id = auth_data[:as_id] if auth_data[:as_id]
    yield
  end
end