我不是一個專業的Web開發人員,但是我在高中時涉獵了php。我目前正致力於更新我在大學所屬的一個組織的網站。我真的沒有一個簡潔的方式來問我quesetion,所以我就舉一個例子:在代碼中引用MySQL表鍵的最佳方式
對於我們組織的辦事處,表是這樣的:
officeid_officename
+------------+------------+
| officeid | officename |
+------------+------------+
| 1 | president |
| ... | ... |
+------------+------------+
officeid_memberid
+------------+----------+
| officeid | memberid |
+------------+----------+
| 1 | 234 |
| ... | ... |
+------------+----------+
memberid_memberdata
+------------+------------+-----+
| memberid | membername | ... |
+------------+------------+-----+
| ... | ... | ... |
| 234 | John Smith | ... |
| ... | ... | ... |
+------------+------------+-----+
至於我能告訴,這將是一個適當的設計表格,因爲它允許1)任意改變辦公室名稱(例如,如果「總統」成爲「最高霸主」)2)它允許成員隨意添加和刪除從辦公室3)最終,每個成員的數據可以改變,而不需要該成員與受影響的辦公室的鏈接。
我遇到的問題是,在我寫的代碼中,我的授權取決於成員擁有的辦公室。我可以考慮代表哪些辦事處可以執行哪些操作的三種選擇。
1)使用「總統」等作爲標識檢查(如if($officename === "president") { ... do something ... }
)
- 不過,這似乎擊敗表設計的目的,如在辦公室名稱的變化將打破授權。
2)使用officeid作爲標識符檢查(如if($officeid === 1) { ... do something ... }
)
- 然而,這似乎缺乏可維護性,開發商不斷地將要引用數據庫,看看有什麼ID指他們在編輯當前代碼或編寫未來代碼時使用哪個辦公室。
3)在配置文件中,使得PRESIDENT_CONSTANT = 1
,或類似的東西定義常量和檢查對常量(如if($officeid === PRESIDENT_CONSTANT) { ... do something ... }
)
- 然而一)本發行股票與(1)該位置的名稱可能會改變b)這基本上是重新創建officeid_officename表中的配置文件
出了三個選項,我覺得二號是最正確的,但我有一個關於揮之不去的情懷maintai可行性問題。有沒有更好的方法來完成我需要在這裏做的事情?
謝謝。
我會編輯代碼來澄清,我不擔心服務器負載,我擔心在代碼中寫入'if($ office = 1)'等事情,並期待未來的網站管理員離開,因爲它看起來很任意對某人進來。 – 2012-01-12 13:26:07
啊,在這種情況下,適當的做法是將其包裝在一個明確命名的函數中。 (這也有助於通過抽象邏輯來實現可維護性。)因此,而不是:if($ office == 1)[[請注意兩個符號!]]嘗試:if(userHasPrivilege(ADMINISTER_FOO))或類似的東西 - 然後執行邏輯檢查:function userHasPrivilege($ requestedPrivilege){}。 – 2012-01-12 18:44:32
我喜歡使用這些功能的想法。謝謝一堆! – 2012-01-18 05:08:08