我在我的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用户的记录。
这不是优雅的Id,像cancan一样仍然抛出CanCan::AccessDenied异常,以便
的通知
实际上,我希望cancan拒绝对丢失的资源进行访问。
任何指针都是非常感谢的。
发布于 2011-11-03 08:28:44
我从未这样做过,但我认为您可能会设置一个全局异常处理程序来处理ActiveRecord::RecordNotFound并抛出所需的异常。
在您的应用程序控制器中,类似这样的内容可能会工作:
class ApplicationController < ActionController::Base
rescue_from(ActiveRecord::RecordNotFound) {
raise(CanCan::AccessDenied, 'Invalid access request')
}
endhttps://stackoverflow.com/questions/7991324
复制相似问题