2015-04-11 4 views
0

У меня есть система входа в систему, которая создает объект USER из класса при входе в систему, я заинтересован, чтобы сделать его лучше, расширив класс пользователя до администратора, персонала, модератора и так далее.PHP логин объекта конструктор (расширение класса) логика

Каждый класс будет иметь свои собственные функции/способности, которые являются идеей, однако я не уверен, как это сделать.

В настоящее время я делаю это: $user = new User();

Чем этот $ пользователь пытается войти в систему и так далее.

Как я могу сделать что-то вроде этого: $user->login(), если пользователь admin создает $admin = new Admin();

У меня возникли проблемы с логической части я считаю ..

Спасибо

Дополнительный мой текущий конструктор пользователя:

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->_isLoggedIn = TRUE; 
        // GRAB THE ID of user for pulling info from the personal 
        $userId = $this->_data->id; 
        $this->_data = $this->data(); 
       }else{ 
        $this->logout();} 
      } 
     }else { 
      $this->find($user); 
     } 
    } 

ответ

-1

использование dependency injection:

function createUser(User user){ 
    $this->user = user; 
} 

вы может передать User, Admin ... этой функции

1

Почему ваш конструктор пользователя знает, как работать с сеансами? Где принцип SOLID? Вот только очень упрощенный пример. Идея создания разных типов пользователей заключается в использовании шаблона Factory. Я предполагаю, что тип пользователя хранится в пользовательской таблице в db.

В принципе, вам нужно:

class User 
class Admin inherits User 
class Moderator inherits User 
class Auth // knows to do authorization 
class UserFactory // knows to create needed user 


class UserFactory 
{ 
    public static function create($data) 
    { 
     $type = $userData['type']; 

     switch ($type) { 
     case "admin": 
      return new Admin($data); 
      break; 
     case "moderator": 
      return new Moderator ($data); 
      break; 
     default: 
      return new User($data); 
     } 
    } 
} 

class Auth() { 

    public login($username, $password) { 
     // work with sessions, database 
     $userData = $this->data(); 

     $user = UserFactory::create($userData); 
     return $user; 
    } 
} 

// just as an example 
$auth = new Auth(); 
$user = $auth->login($username, $password); 
+0

Ok я получаю представление о том, что вы делаете здесь, спасибо, я дам этому идти. Я понимаю логику этого, я думаю, что смогу с этим работать. И чтобы добавить yes, пользовательский тип хранится в таблице DB – theStudent

Смежные вопросы