2014-02-19 47 views
2

我目前正在與一箇中型團隊合作爲大客戶開發定製內容管理系統。 CMS使用PHP編寫,並遵循MVC模式(自定義)。它是一個模塊化系統,我們或其他開發人員可以在後期將插件添加到系統中。用戶權限; JSON字符串或數據庫表?

系統將包含基於用戶的權限和一系列具有預定義權限的通用角色。要求超級管理員用戶也可以根據用戶修改權限(例如,John Doe可能被定義爲普通用戶,但可以修改內容)。

意見目前分爲關於我們存儲和處理這些權限的最佳方式。一半的開發團隊建議添加一個新的數據庫表,該表將存儲每個用戶的鍵/值對和用戶ID,並將布爾值存儲在每條記錄中。該表的結構將是這樣的:

user_ID: the ID of the user 
perm_name: the name of the permission 
perm_value: a boolean value dictating whether the user can carry out this action 

的建議是,如果有一個特定的權限相關聯的值設置爲0,或者不存在於表中,用戶沒有所要求的權限。

開發團隊的另一半喜歡將表單中的權限存儲在users表中的JSON編碼字符串中。因此,例如,我們將存儲以下JSON用於李四):

{ 
    'modifyProducts': 1, 
    'addProducts': 1, 
    'addPages': 0 
} 

然後,我們將能夠使用json_decode()User類中提取權限,例如:

$this->permissions = json_decode($dbval); 

我我個人對原因主要有兩個選擇後者傾斜:

  1. 它是可擴展
  2. 如果我們需要新的權限,它不需要我們修改數據庫。

簡而言之,這樣的應用程序的最佳方法是什麼?

+0

您是否認爲您需要查詢表以找出哪些用戶可以訪問某個模塊?如果沒有,我認爲將權限保存爲JSON字符串會很好。但是你可能想要確定它在規模上並不會成倍增長。 –

+0

不需要。我們不需要查詢表格以這種方式查找用戶的權限。我唯一關心的是JSON字符串的增長。 – BenM

回答

1

我認爲在這種情況下最好的解決方案是使用NoSQL數據庫,比如MongoDB--這樣你仍然可以保持可伸縮性並利用JSON結構。

另一方面,根據您的user表,您可以利用列類型索引並優化查詢和閱讀請求,當然,如果您使用規範化數據庫。

我個人會將JSON存儲在關係數據庫中,僅當我想直接顯示信息而不用於查詢時。就像你自己說過的那樣 - 總有可能結束巨大且不斷增長的JSON字符串,這很可能會在某些時候造成麻煩。