我正在使用Devise和cancancan。我有Book模型和Post模型。在应用cancancan后,在图书中,将编辑和删除限制为匹配user.id的用户可以正常工作。我也可以创建一本没有问题的书。在每本书中,我可以(或者应该能够)创建一篇文章。限制编辑和删除在这里也很好用。但是当我以一个为这篇文章创建了这本书的登录用户创建了一篇文章时,它显示我不被允许这样做。
当我去掉下面的"load_and_“时,我可以创建帖子,但其他用户也不能这样做。
posts控制器:
    load_and_authorize_resource :nested => :bookability.rb (我最初使用的是“管理”,而不是CRUD,但在尝试了不同的方法后,每个CRUD都拼写出来了;两者都不起作用):
class Ability
  include CanCan::Ability
  def initialize(user)
    if user.present?
      can [:create, :read, :update, :destroy], Book, user_id: user.id
      can :read, Book
      can [:create, :read, :update, :destroy], Post, book: { user_id: user.id } 
      can :read, Post
    endroutes.rb:
  resources :books do
    resources :posts, shallow: true
  end
  resources :posts do
    resources :comments, shallow: true
  end
  resources :users do
    resources :comments, shallow: true 
  end...since我在问一个问题,让我添加另一个相关的问题,以防有人想回答:
我有以下代码来显示或不显示编辑/删除一个帖子。无论哪个用户在看它们,它们似乎都会显示出来。在图书列表中,它们被隐藏或显示得很好。不知道为什么它不能在这里工作。
    <td>
        <% if can? :update, Post %>
          <%= link_to 'Edit', edit_post_path(post) %>
        <% end %>
    </td>
    <td>
        <%if can? :destroy, Post %>
            <%= link_to 'Destroy', {:controller => :posts,
              :action => 'destroy', :id => post },
              method: :delete,
              data: { confirm: 'Are you sure?' } %>
        <% end %>
    </td>更新
在我将posts控制器上的load_and_authorize_resource更改为:
    load_and_authorize_resource :book
    load_and_authorize_resource :post, through: :book我现在可以创建一个post,并适当地设置auth。但现在我不能编辑或删除。
...any的想法?
错误消息突出显示:
          raise AccessDenied.new(nil, authorization_action, resource_class) # maybe this should be a record not found error instead?发布于 2019-08-13 11:16:54
解决方案是替换:
load_and_authorize_resource :post, through: :book在posts控制器中:
load_and_authorize_resource :post, through: :book, :shallow => true因为我的book和post的嵌套路由(如我的问题所示)是浅层的。
但我仍然可以在其他用户的帖子上看到编辑/删除...任何帮助都将不胜感激。
更新:
查看编辑/删除的解决方案是更改
<% if can? :update, Post %>至
<% if can? :update, post %>因为它是
<% @book.posts.each do |post| %>很明显,但应该有匹配的模型进入可以吗?参考模型。
https://stackoverflow.com/questions/57470388
复制相似问题