![](/img/trans.png)
[英]How to update some fields only using cancancan and activeadmin gem
[英]Create authorization using CanCanCan gem and ActiveAdmin
我創建了一些規則,其中一個是以下內容:
can :create, Ticket, { author_id: user.id }
僅當author_id等於用戶ID時,這才應允許當前經過身份驗證的用戶創建票證。
從Rails控制台,我可以測試我的規則是否正常工作:
my_user.can? :create, Ticket.new(author: my_user) # returns true
my_user.can? :create, Ticket.new(author: another_user) # returns false
考慮到我正在使用ActiveAdmin,現在我需要通過使用其ActiveAdmin::AuthorizationAdapter
來使用我的授權規則。
我面臨的一個問題是,每當創建“新票證”時,都會遭到拒絕訪問。
我仔細檢查了什么條件失敗了,看來機管局要求以下條件:
my_user.can? :create, Ticket.new # which returns false!
當我認為應該改為以下內容時:
my_user.can? :create, Ticket # which returns true!
Ticket.new的所有參數均設置為nil:
<Ticket author_id: nil, ..., created_at: nil, updated_at: nil>
這就是為什么我的CanCanCan哈希條件失敗的原因(author_id = nil無效,應該是user_id)。
是否有可能的解決辦法? 也許我設置的CanCanCan規則設置錯誤?
ActiveAdmin還提供了一個開箱即用的CanCanCan適配器,所以我想知道他們怎么可能忽略了這一點。
基於對類似問題的回答:
ActiveAdmin.register Ticket do
before_build do |ticket|
ticket.author = current_user
end
end
這將在創建新對象時設置作者的身份,從而使它具有可以按照CanCanCan功能中的配置進行訪問的資格。
@GoGoCarl對上面的相關問題發表了評論,但是我已經修改了此處提出的問題。 原始答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.