# How to abort program flow after a redirect?

**URL:** <https://www.ruby-forum.com/t/how-to-abort-program-flow-after-a-redirect/51378>\
**Category:** Rails\
**Created:** [December 30, 2005, 3:11pm UTC](https://www.ruby-forum.com/t/how-to-abort-program-flow-after-a-redirect/51378 "2005-12-30T15:11:34Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![kelleysislander](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kelleysislander](https://www.ruby-forum.com/u/kelleysislander)\
**Post date:** [December 30, 2005, 3:11pm UTC](https://www.ruby-forum.com/t/how-to-abort-program-flow-after-a-redirect/51378/1 "2005-12-30T15:11:34Z")

</div>

I’m developing an authorization plug-in which adds a permit keyword, so  
you  
can do things like:

class FooController \< ApplicationController  
permit “member”

def edit  
permit “owner of :document”, :document =\> Document.find(params[:id])  
# stuff to edit…  
end  
end

I’ve got it mostly working, but if the permit in #edit fails, a  
redirection  
within permit won’t short-circuit the statements after the permit. It  
can  
work by using a block, as in:

permit “admin or owner of :document” do

# stuff to edit

end

or a simple expression like:

if permit? “admin”

# stuff to edit

end

But I’d like a failed permit to act like a “return” at the level of  
#edit,  
so any statements downstream aren’t executed. Any ideas?

Thanks, Bill

---

<div class="post-metadata">

**Author:** ![kelleysislander](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kelleysislander](https://www.ruby-forum.com/u/kelleysislander)\
**Post date:** [December 31, 2005, 1:56am UTC](https://www.ruby-forum.com/t/how-to-abort-program-flow-after-a-redirect/51378/2 "2005-12-31T01:56:01Z")

</div>

Hi,

How about

return unless permit “owner of :document”, :document =\>  
Document.find(params[:id])

–  
Cheers,

Peter D.

Blog: [http://www.RealityForge.org](http://www.RealityForge.org)

---

<div class="post-metadata">

**Author:** ![kelleysislander](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f6c823/32.png) [@kelleysislander](https://www.ruby-forum.com/u/kelleysislander)\
**Post date:** [December 31, 2005, 6:26am UTC](https://www.ruby-forum.com/t/how-to-abort-program-flow-after-a-redirect/51378/3 "2005-12-31T06:26:55Z")

</div>

I guess that’s the simplest solution if I can’t figure out a way to  
bundle  
the return into the permit declaration. Was trying to see how far the  
metaprogramming could be taken.
