簡體   English   中英

Cancancan創建授權仍然允許創建要顯示給其他用戶的表單

[英]Cancancan create authorization still lets create form to be shown to other users

用於其他表格的所有其他授權都可以正常工作。 但是對於下面的此創建表單,授權會繼續讓該表單被其他人看到。

<%= form_for([@book]) do |form| %>

授權碼:

<% if can? :create, @book %>

當我將@book切換為Book或[@user,@book]或[@book,@post]時,任何方法都無效。 @ user,@ book對當前用戶和其他用戶隱藏表單。

我能做什么?

Ability.rb:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.present?
      can :read, Book
      can :read, Post
      can :read, Comment
      can :manage, Book, user_id: user.id
      can :manage, Post, book: { user: { id: user.id } }      
      can :manage, Comment, post: { book: { user: { id: user.id }}}

    end
```

好的,我認為您的錯誤在這里:

can :manage, Book, user_id: user.id

基本上在create操作中,您的對象還沒有user_id ,因為您的對象尚未保存。 因此,您應該使用以下代碼更新能力文件:

can [:read, :create], Book
can [:destroy, :update], Book, user_id: user. id

讓我知道。

編輯

好的,我遺漏了一點。 您有一條Statement來檢查上面是否有current_user ,因此我認為您無需在Book功能中添加user_id:

可以請您嘗試: can manage, Book

另外,請確保重新啟動服務器,有時功能可能會反復無常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM