Class: EasyAdmin::Permissions::Component::PermissionCaseBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/easy_admin/permissions/component.rb

Overview

Helper class for building conditional permission rendering

Instance Method Summary collapse

Constructor Details

#initialize(component, context) ⇒ PermissionCaseBuilder

Returns a new instance of PermissionCaseBuilder.



127
128
129
130
131
132
# File 'lib/easy_admin/permissions/component.rb', line 127

def initialize(component, context)
  @component = component
  @context = context
  @cases = []
  @else_block = nil
end

Instance Method Details

#otherwise(&block) ⇒ Object



144
145
146
147
# File 'lib/easy_admin/permissions/component.rb', line 144

def otherwise(&block)
  @else_block = block
  self
end

#renderObject



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/easy_admin/permissions/component.rb', line 149

def render
  @cases.each do |case_item|
    case case_item[:type]
    when :permission
      if @component.current_user_can?(case_item[:name], context: @context)
        return case_item[:block].call if case_item[:block]
      end
    when :role
      if @component.current_user_has_role?(case_item[:name], context: @context)
        return case_item[:block].call if case_item[:block]
      end
    end
  end

  @else_block&.call
end

#when_can(permission_name, &block) ⇒ Object



134
135
136
137
# File 'lib/easy_admin/permissions/component.rb', line 134

def when_can(permission_name, &block)
  @cases << { type: :permission, name: permission_name, block: block }
  self
end

#when_has_role(role_name, &block) ⇒ Object



139
140
141
142
# File 'lib/easy_admin/permissions/component.rb', line 139

def when_has_role(role_name, &block)
  @cases << { type: :role, name: role_name, block: block }
  self
end