* Complex roles with ANDing. Something like: access_control do allow all, :except => :destroy allow complex_role, :to => :destroy do is :strong is :decisive is :owner, :of => :object is_not :banned is_not :fake end end * Acl9-based menu generator. If you get Access Denied on /secrets/index, probably you shouldn't see "Secrets" item in the menu at all. It can be very DRY. Say, we introduce :menu => true option to access_control method which will make it register a lambda (can see/cannot see) in some global hash (indexed by controller name). Then, given an URL, you'll be able to check it against this hash. /secrets/index is mapped to SecretsController#index, so you run access_control_hash['SecretsController'].call('index') and show the link only if true is returned. The problem here is with objects. SecretsController's access_control block can reference instance variables during the permission check, but we have only current instantiated controller which can be any. Another option is to distinguish visible part from access control part. menu do item 'Home', home_path item 'Secrets', secrets_path do allow :trusted end # ... end Here only "trusted" users will see "Secrets" item.