我的Gemfile中有以下内容
gem 'cancan', '1.6.4'
我能够很好地使用cancan,除非在资源缺失的情况下。让我们说我是一个资源用户,访问受CanCan保护。
所以我的ability.rb文件有
can :manage, User, :user_id => @user.id
这很有用,因为用户只能操纵他们自己的个人资料 - 如果你试图管理别人的个人资料,cancan会抛出CanCan::AccessDenied
然而,如果某人正在捕获帐户并开始使用随机用户ID来访问用户信息,则尝试点击http://myserver.com/users/100
并且如果id为100的用户不存在则会出现错误,因为cancan无法甚至可以找到id = 100的用户的记录。
这不是优雅的 - 我喜欢cancan仍然会抛出CanCan::AccessDenied
异常以便
实际上我希望cancan能够拒绝访问缺少的资源
非常感谢任何指针
答案 0 :(得分:1)
我从来没有这样做,但我认为你可以放置一个处理ActiveRecord :: RecordNotFound的全局异常处理程序,并抛出所需的异常。
应用程序控制器中的类似内容可能有效:
class ApplicationController < ActionController::Base
rescue_from(ActiveRecord::RecordNotFound) {
raise(CanCan::AccessDenied, 'Invalid access request')
}
end