Sha256: 5f8d96d606cf8fa658a43c09f2fd6d166ba5d8262eb5d6196be2936b825311ca
Contents?: true
Size: 1.27 KB
Versions: 1
Compression:
Stored size: 1.27 KB
Contents
module IAmICan module Permission module Assignment 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 alias has_permission can def cannot *actions, resource: nil, obj: resource run_callbacks(:cancel_permission_assign) do _permissions_assignment(:cancel, actions, obj) end end alias is_not_allowed_to cannot def can_only *actions, resource: nil, obj: resource run_callbacks(:permission_update) do _permissions_assignment(:replace, actions, obj) end end def _permissions_assignment(action = :assign, actions, obj) permissions = actions.product(Array[obj]).map { |(p, o)| { action: p, **deconstruct_obj(o) } } assignment = _stored_permissions_exec(action, permissions.reduce({ }) { |a, b| a.merge(b) { |_, x, y| [x, y] } }) ResultOf.permission assignment, i_am_i_can, given: [[], permissions.map { |pms| pms.values.compact.join('_').to_sym }] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
i_am_i_can-4.1.0 | lib/i_am_i_can/permission/assignment.rb |