我在考慮如何在Rails中創建基於角色的訪問控制系統。我看到這些偉大的項目太多(其中包括):在Rails中消除HasMany關係中的連接表
我的問題是,是否真的需要有一個連接表爲了一切?如果我關係中的一個表只有少數值(比如小於100),我不能只將合併表與該小表合併嗎?)這就是我的意思......這就是我需要的:
模型
- 用戶
- 組
- 角色
- 權限
- 的UserRole/RolesUsers 個
- GroupRoles
- 成員(GroupUsers)
- RolePermissions
類似的東西...
的方式RoleRequirement作品是通過創建一個roles
表和roles_users
連接表。這意味着,如果我在一個應用20個總的可能角色,我有20行
- 角色表。
這意味着每次我想通過角色找到一個用戶,我必須做一個連接。我想知道,不過,因爲只會出現在應用程序中幾個角色,爲什麼不直接替換此遷移:
create_table "roles", :force => true do |t|
t.string "name"
end
create_table "roles_users", :id => false, :force => true do |t|
t.integer "role_id"
t.integer "user_id"
end
與此一...
create_table "roles", :force => true do |t|
t.string "name"
t.integer "user_id" # or some polymorphic form
end
會導致重複(噸的角色名爲「管理」爲例),但由於空間很便宜,我們可以創建一個像Role.unique
這樣的方法來查找所有獨特的角色(擺脫那20行表),爲什麼人們創建連接表?
同樣的事情與權限:我只可能有4個權限開始:create read update delete
。所以我不需要權限表和roles_permissions表,我可以複製CRUD權限並在權限表中擁有role_id。與Group相同,如果我的roles
表中有多態列,則不需要組角色。
這樣做的建議方法是什麼?
非常感謝。剛開始的時候,我讀到了非規範化的問題,以及有多少人認爲RDBMS比CouchDB更令人討厭。沒有豐富的數據庫管理經驗,我不知道在如何劃分數據以及何時加入成爲問題(性能和維護方面)方面有哪些最佳實踐。你有沒有可靠的資源來緩解我對「有額外表格的厭惡」:)。這將有助於! – 2010-02-20 05:03:08
http://www.codinghorror.com/blog/2008/07/maybe-normalizing-isnt-normal.html – hobodave 2010-02-20 06:19:54