2016-11-18 42 views
0

例如,用戶既可以是admin也可以是player,我希望用戶設置主角色。例如,我可以是player,然後再切換爲admin我應該如何爲使用rollify的用戶設計主要角色?

明顯的是在User模型上附加main_rolerole_id

但是,我擔心我必須保持與用戶角色同步的主角色。例如,如果用戶不再是玩家,她的main_role不能是玩家的。

我在想的另一種方式是訂購第一個角色。我找不到一個簡單的方法來做到這一點。

Ex: user.roles.map(&:name) => ["admin", "player"] 在這種情況下,主要作用是「admin」,我可以交換「玩家」是第一,如果我想的主要作用是球員。

有沒有人有處理這個問題的好建議?

謝謝!

+0

你是指[Rolify gem](https://github.com/RolifyCommunity/rolify)?如果是這樣的話,我對這種情況下的主要角色和次要角色的概念有點困惑 - 不是二元角色,你要麼具有角色(以及對該角色的授權),要麼你不具有角色。區分主要角色和次要角色的動機是什麼? – David

+0

好吧,假設你有一個移動客戶端,並且你想顯示不同的視圖,這取決於用戶是否是管理員。一個例子就是當某人正在工作或者單獨使用這個應用時,等等。 – okysabeni

+0

我想我想問的是我爲什麼要定義一個'主要'角色的概念。如果用戶具有管理員和玩家的角色......那麼他們肯定擁有與這兩個角色相關的所有權利......如何讓他們中的一個扮演「主要」角色對您的應用有益?就個人而言,我不會打擾多個角色的概念..在這種情況下,我會去爲用戶有3個角色之一...播放器,管理員,管理員。管理員可以簡單地繼承玩家和管理員的權利。但我不使用rolify,因此我可能沒有資格發表評論。 – David

回答

0

我最好稱之爲「current_role」。

當您更改角色列表時,不要害怕檢查當前角色。

如果用戶失去了current_role角色,那麼將current_role從他的列表中改爲下一個角色。

是的,我推薦擁有一個current_role,它在用戶表中使用ON DELETE RESTRICT,ON UPDATE CASCADE引用具有外鍵的role_id。

如果您使用的不是postgres,請使用rail的db一致性檢查。

+0

Curren角色是一個更好的術語。所以,你推薦有一個引用role_id的current_role? – okysabeni

相關問題