Pundit:在嵌套资源中授权索引

2023-12-04

将 Rails 4.2.4 与 Devise (3.5.2) 和 Pundit (1.0.1) 结合使用。体面的曝光(2.3.2)。

我有一个简单的用户和想法的嵌套关联:

class User < ActiveRecord::Base
has_many :ideas
...

class Idea < ActiveRecord::Base
belongs_to :user
...

在routes.rb中

devise_for :users

resources :users do
  resources :ideas
end

然后,如果 current_user 不是 Ideas 的所有者(在本例中,如果 current_user.id != 1),我只是尝试禁止访问 users/1/ideas 。 我不知道该怎么做。我可以在索引视图中仅显示 current_user 想法:

[想法控制器]

def show
  authorize idea
end

[理念政策]

def show?
  @current_user == @idea.user
end

但如何防止用户简单地导航到其他用户的 Idea 索引页面呢? 我想在 Ideas 控制器中我应该使用类似的东西:

def index
  authorize user
end

但然后呢?如何向用户政策发送有关创意收集的信息? 或者我应该通过创意政策本身进行授权?


复制我在 GitHub 上的回复在这里,因为这会带来更多流量。


一种方法是创建存根Idea由用户拥有以授权反对。

def index
  @user = User::find(params[:user_id])
  idea  = Idea.new(user_id: @user.id)

  authorize idea

  # ...
end

and an index?方法在你的IdeaPolicy

def index?
  record.user_id = user.id
end

另一种方法是更改​​您授权的内容。而不是授权反对Idea,授权反对User.

def index
  @user = User::find(params[:user_id])

  authorize @user, :show_ideas?

  # ...
end

并创建一个新的show_ideas?方法对你的UserPolicy

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

Pundit:在嵌套资源中授权索引 的相关文章

  • Google API 令牌端点 POST 返回错误请求 400

    我正在尝试用一次性 Google Plus 授权代码换取访问令牌 但我不断收到 400 Bad Request 我正在使用VB NET 这是代码 We should now have a good one time authorizatio
  • 在 Spring Security 中创建自定义 PostAuthorize 方法

    我正在尝试创建一个自定义方法 用于预 后授权调用 如下所示 public class CustomLSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandl
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • Rails 和 Ember 的 JSONAPI 强参数

    我将 Ember 与 ember data 和 Rails api 一起使用 我有一个 createRecord 和 save 来保存工作正常的记录 用于在 Rails 中创建记录的发布请求的网络选项卡中的有效负载如下所示 data att
  • Rails 4 与 MailCatcher 和 Devise gems

    我有一个带有 gem Devise 的应用程序 我需要通过电子邮件确认注册 在配置 环境 rb我添加了这个 ActionMailer Base delivery method smtp ActionMailer Base smtp sett
  • 如何从嵌套字典中获取键?

    我在字典中的字典中有一个列表 FirmA ProductA Color1 Color2 Color3 我想构建第一公司字典级别的键列表 然后 我需要根据公司密钥访问第二级产品字典 最后 我需要根据字典级别 2 产品 中的产品密钥访问颜色列表
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • 在 Rails 4 中使用 AJAX 进行搜索、排序和分页

    我正在尝试进行实时搜索导轨4 0 1应用 我用的是Railscasts 240 教程 http railscasts com episodes 240 search sort paginate with ajax view asciicas
  • ASP.NET MVC:从变量设置授权属性角色时出现问题,需要 const

    我在从变量设置授权属性角色值时遇到问题 错误消息表明它需要一个 const 变量 当我创建 const 类型变量时 它工作正常 但我试图从 Web Config 文件或其他允许最终用户设置它的文件中加载值 我正在使用集成 Windows 身
  • 枚举内的枚举

    这不是我被卡住的问题 而是我正在寻找一种简洁的方式来编写我的代码 本质上 我正在编写一个事件驱动的应用程序 用户触发事件 事件被发送到适当的对象 然后对象处理事件 现在我正在编写偶数处理程序方法 我希望使用 switch 语句来确定如何处理
  • 使用 Rails 4(和 Hstore)在 PostgreSQL 中存储嵌套哈希

    我有一个 Rails 应用程序 它聚合了来自 Google API 的大量数据 我当前将 JSON 响应存储在 MongoDB 中 因此我的 Rails 应用程序同时具有 pg 和 mongo 然而 今天 我遇到了 PostgreSQL H
  • ActionMailer 响应“501 5.5.4 无效参数”

    我正在 Ruby 2 0 0 上使用 Rails 4 开发一个应用程序 在 Devise 中注册后 应用程序会发送一封电子邮件 这是发送电子邮件的代码 应用程序 模型 sponsor rb after create send email t
  • 在 SQL Server 中执行嵌套 case 语句逻辑的最佳方法

    我正在编写一个 SQL 查询 其中返回的一些列需要根据很多条件进行计算 我目前正在使用嵌套的 case 语句 但它变得混乱 有更好的 更有组织性和 或可读性 方法吗 我使用的是 Microsoft SQL Server 2005 一个简化的
  • Rails 会话间歇性重置

    我知道这个主题已经被讨论了很多 但我相信我已经找到了它的一个新变体 我有一个 Rails 4 应用程序 它是从 Rails 3 升级的 并且具有rails ujs and csrf meta tags设置正确 一旦root url在浏览器中
  • 未经授权访问用户 Facebook ID?

    我有一个本机 FBML Facebook 应用程序 我不想让应用程序访问者完成授权过程 但我确实想知道他们的 Facebook ID 是否可以找到访问用户的 Facebook ID 而不要求他们 授权 我的应用程序 之前 我说过这是不可能的
  • python:嵌套类:访问外部类的类成员

    这不起作用 class A a1 4 class B b1 A a1 Fails b2 6 class C c1 A B b2 Fails 有什么非神秘的方法来解决它吗 我知道我可以从 A 中取出 B 和 C 但我想将它们保留在其中 我还认
  • 用于嵌套表达式的方案宏

    可以在Scheme中编写宏吗 用define syntax 例如 将采用如下表达式 op a b c d e f g h i j 并将像这样的yield表达式作为输出 op op op op op op op op op a b c d e
  • 分别对用户和管理员进行身份验证

    class ApplicationController lt ActionController Base protect from forgery skip before filter authenticate user only gt w
  • 错误“未初始化常量 AWS (NameError)”

    它说 AWS 未初始化 我正在使用 aws sdk core gem 我尝试使用 aws sdk gem 代替 问题仍然存在 这是initializers aws rb 文件 AWS config access key id gt ENV
  • PKCE 增强授权代码流中保护 code_verifier 的最佳实践

    由于 PKCE 现在是推荐的隐式流程授权方法 因此我正在寻找处理代码验证器的最佳实践以及如何完成此操作的建议 在高层 PKCE 授权流程中包括 产生code verifier在客户端 产生code challenge来自 1 hit aut

随机推荐