<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -12,6 +12,21 @@ module Authorization
     
     DEFAULT_DENY = false
     
+    # If attribute_check is set for filter_access_to, decl_auth will try to
+    # load the appropriate object from the current controller's model with
+    # the id from params[:id].  If that fails, a 404 Not Found is often the
+    # right way to handle the error.  If you have additional measures in place
+    # that restricts the find scope, handling this error as a permission denied
+    # might be a better way.  Set failed_auto_loading_is_not_found to false
+    # for the latter behaviour.
+    @@failed_auto_loading_is_not_found = true
+    def self.failed_auto_loading_is_not_found?
+      @@failed_auto_loading_is_not_found
+    end
+    def self.failed_auto_loading_is_not_found= (new_value)
+      @@failed_auto_loading_is_not_found = new_value
+    end
+
     # Returns the Authorization::Engine for the current controller.
     def authorization_engine
       @authorization_engine ||= Authorization::Engine.instance
@@ -548,19 +563,12 @@ module Authorization
       context = @context || contr.class.controller_name.to_sym
       object = @attribute_check ? load_object(contr, context) : nil
       privilege = @privilege || :&quot;#{contr.action_name}&quot;
-      
-      #puts &quot;Trying permit?(#{privilege.inspect}, &quot;
-      #puts &quot;               :user =&gt; #{contr.send(:current_user).inspect}, &quot;
-      #puts &quot;               :object =&gt; #{object.inspect},&quot; 
-      #puts &quot;               :skip_attribute_test =&gt; #{!@attribute_check},&quot; 
-      #puts &quot;               :context =&gt; #{contr.class.controller_name.pluralize.to_sym})&quot;
-      res = contr.authorization_engine.permit!(privilege, 
+
+      contr.authorization_engine.permit!(privilege, 
                                          :user =&gt; contr.send(:current_user),
                                          :object =&gt; object,
                                          :skip_attribute_test =&gt; !@attribute_check,
                                          :context =&gt; context)
-      #puts &quot;permit? result: #{res.inspect}&quot;
-      res
     end
     
     def remove_actions (actions)
@@ -581,12 +589,12 @@ module Authorization
         unless object
           begin
             object = load_object_model.find(contr.params[:id])
-          rescue ActiveRecord::RecordNotFound, RuntimeError
+          rescue RuntimeError =&gt; e
             contr.logger.debug(&quot;filter_access_to tried to find &quot; +
-                &quot;#{load_object_model.inspect} from params[:id] &quot; +
+                &quot;#{load_object_model} from params[:id] &quot; +
                 &quot;(#{contr.params[:id].inspect}), because attribute_check is enabled &quot; +
-                &quot;and #{instance_var.to_s} isn't set.&quot;)
-            raise
+                &quot;and #{instance_var.to_s} isn't set, but failed: #{e.class.name}: #{e}&quot;)
+            raise if AuthorizationInController.failed_auto_loading_is_not_found?
           end
           contr.instance_variable_set(instance_var, object)
         end</diff>
      <filename>lib/declarative_authorization/in_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -254,6 +254,13 @@ class LoadObjectControllerTest &lt; ActionController::TestCase
     assert_raise RuntimeError, &quot;No id param supplied&quot; do
       request!(MockUser.new(:test_role), &quot;show&quot;, reader)
     end
+    
+    Authorization::AuthorizationInController.failed_auto_loading_is_not_found = false
+    assert_nothing_raised &quot;Load error is only logged&quot; do
+      request!(MockUser.new(:test_role), &quot;show&quot;, reader)
+    end
+    assert !@controller.authorized?
+    Authorization::AuthorizationInController.failed_auto_loading_is_not_found = true
   end
   
   def test_filter_access_with_object_load_custom</diff>
      <filename>test/controller_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f40acbdc1a24df3031fdac2cfcad552d9143266a</id>
    </parent>
  </parents>
  <author>
    <name>Steffen Bartsch</name>
    <email>sbartsch@tzi.org</email>
  </author>
  <url>http://github.com/stffn/declarative_authorization/commit/3ca12e34a8eadc1d775cfc7ecc76b40853052829</url>
  <id>3ca12e34a8eadc1d775cfc7ecc76b40853052829</id>
  <committed-date>2009-11-06T01:55:21-08:00</committed-date>
  <authored-date>2009-11-06T01:17:50-08:00</authored-date>
  <message>Added option on handling non-existant auto-loaded object</message>
  <tree>54a4f2b686ce5991e75994d3775056dabb0263cd</tree>
  <committer>
    <name>Steffen Bartsch</name>
    <email>sbartsch@tzi.org</email>
  </committer>
</commit>
