我將繼承添加到帶有STI的Spree :: User模型類。我有一個:類型列,可以是(Spree :: Guest,Spree :: Writer或Spree :: Reader)。spree定製創建用戶會話操作
在我的管理員端身份驗證中,我只想驗證作者和讀者。什麼是解決這個問題的最佳選擇?
我試圖重寫的東西,如創建動作:試圖用類型的用戶進行身份驗證時
def create
authenticate_spree_user!
if spree_user_signed_in? && (spree_current_user.role?(:writer) || spree_current_user.role?(:reader))
respond_to do |format|
format.html {
flash[:success] = Spree.t(:logged_in_succesfully)
redirect_back_or_default(after_sign_in_path_for(spree_current_user))
}
format.js {
user = resource.record
render :json => {:ship_address => user.ship_address, :bill_address => user.bill_address}.to_json
}
end
else
flash.now[:error] = t('devise.failure.invalid')
render :new
end
end
在這種情況下:客人,它重定向到無效的失敗消息的新動作(OK),但以某種方式用戶獲得認證(nok)。
謝謝zrl3dx的答案和解決方案。我使用STI是因爲我希望不同類型的用戶能夠根據其類型從多個平臺進行註冊和認證。因此,Spree :: Guest類型的用戶可以在另一個平臺上註冊爲Spree :: Reader,但我希望在每個平臺中,經過身份驗證的用戶必須是正確的。爲此,我使用scope :: :: type的唯一性en email。另一方面,你能解釋一下我可以管理什麼:host_app_cool_pages呢? – Moh
@Moh:這意味着管理員可以使用模型'HostAppCoolPages'完成任何操作 - 您還可以添加其他預定義(即讀取)或您的自定義操作,請在此處查看:https://github.com/CanCanCommunity/cancancan/wiki/defining能力#can-method – zrl3dx
是的,我已經覆蓋了我的能力模型類,每個用戶都可以訪問或管理特定的模型和控制器。但我的問題實際上是在身份驗證中,例如我希望Spree :: Guest類型的用戶永遠無法訪問Spree :: Reader和Spree :: Writer等人可以訪問的平臺。你認爲你的回答對我的問題仍然有效嗎?如果是這樣或如果我沒有解釋清楚,請讓我知道。 – Moh