CanCan :read 和 [:index, :show] 之间的区别吗?

2024-03-24

根据所有文件,:read动作是两者的别名:index and :show:

alias_action :index, show, :to => :read

但是,请考虑以下使用嵌套资源的场景:

resources :posts
  resources :comments
end

如果我这样定义能力:

# ability.rb
can :read, Post
can :show, Comment

# comments_controller.rb
load_and_authorize_resource :organization, :find_by => :permalink
load_and_authorize_resource :membership, :through => :organization

事情按预期进行。但是,如果我改变:read对 [:index, :show] 的操作:

# ability.rb
can [:index, :show], Post
can :show, Comment

# comments_controller.rb
load_and_authorize_resource :organization, :find_by => :permalink
load_and_authorize_resource :membership, :through => :organization

我无权访问/posts/:post_id/comments, /posts/:post_id/comments/:id等等。不过,我仍然可以访问这两个:index and :show为了posts_controller.

如果这些行为的行为不同,它们怎么可能是“别名”呢?

在我的摆弄中,我还遇到了以下情况。改变load_and_authorize_resource以下允许的访问:

# ability.rb
can [:index, :show], Post
can :show, Comment

# comments_controller.rb
load__resource :organization, :find_by => :permalink
load_and_authorize_resource :membership, :through => :organization

有人能解释一下这是怎么回事吗?


我将此作为问题发布在 GitHub 上。瑞安回应如下:

这俩:index and :show行动 指向:read行动。但当 CanCan授权其父资源 使用:read直接采取行动 这就是您看到这种行为的原因。

我认为这引起了混乱 之前,所以我会改变内部 从不使用的行为:read直接行动。代替:parent资源我会把它改成 使用:show并为accessible_by我将使用默认值:index代替:read。谢谢 让我注意到这一点。

https://github.com/ryanb/cancan/issues/302#comment_863142 https://github.com/ryanb/cancan/issues/302#comment_863142

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CanCan :read 和 [:index, :show] 之间的区别吗? 的相关文章

随机推荐

  • 前台服务被操作系统杀死

    我有一个前台服务 它从服务器下载一些数据 问题是有时操作系统杀死了我的前台服务 但服务的通知不会被删除 关于如何在服务不再存在时删除通知的任何想法 None
  • 棘手的 Django GenericRelation 查询

    假设我有一些代表现实生活中的对象的模型 Person Chair Room 我也有一个 收藏 模型 它代表这些模型的一些记录的集合 每个模型都可以是多个集合中的成员 因此 我还创建了一个 会员资格 model 表示一个对象是集合的成员 它的
  • Firestore 文档参考数组

    我的 Firestore 数据库具有以下结构 products Collection procuct 1 Document title url videos Collection video 1 Document title product
  • 如何在 mac osx 上安装 Python docx 模块

    我正在尝试生成 docx使用 Python 的文件 我搜索了网络和帖子 发现了一个模块 https github com mikemaccana python docx blob master README markdown https g
  • 当 Android 的 PreferenceActivity 的 isValidFragment() 被调用时?

    对于我正在开发的某些应用程序 对于 API 级别 19 的设备 我遇到了异常 Caused by java lang RuntimeException Subclasses of PreferenceActivity must overri
  • 当属性是对象时命名查询?

    我想在 JPA 中进行此查询 SELECT FROM happyDB users U WHERE U party as user 1 AND U party party id 2 这工作正常 但我的问题是我有Party只能作为一个对象 而不
  • 由 Android 应用程序和网站共享的关系数据库 - 最简单的方法

    我有一个项目 我将开发一个 Android 应用程序和一个网站 他们都应该共享相同的数据库 我正在尝试探索所有选项 但我真的很困惑 这是我的要求 1 我需要一个非常简单且EASY方式 我并不是想学习 我只是想学习 我只是想把事情做好 2 数
  • microk8s 连接到端口 16443 被拒绝

    我收到以下错误消息 root master 1 microk8s kubectl get no The connection to the server 127 0 0 1 16443 was refused did you specify
  • 使用 Storyboard 与编程方式进行 iOS 开发的速度?

    作为初级 iOS 开发人员 哪种方法可以实现更快 更高效的开发 这个问题没有正确的答案 对于使用 Xcode 进行开发 2 3 年的人来说 旧的编程方式更高效 而且故事板感觉很陌生 这就是我个人的处境 对于今天刚刚开始使用 Xcode 或
  • 如何向 NSDate 添加 1 天?

    基本上就如标题所说 我想知道如何添加 1 天NSDate 所以如果是 21st February 2011 它将变成 22nd February 2011 或者如果是 31st December 2011 它将变成 1st January
  • Powershell:作为本地系统运行时向登录用户发送 toast 通知

    我有一个作为本地系统运行的脚本 它执行一些操作 包括检查用户是否已登录 如果是 它会运行 PowerShell 代码片段来显示 toast 通知 如下所示 如果 PS 以当前用户身份运行 则可以正常工作 如果它作为 LocalSystem
  • Python对一个列表从另一个列表进行排序[重复]

    这个问题在这里已经有答案了 我已经在这个程序上工作了一段时间 但不知道如何从第二个列表中的内容对我的一个列表进行排序 对于这个程序 我有一个单词列表 还有一个单词在我打开的文件中出现的次数的列表 我需要根据单词出现的频率降序对单词列表进行排
  • NSFontAttributeName 与 NSAttributedStringKey.font

    我在使用我已经使用了一段时间的库中的 Swift 代码时遇到了一些问题 这似乎与某种版本冲突有关 但我不确定 这是代码 let attribMsg NSAttributedString string msg attributes NSAtt
  • ggplot 中的欧洲/法国千位分隔符

    我正在尝试格式化 ggplot 图中的 y 轴 并使用空格 而不是逗号 作为千位分隔符 大约是 10 000 而不是 10 000 我在 中找不到它scale y continuous help 感谢您的任何提示 正如 David 和 jo
  • Xcode 4 调试

    自从迁移到 Xcode 4 以来 我对调试视图完全感到困惑 因为我无法看到数组 字典等的值 在 Xcode 3 下我可以查看调试控制台并查看存储的实际值 调试信息现在出现在调试导航器 http developer apple com lib
  • 在 Visual Studio 中删除折叠区域和摘要周围的框

    我正在使用 VS2010 我想在压缩区域和 或摘要时更改它们的字体样式 主要是为了删除这些部分周围的边框 因为在滚动代码时它会变得分散注意力 我浏览了 字体和颜色 和其他选项 但找不到任何明显可以让我更改它的内容 这个字体可以自定义吗 如果
  • 如何在不使用 strlen() 的情况下查找 php 中的字符串长度?

    如何在不使用 php 的情况下找到字符串的长度strlen 我知道这是一个很老的问题 但这段代码对我有用 s string i 0 while s i i print i
  • 将 void 函数模板专门化为 const char[N]

    我有一个我想要专门化的模板化函数foo to const char N 硬编码字符串 template
  • 购物车和各种折扣。将折扣存储在数据库中并将其应用于订单计算

    目前 我正在寻找对购物车 订单 应用折扣 的最佳实践 因此 我计划实施此类折扣 固定用户折扣 例如 我想给我最喜欢的客户 10 的折扣 商品数量折扣 例如 您购买 10 支不同颜色的钢笔 您将获得 1 5 的折扣 优惠券折扣 例如 在促销活
  • CanCan :read 和 [:index, :show] 之间的区别吗?

    根据所有文件 read动作是两者的别名 index and show alias action index show to gt read 但是 请考虑以下使用嵌套资源的场景 resources posts resources commen