簡體   English   中英

使用CanCanCan gem和ActiveAdmin創建授權

[英]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對上面的相關問題發表了評論,但是我已經修改了此處提出的問題。 原始答案:

https://stackoverflow.com/a/28738827/3353794

暫無
暫無

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

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