首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CanCan Gem -如何使cancan拒绝对丢失的资源的访问?

CanCan Gem -如何使cancan拒绝对丢失的资源的访问?
EN

Stack Overflow用户
提问于 2011-11-03 07:11:47
回答 1查看 1.7K关注 0票数 1

我在我的Gemfile中有以下内容

代码语言:javascript
复制
gem 'cancan', '1.6.4'

我可以很好地使用cancan,除非在缺少资源的情况下。让我们假设我拥有一个资源用户,其访问权限受CanCan保护。

所以我的ability.rb文件

代码语言:javascript
复制
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异常,以便

  1. 用户体验更好,我的exception_logger db没有塞满异常,当有人在钓鱼时,
  2. ,我没有收到这个

的通知

实际上,我希望cancan拒绝对丢失的资源进行访问。

任何指针都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2011-11-03 08:28:44

我从未这样做过,但我认为您可能会设置一个全局异常处理程序来处理ActiveRecord::RecordNotFound并抛出所需的异常。

在您的应用程序控制器中,类似这样的内容可能会工作:

代码语言:javascript
复制
class ApplicationController < ActionController::Base
  rescue_from(ActiveRecord::RecordNotFound) {
    raise(CanCan::AccessDenied, 'Invalid access request')
  }
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7991324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档