Module: IAmICan::Permission::Assignment

Defined in:
lib/i_am_i_can/permission/assignment.rb

Instance Method Summary collapse

Instance Method Details

#_permissions_assignment(exec = :assign, actions, obj) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/i_am_i_can/permission/assignment.rb', line 30

def _permissions_assignment(exec = :assign, actions, obj)
  if actions.tap(&:flatten!).first.is_a?(i_am_i_can.permission_model)
    exec_arg, names = actions, actions.map(&:name)
  else
    objs = obj ? Array(obj) : [nil]
    permissions = actions.product(objs).map { |(p, o)| { action: p, **deconstruct_obj(o) }.values }
    exec_arg = { action: permissions.map(&:first).uniq, obj_type: permissions.map { |v| v[1] }.uniq, obj_id: permissions.map(&:last).uniq }
    names = permissions.map { |pms| pms.compact.join('_').to_sym }
  end

  assignment = _stored_permissions_exec(exec, exec_arg)
  ResultOf.permission assignment, i_am_i_can, given: [[], names]
end

#can(*actions, resource: nil, obj: resource, _d: i_am_i_can.auto_definition, auto_definition: _d) ⇒ Object Also known as: has_permission



6
7
8
9
10
11
12
# File 'lib/i_am_i_can/permission/assignment.rb', line 6

def can *actions, resource: nil, obj: resource,
        _d: i_am_i_can.auto_definition, auto_definition: _d
  self.class.have_permissions *actions, obj: obj if auto_definition
  run_callbacks(:permission_assign) do
    _permissions_assignment(actions, obj)
  end
end

#can_only(*actions, resource: nil, obj: resource) ⇒ Object



24
25
26
27
28
# File 'lib/i_am_i_can/permission/assignment.rb', line 24

def can_only *actions, resource: nil, obj: resource
  run_callbacks(:permission_update) do
    _permissions_assignment(:replace, actions, obj)
  end
end

#cannot(*actions, resource: nil, obj: resource) ⇒ Object Also known as: is_not_allowed_to



16
17
18
19
20
# File 'lib/i_am_i_can/permission/assignment.rb', line 16

def cannot *actions, resource: nil, obj: resource
  run_callbacks(:cancel_permission_assign) do
    _permissions_assignment(:cancel, actions, obj)
  end
end