0
使用cancancan的最基本的實現,覺得我瘋了。Cancancan roles_mask沒有映射
下面是在我的用戶模型
ROLES = %i[admin regular reporter]
# Roles logic to covert string above to/from integers
def roles=(roles)
roles = [*roles].map { |r| r.to_sym }
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask.to_i || 0) & 2**ROLES.index(r)).zero?
end
end
def has_role?(role)
roles.include?(role)
end
1個用戶是顯示角色:管理員
2用戶顯示角色:定期
但3用戶顯示角色[:管理員,:普通]
想不出來救我一命
謝謝對於迴應,我最終通過使用您建議設置爲符號的方法,而不是roles_mask來解決這個問題。我很好奇爲什麼它將數組轉換爲1,2,4?我假設另外一個角色是8的roles_mask?任何理由爲什麼這是典型的解決方案? –
是的,對於您正在使用的特定代碼,它允許您爲用戶提供多個角色,這些角色都存儲在一個單一的數字值中,我猜想將其存儲爲數據庫表中的一個字段。 –
(如果您只希望每個用戶有一個角色,那麼您可以刪除所有代碼,只需要一個普通的舊索引數組。 –