2016-01-16 60 views
4

我目前在CanCanCan 1.13.1中使用Rails 4.1.14,並在模型/記錄級別上定義了詳細權限。管理員可以管理所有文章,但用戶只能編輯他們創作的文章。使用CanCanCan或Pundit的字段級權限

爲了防止普通用戶編輯特定字段,我根據角色讓字段在rails_admin中可見。

visible do 
    bindings[:object].id == bindings[:view].current_user.roles.include? :admin 
end 

我也使用https://github.com/aasm/aasm寶石和創建自定義操作,以便用戶可以將記錄到新的狀態。

但我真正想要的是根據用戶的角色/記錄啓用字段級權限。我無法在CanCanCan或https://github.com/elabs/pundit頁面上找到任何文檔。

有沒有人有這方面的經驗?

回答

4

您的意思是應允許管理員編輯記錄的所有字段,但編輯者只允許更改字段x和y?

是的,這是可能的學者,因爲它集成了強大的參數(你應該使用它)。在pundit readme中也有一個例子(見:強參數)。我簡化的示例自述:

# post_policy.rb 
def permitted_attributes 
    if user.admin? 
    [:title, :body, :tag_list] 
else 
    [:tag_list] 
end 

# posts_controller.rb 
@post.update_attributes(permitted_attributes(@post)) 

permitted_attributes助手在控制器由權威人士提供並自動調用infered政策的permitted_attributes方法。