Мое приложение имеет структуру ежемесячных подписок, которые дают вам один логин администратора, отвечающий за выставление счетов. Под этой основной учетной записью могут быть многочисленные сотрудники, некоторые, но не все, со своими собственными учетными записями с ограниченными разрешениями.
Каков наилучший способ структурировать это?
Я сделал следующее:
Выдержка из таблицы пользователя:
id | employee_id | имя | электронная почта | пароль | так далее…
Выписка из таблицы сотрудников:
id | user_id | имя_файла | фамилия | так далее…
Индексы:
Schema::table('employees', function($t) {
$t->foreign('user_id')
->references('id')
->on('users')
->onUpdate('cascade')
->onDelete('cascade');
});
Schema::table('users', function($t) {
$t->foreign('employee_id')
->references('id')
->on('employees')
->onUpdate('cascade')
->onDelete('cascade');
});
Но это поднимает пару вопросов:
Когда сотрудник входит в систему, он должен видеть записи, помеченные идентификатором основной учетной записи пользователя, но при использовании Auth :: id возвращается идентификатор пользователя сотрудника.
Иногда идентификатор пользователя сотрудника необходим для обозначения определенных записей как их, но также основной идентификатор учетных записей пользователей должен быть записан вместе с записью.
Использование Sentry или системы, основанной на Permissions / Roles, решает несколько проблем, но не решает проблему, когда Auth возвращает и идентификатор сотрудника, и идентификатор основной учетной записи пользователя.
Есть ли лучший способ сделать это, чем подход, который я использую? Есть ли какое-то простое решение, которое мне не хватает?
(Это мой первый вопрос по StackOverflow, поэтому я все еще учусь, как это работает.)
Я добавил столбец user_type в таблицу пользователей. С этим я создаю следующий метод в моей модели Users:
public function rootId()
{
if (Auth::user()->user_type == Config::get('settings.employee'))
{
return Auth::user()->employee->user_id;
}
else if (Auth::user()->user_type == Config::get('settings.admin'))
{
return Auth::user()->id;
}
}
Похоже, это рабочее решение для моей ситуации.
Если у кого-то есть лучшее решение или вы видите проблемы с моим, пожалуйста, дайте мне знать.
Других решений пока нет …