我試圖添加一個按鈕來標記在Rails中讀取的答覆。我目前有這樣的事情。允許cancan Ability.rb只管理訪問模型的特定字段
# /app/models/ability.rb
...
can :manage, Reply, :user_id => user.id
...
我也load_and_authorize_resource
在我RepliesController
# /app/controllers/replies_controller.rb
class RepliesController < ApplicationController
load_and_authorize_resource
def update
@reply = Reply.find(params[:id])
@reply.isRead = true
if @reply.save
flash[:notice] = "Marked as ready."
flash[:alert] = params[:id]
redirect_to root_path
else
render :action => 'new'
end
end
我有一個按鈕,其中爲已讀用戶可以標記一個回覆。
= button_to "Mark as read", idea_reply_path(reply.idea,reply), :method => "put"
問題是,因爲我想在ability.rb(頂部)定義更新來自其他user.id所有者的對象,我沒有權限對其進行編輯。
如果我添加這樣的東西它會工作,但我也賦予管理整個回覆對象給其他人的權利。
can :manage, Reply, :to_user_id => user.id
我需要一種方法來只允許用戶管理對象,他是user.id匹配to_user_id
的屬性isRead?
。
我會建議爲mark_as_read添加不同的操作,而不是授予更新操作的權限。這樣Update操作可以用於修改回覆 – naren 2012-04-27 00:52:35