首页
学习
活动
专区
圈层
工具
发布

Gem
EN

Stack Overflow用户
提问于 2017-07-08 22:42:12
回答 1查看 281关注 0票数 1

我对CanCan Gem有点困惑。我基本上了解如何设置abillity.rb。例如,假设我们有以下代码:

代码语言:javascript
复制
// in abillity.rb

user ||= User.new

can [:update, :destroy, :edit, :read], Book do |book|
  book.dashboard.user_id == user.id
end

然后假设我们有以下书籍控制器:

代码语言:javascript
复制
// books_controller.rb
load_and_authorize_resource

def destroy
  if can?(:destroy, @book)
    @book.destroy!
    redirect_to happy_world_path
  else
    redirect_to not_happy
  end
end

我的问题是:我们需要检查“罐”吗?(:销毁,@book)?根据我的理解,如果我们没有能力摧毁这个方法,'load_and_authorize_resource‘甚至不允许访问它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-09 01:08:56

如果使用if can?(:destroy, @book),则无需在操作中添加load_and_authorize_resource

就像自述文件说的

为每个操作设置此操作可能很繁琐,因此提供了load_and_authorize_resource方法来自动授权RESTful样式资源控制器中的所有操作。

如果用户未经授权试图破坏,他会得到未经授权的响应(不记得是否是401代码)。

也许您可以在视图中使用if can?(:destroy, @book),以不显示“销毁”按钮。就像在检查能力与授权部分一样

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44991379

复制
相关文章

相似问题

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