如何解决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_resource
与 load_and_authorize_resource
相同,只是它不假设应该加载什么模型实例,而是依赖于通过 before_action
提供的模型实例。 (更多here)。
出于这个原因,我更喜欢使用 authorize_resource
- 因为它不会自动假定要检查权限的模型实例。
那么问题是,为什么上面的代码没有按预期工作并拒绝访问?
供参考
相关的ability.rb
:
can [:show],[Conversation] do |conversation|
conversation.sender_id == user.id
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。