Hey all,

I'm learning rails and am trying to put together a generic ACL check
for all models.  I've been able to sucessfully implement it as a
method for all models by decorating ActiveRecord::Base.  But when I
try to do the "rails way" of creating an association (and thereby
taking advantage of the ORM), I don't get very far...


Here is the code:

class ActiveRecord::Base

        has_many(:permissions)
  named_scope(:acl_check, lambda do |user_id, method|
                {
                        :include => :permission,
                        :conditions => [
                                ["permissions.user_id=?", user_id],
                                ["permissions.method=?", method],
                                ["permissions.classname=?", self.class.name]
                        ]
                }
  end)



        # Conducts a permission check for the entire class.
        def self.check_acl(user_id, method)

                # Perform the permission check by User.
                permission_check =
Permission.find_by_user_id_and_instance_id_and_classname_and_method
(user_id, nil, self.class.name, method)
                if(permission_check)
                        # If the row exists, we generate a hit.
                        return(true)
                end

                # Perform the permission check by Role.

                # Otherwise, the permissions check was a miss.
                return(false)

        end

        # Conducts a permission check for the current instance.
        def check_acl?(user_id, method)

                # Perform the permission check by User.
                permission_check =
Permission.find_by_user_id_and_instance_id_and_classname_and_method
(user_id, self.id, self.class.name, method)
                if(permission_check)
                        # If the row exists, we generate a hit.
                        return(true)
                end

                # Perform the permission check by Role.

                # Otherwise, the permissions check was a miss.
                return(false)

        end

end

Currently, calling check_acl on either an instance of a model or the
model class itself functions as expected.  But attempting to call
acl_check (my named_scope), just results in a method not found.

At the very least I'd like to know why this isn't working and if at
all possible, I'd like to hear some ideas on how I can make this
work.  I've heard about using modules, but I'd like to not have to
include a source file in each model.  Ideally doing it the object-
oriented way would make me happier :)

But again, I'd love to hear details on why ActiveRecord isn't making
this happen....

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to