我正在开发一个应用程序,允许用户注册为类别1 或类别2 或两者。简而言之,用户可以在类别1下注册,也可以使用相同的详细信息在类别2下注册。
考虑到这一点,我已经想到了在我的数据库中存储用户详细信息的一些方法:
在考虑以下事项之后:
我得出一个结论,我的选择不会给我我想要的东西。
现在,在我的代码中,我创建了我的User
类,我用它进行注册并登录用户。
class User {
private $_db,
$_data,
$_sessionName,
$_isLoggedIn;
public function __construct($user = null) {
$this->_db = DB::getInstance();
$this->_sessionName = Config::get('session/session_name');
if(!$user) {
if( Session::exists($this->_sessionName) ) {
$user = Session::get($this->_sessionName);
if( $this->find($user) ){
$this->_isLogggedIn = true;
} else {
$this->logout();
}
}
} else {
$this->find($user);
}
}
public function find($user = null) {
if($user) {
$field = (is_numeric($user)) ? 'id' : 'email';
if ( $packageType == 'category1' ) {
$fCheck = $this->_db->get('table_name', array($field, '=', $user));
if( $fCheck->count() ) {
$this->_data = $fCheck->first();
return true;
}
}
elseif ( $packageType == 'category2' ) {
$iCheck = $this->_db->get('table_name', array($field, '=', $user));
if($iCheck->count()) {
$this->_data = $iCheck->first();
return true;
}
}
}
return false;
}
public function login($userInput = null, $password = null) {
$user = $this->find($userInput);
if($user) {
if(password_verify($password, $this->data()->password)) {
Session::put($this->_sessionName, $this->data()->id);
return true;
}
}
return false;
}
public function logout() {
Session::delete($this->_sessionName);
}
public function data() {
return $this->_data;
}
public function isLoggedIn() {
return $this->_isLogggedIn;
}
}
在使用单个表时,代码无需在我的$packageType
方法中定义或检查find()
,但正如我所指出的,我需要将它用于不同的表。
我现在所困扰的是如何使用User
类检查用户登录的特定包,并获取相应的用户详细信息,那张特别的桌子。
任何帮助将不胜感激。
答案 0 :(得分:1)
TL; DR:制定一个解决方案,使用您可用的两个选项来更好地组织系统信息。
使用数据库的方式(仅限两个表),您必须在两个表上找到用户。这意味着您首先搜索其中一个,如果您找不到该用户,请搜索另一个用户。这意味着您必须找出一个优先级系统,其中表将优先于另一个。
然而,正如你之前所说:
我得出一个结论,我的选择不会给我我想要的东西。
它实际上无法完全解决您的问题,因为您需要用户使用单个用户名登录并且可以访问这两个类别。
所以,由于第一个选项只能解决你问题的一半,所以让我们检查另一个问题 选项2为用户使用一个表。这很好,因为这意味着每个用户都有一个用户名。但是,你的要求需要两个表(也许category1有类别2没有,反之亦然?),所以这不合适。
由于选项1是解决方案的一半而选项2是另一半,所以让我们使用两者!
您的数据库现在将有三个表:category1的表,category2的表和用户的表。您的类别表将包含特定于您的类别的用户信息,您的用户表将包含每个用户的用户名和密码信息 您的类别表不会有主键,只有外键(引用用户表的PK)。登录时,您的系统必须询问用户想要登录的类别。选择类别后,您可以根据用户选择的类别搜索category1或category2上的用户信息。
那就是它!您现在拥有一个登录系统,支持多个具有多个权限级别和用户信息的用户。