[英]Modelling multiple types of users with Devise and Rails 4
我有3種類型的“用戶”
商店提供商客戶
最后2個用戶將具有類似的屬性,例如
名姓等等
並且Shop用戶類型之間的對比度最大。
就行為而言,盡管提供者和商店將固有許多客戶行為,但它們都將完全不同。
正如我所研究的,似乎可以用CanCan處理這些行為。
我現在正在嘗試如何驗證這些類型。
我已經看過STI模型,但是我無法掌握這些額外屬性的位置。
我的心理模型是追隨者:
用戶是一個表和模型類型是從其繼承的抽象模型。
所以我想知道,如何僅針對商店類型添加屬性,例如公司地址?
還是用戶表中有一個名為“類型”的列,並且該類型與這些類型表相關聯? 在類型表中還有額外的屬性嗎?
甚至不必費心將Devise引入其中; 設計是為了認證 而不是 授權 。 身份驗證是確定訪問您網站的人是否像您認為的那樣(例如登錄)。 授權正在確定是否允許用戶執行某種操作(例如,創建新帖子)。
您想要做的是擁有某種系統,可以為普通用戶分配三種不同的類型。 CanCan會做類似的事情。 自己執行此操作的一種方法是使用基於權限號的系統。 假設普通用戶的權限級別為100,商店的權限級別為50,提供者的權限級別為25。使用此系統,您可以確定用戶可以執行的操作而不必創建單獨的模型,這將使您的架構不必要地變得復雜。 這是一個如何與UserController一起使用的示例:
def show
if current_user.permissions == 100
render "customer_show"
elsif current_user.permissions == 50
render "shop_show"
else
render "provider_show"
end
end
最簡單的方法是在用戶表中添加一列稱為“ 權限” ,創建新行時默認為100。 遷移情況如下所示:
def change
add_column :users, :permissions, :integer, default: 100
end
至於身份驗證 ,請不要擔心。 讓設計去做吧! 每個用戶,無論是哪種類型,都將以相同的方式登錄和注冊,可能每個用戶都有單獨的表單,每個表單都有一個隱藏字段來設置該特定類型用戶的權限級別。
我知道我參加晚會很晚,但我打算將其發布給將來的SO搜索者。 您可以使用Devise授權操作。 如果您有針對“買方”和“賣方”的設計模型,則可以添加“ buyer_signed_in?” 您只希望買家能夠執行的任何操作。 您還可以執行更具體的基於角色的授權-查閱“ 設計”頁面
總而言之,Tsiege的解決方案聽起來很有趣。 讓我們知道您是否成功!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.