Я создал абстрактный класс User, который расширен администратором, менеджером и сотрудником. Пользователь содержит все, что потребуется всем пользователям, и абстрагирует все, что обрабатывает каждый пользователь, используя различную логику в зависимости от экземпляра. Моя путаница возникает, когда у меня есть функциональные возможности, которые класс Admin или Manager будет обрабатывать точно так же, но Сотрудник не сможет получить доступ вообще.
Например, управление пользователем, отличным от самого себя, должно быть ограничено только администраторами и менеджерами, в то время как сотрудник никогда не должен этого делать. Я хочу избежать копирования / вставки одной и той же логики как в классе Admin, так и в классе Manager, поэтому я должен создать одну частную функцию и переместить ее в класс User, а просто сделать так, чтобы классы Admin / Manager вызывали ее оттуда?
abstract class User
{
public $username;
public $userId;
public $company;
public $error;
private function updateUser($user)
{
// Logic for saving the user info
}
....
}
class Admin extends User
{
public function updateUser($user)
{
parent::updateUser($user)
}
....
}
class Manager extends User
{
public function updateUser($user)
{
parent::updateUser($user)
}
....
}
class Employee extends User
{
public function updateUser($user)
{
$this->error = "Invalid Permissions";
}
....
}
Должно ли это быть обработано по-другому? Спасибо.