Если вы используете FOS/user-bundle
, вы можете назначать роли пользователей, вы можете создавать свои собственные или использовать предопределенные (предварительно определено Admin).https://symfony.com/doc/2.0.x/bundles/FOSUserBundle/index.html
Если вы действительно хотите сделать это самостоятельно, у вас может быть одна модель, но разные экземпляры, это то, что вы настраиваете пользователя на использование bool для определения его роли, а затем создаете новый объект по запросуна основе ролей:
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
* @ORM\Table(name="users")
*/
class User
{
/** @Column(name="`isApiUser`", type="boolean") */
private $isApiUser;
/** @Column(name="`isSiteUser`", type="boolean") */
private $isSiteUser;
/** @Column(name="`isAdminUser`", type="boolean") */
private $isAdminUser;
//....
public function getApiUser(): ?ApiUser
{
return $this->isApiUser() ? new ApiUser($this) : null;
}
public function getSiteUser(): SiteUser
{
return $this->isSiteUser() ? new SiteUser($this) : null;
}
public function getAdminUser(): ApiUser
{
return $this->isAdminUser() ? new AdminUser($this);
}
//....
}
Затем пусть каждый пользовательский объект сделает что-то вроде:
class ApiUser
{
private $userName;
public function __construct(User $user)
{
$this->userName = $user->getUserName();
// Continue for whatever logic you want
}
}
Сделайте то же самое для каждого из пользовательских типов.
Затем, когда вы захотите использовать его в своем контроллере (или там, где угодно)
class SomeController extends Controller
{
public function indexAction()
{
$repository = $this->getDoctrine()->getRepository(User::class);
$user = $product = $repository->findOneBy([
'userName' => 'UserName',
'isApiUser' => true
]);
$apiUser = $this->getApiUser();
}
}