Ruby on rails 尝试使用权威使用户授权更加枯燥
我正在使用pundit在ruby on rails应用程序中处理授权,我想看看登录的用户是否可以在显示帖子、评论等的删除和编辑按钮之前进行调节 以下是帖子策略、评论策略等的原始工作方法Ruby on rails 尝试使用权威使用户授权更加枯燥,ruby-on-rails,ruby,pundit,Ruby On Rails,Ruby,Pundit,我正在使用pundit在ruby on rails应用程序中处理授权,我想看看登录的用户是否可以在显示帖子、评论等的删除和编辑按钮之前进行调节 以下是帖子策略、评论策略等的原始工作方法 def destroy user.present? && (user == record.user || user.role?(:admin) || user.role?(:moderator)) end 下面是我添加到应用程序策略中的新方法 def can_moderate?(u
def destroy
user.present? && (user == record.user || user.role?(:admin) || user.role?(:moderator))
end
下面是我添加到应用程序策略中的新方法
def can_moderate?(user, record)
@user = user
@record = record
user == record.user || user.role?(:admin) || user.role?(:moderator)
end
这是我正在制定的政策
def destroy?
user.present? && user.can_moderate?
end
这个干衣机版本给了我一个未定义的错误方法。
有什么想法吗
谢谢
编辑以添加完整错误
ActionView::Template::Error (undefined method `can_moderate?' for #<User:0xb5671e60>):
14: <% if policy(@post).edit? %>
15: <%= link_to "Edit", edit_topic_post_path(@topic, @post), class: 'btn btn-success' %>
16: <% end %>
17: <% if policy(@post).destroy? %>
18: <%= link_to "Delete", [@topic, @post], method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this topic?' } %>
19: <% end %>
20: </div>
app/policies/post_policy.rb:7:in `destroy?'
app/views/posts/show.html.erb:17:in `_app_views_posts_show_html_erb___159039275__620331048'
ActionView::Template::Error(对于#未定义的方法'can#u mediate'):
14:
15:
16:
17:
18:
19:
20:
app/policies/post_policy.rb:7:in'destroy'
app/views/posts/show.html.erb:17:in``在app\u views\u posts\u show\u html\u erb\u 159039275\u 620331048'
Tien
不要在用户对象上调用can\u mediate?
。它将假定用户类/模型中存在can\u mediate?
。相反,只需调用方法,因为在同一文件/控制器中存在
def destroy?
user.present? && can_moderate?
end
你也可以吃你的罐头吗?方法只是
def can_moderate?(user, record)
user == record.user || user.role?(:admin) || user.role?(:moderator)
end
烘干机版本
# policy file
def destroy?
can_moderate?
end
def can_moderate?(user, record)
user.present? && user == record.user ||
user.role?(:admin) || user.role?(:moderator)
end
我建议您继续并将整个错误粘贴到这里。从问题的描述中,您得到了
can\u mediate
的未定义错误,但方法名称为can\u mediate?
。你在哪里有提到的方法?同一份文件?啊,现在拿到了。出于某种原因,我认为我需要对特定的用户调用它。因此,自从我使用Desive以来,它对当前的_用户起到了神奇的作用。谢谢由于应用程序策略中存在can\u mediate?
,因此它不应该有参数,事实上,对于预期为2但得到0的代码,它将抛出ArgumentError
。这些变量可通过attr\u accessor
方法获得。