[英]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.