2011-05-28 106 views
3

我正在開發後端的登錄系統。用戶級別和OOP體系結構

會有許多用戶級別/權限來執行某些任務。

成員可以有一個或多個級別。

什麼是最好的體系結構來做到這一點?

我帶着這些解決方案:

表:

Group 
- group_id (P) 
- group_name 

Group_User 
- group_id (F) 
- user_id 

而如何鏈接與面向對象的方法呢?

OOP設計我想出了:

class User { 

private $privateSalt = "Don't Tell Anyone! Q£$£$^$"; 

public function newAccount($email, $password, $firstName, $lastName) { } 

public function login($email = 0, $password = 0) { } 

private function _setSession($data) { 
    $_SESSION['logged_in'] = true; 
    $_SESSION['member_id'] = $data['member_id']; 
    $_SESSION['email'] = $data['email']; 
    $_SESSION['first_name'] = $data['first_name']; 
} 

public function logout() { } 

public function isLoggedIn() { } 

} 

這是沒有必要的OOP特性申報用戶的詳細信息,因爲我已經存儲在會話? 另外,如果用戶刷新頁面,建議再次檢查用戶$ _SESSION ['member_id']對數據庫?

+0

你說「水平」,但在你的例子中,你使用「組」,他們不是同一個概念。在我看來,等級會隨着你的'等級'升高而嚴格增加。當你有組時,你可以對組賦予權限的任何組合。你能澄清嗎? – Halcyon 2011-05-28 21:02:25

+0

作爲一個完全無關的一套技巧,我會建議你還包括在數據存儲的組名和用戶名(MySQL或其他) - 不僅僅是ID的。它將使'讀'你的數據庫變得更容易。 – Halcyon 2011-05-28 21:08:27

+0

另一個提示是關於_setSession函數。我知道它是私有的,但該簽名僅僅是慘不忍睹,將其更改爲:'_setSession($ ID,$電子郵件,$姓名)' – Halcyon 2011-05-28 21:09:24

回答

3

登錄系統實際上是很容易做到,但很難做好。實現密碼恢復機制,用戶和管理員的用戶帳戶管理,可添加和編輯的多個角色,當然這些都需要以安全的方式完成。 添加到該OAuth和OpenID中,登錄系統是許多現代應用程序中最複雜的部分之一。

我會考慮看how others have tackled the problem,有庫和組件,如Zend_Acl,可以幫助減輕很多任務,並讓你避免一些你會遇到的基本問題。話雖如此,請探索你的想法,我的意思是你在做什麼很棒,我根本不會說這讓你灰心喪氣。我從很多年前的同一條路線開始。

這就是說,我有幾個問題要問你的新設計。 newAccount函數是那個函數唯一需要的參數嗎?您可以考慮將對象傳遞給需要很多參數的函數,這樣您可以從type hinting中受益。函數login(),爲什麼參數設置爲默認值0?那些功能真的是默認值嗎?乍一看最好是$ email = null和$ password = null,但是可以使用一個沒有電子郵件/密碼的登錄?如果您的應用程序邏輯依賴於設置這些值,則可以使用強制邏輯的函數簽名。我認爲這很好,雖然保持主動並且好奇。

編碼快樂,朋友

+0

謝謝我的回覆我的朋友。 newAccount函數 - 是我需要的唯一參數,但您已經提出了一個很好的觀點。我可能會在未來擴展參數,我一定會考慮類型提示,謝謝!函數function(),我已經設置爲0,因爲如果像$ user-> login()這樣的對象缺少參數,我不會得到錯誤。在登錄函數中,我這樣做了:if(empty($ email)|| empty($ password)){return false; } – user622378 2011-05-28 21:28:12

+0

+1用於指示已實施的解決方案,而不是指定您自己的解決方案 – Tadeck 2011-05-28 21:38:57

0

要回答你的第二個問題:我不知道爲什麼你要檢查$_SESSION['member_id']

會話存儲在服務器上,所以任何訪問經歷,你寫的代碼。所以假設你的代碼是安全的,會話中的數據應該是安全的。包括您在其中存儲的任何權限。

0

我猜你想要的東西與其說是一個登錄腳本,但一個架構來管理用戶權限。

登錄腳本(和引導權限)應該相當容易。 Stef的鏈接應該對此有所幫助。

對於您的權限與羣體結構簡單的用戶和用戶組有許多一對多的關係,(你GROUP_USER)是一個非常通用的解決方案。無論它適合你的情況,我都不知道,但如果你的情況非常普遍,它可能會。

我覺得這是一樣多,我可以放心地不知道您的具體情況再說。如果有的話,只要保持簡單,不要重新發明輪子。