2011-04-05 47 views
1

好的。這可能不是一個不聰明的問題,但我會問它。一直在研究這個項目的模型太長了,不會感到羞恥......沒有'用戶'表,整個事情都很好... yipee: -/用戶實體/表 - 建模這種關係

那麼,我該如何正確建模呢?該ACL模型如下:(FYI「 - >」是指在這個層次視圖「大於」),並具有一定的權限比其他用戶更大

System Admin => Shops => Shop Admins => Workers => Clients => Anonymous 

如何模擬「用戶」時,有是幾種類型的'用戶',每個都有自己的表?

例如,假設'用戶'有2個ACL角色。 「SHOP WORKER」和「客戶」。在這種情況下我如何處理'用戶'表?是通過在'用戶'表中分配一個'user_type'來激活這個:

table .users 
- user_id = "1" 
- user_name = "Joe" 
- user_type = "5" (where "user_type"=5 delivers the needed powers...) 

或者我是一個spaz?我在這裏錯過了什麼嗎?我需要一個具有多種不同類型用戶的「用戶」表,這些用戶都需要不同類型的信息,這些信息需要成爲他們個人資料的一部分,這似乎會爲每個用戶類型創建不同的表格。「SHOP WORKERS」將他們的數據添加到他們的表中,「客戶」可以將他們的數據添加到他們自己的表中。

請告訴我如何使這項工作。我的大腦顯然是打破和琢磨這個,我覺得有點弱智...

回答

0

根據你的問題,這聽起來像是你想在同一時間建立一個ACL和一個元數據存儲系統。解決這個問題可能有點棘手。

通常,在基於角色的系統,你有幾種模式可循,但通常一些以下的組合:基於一種身份驗證級別的

  • 用戶有系統級權限。
  • 用戶擁有由具有一個或多個角色的用戶授予的全系統權限。
  • 用戶根據特定資源上下文中的身份驗證級別具有不同的權限。

您可能會根據它的細微差別描述第一個或第二個情況。這是第一個示例:

class User < ActiveRecord::Base 
    belongs_to :role 
end 

class Role < ActiveRecord::Base 
    # Defines methods to determine ACL privileges 
end 

二是更加靈活一些,但試圖解決一個簡單的是/否的情況下,因爲更多的角色必須進行檢查時也比較慢。

class User < ActiveRecord::Base 
    has_many :grants 
    has_many :roles, :through => :grants 
end 

class Grant < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 
    # Defines methods to determine ACL privileges 
end 

class Role < ActiveRecord::Base 
    # Defines methods used by Grant ACL implementation 
end 

如果你需要有某種形式的配置或存儲什麼每個角色爲用戶提供元數據,將其寫入格蘭特模型作爲附加字段。

0

假設所有的user_types具有相同的列/屬性,並假設你叫他們「角色」

table role 
-idRole (int) 
-roleName (varchar X) 
-description (varchar or text or what have you.) 
-permLevel (int) 
-etc 

然後做完全一樣建議並使用idRole作爲用戶表中的條目。

,如果你的角色比較複雜或您指定多個權限級別/類型給一個角色,你可能想打出了外部參照類型表

如果您發佈不同user_types /角色是什麼,也許有人可能會指出,如果他們沒有設置或標準化你想要做的事情。我只是在評論中提問,但我無法發佈他們,對不起。

+0

對於主鍵,'id'優於'idRole'。 – tadman 2011-04-05 05:03:16

+0

我的印象是,這很大程度上是個人品味和/或項目慣例的問題,但是感謝沒有正當理由的一攬子聲明。 – 2011-04-05 05:19:18

+0

@tadman - 爲什麼id更喜歡說role_id或roleid? – 2011-04-05 06:39:05