微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

authorize_resource 在应该阻止访问时不阻止访问? 供参考

如何解决authorize_resource 在应该阻止访问时不阻止访问? 供参考

我有以下几点:

class ConversationsController < ApplicationController
  before_action :set_conversation_show,only: [:show]
  authorize_resource

  def show
  end

  private 
    def set_conversation_show
      @conversation = Conversation.where("sender_id = ?",current_user.id).find_by_id(params.fetch(:id))
    end
end

我的理解是:

  • 由于模型实例 (@conversation) 设置在 before_action 中,authorize_resource 应该简单地检查 current_user 是否可以访问该资源,如果没有,拒绝访问。

但是,允许访问....

当我将 authorize_resource 更改为 load_and_authorize_resource 时,访问将被拒绝。

注意:authorize_resourceload_and_authorize_resource 相同,只是它不假设应该加载什么模型实例,而是依赖于通过 before_action 提供的模型实例。 (更多here)。

出于这个原因,我更喜欢使用 authorize_resource - 因为它不会自动假定要检查权限的模型实例。

那么问题是,为什么上面的代码没有按预期工作并拒绝访问?

供参考

相关的ability.rb

can [:show],[Conversation] do |conversation|
  conversation.sender_id == user.id
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。