cancan icon indicating copy to clipboard operation
cancan copied to clipboard

Being able to specify a method name (of the ability) used for checking abilities (instead of procs)

Open archan937 opened this issue 12 years ago • 3 comments

Currently, it isn't possible to Marshal.dump ability instances with "procced abilities".

class Foo
  include CanCan::Ability
end

foo = Foo.new
foo.can :read, String, nil do |instance|
  # do something
end

Marshal.dump foo
=> TypeError: no marshal_dump is defined for class Proc

So instead of providing a proc, I have made it possible to specify a method of the ability instance used for checking abilities.

class Foo
  include CanCan::Ability
  def evaluate(instance, conditions)
    # do something
  end
end

foo = Foo.new
foo.can :read, String, nil, :evaluate

Marshal.dump foo
=> "\x04\bo:\bFoo\x06:\v@rules[\x06o:\x11CanCan::Rule\f:\x0F@match_allF:\x13@base_behaviorT:\r@actions[\x06:\tread:\x0E@subjects[\x06c\vString:\x10@conditions{\x00:\f@method:\revaluate:\r@ability@\x00"

archan937 avatar Jul 27 '12 13:07 archan937

@archan937: What's the reason to Marshal the ability class? I've never had to do it so curious to know.

andhapp avatar Jul 27 '12 14:07 andhapp

We are storing our abilities in Memcache. Except "procced abilities" aren't possible to dump.

archan937 avatar Jul 27 '12 14:07 archan937

Dear submitter, Since cancan/raynB hasn't been active for more than 6 months and no body else then ryam himself has commit permissions the cancan project is on a stand still. Since cancan has several issues including missing support for rails 4 cancan is moving forward to cancancan. More details on: #994

If your feel that your pull request or bug is still applicable (and hasn't been merged in to cancan) it would be really appreciated if you would resubmit it to cancancan (https://github.com/cancancommunity/cancancan)

We hope to see you on the other side!

xhoy avatar Apr 10 '14 11:04 xhoy