2011-05-28 77 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)是一个非常通用的解决方案。无论它适合你的情况,我都不知道,但如果你的情况非常普遍,它可能会。

我觉得这是一样多,我可以放心地不知道您的具体情况再说。如果有的话,只要保持简单,不要重新发明轮子。