У меня есть таблица, где я сохраняю пользователей. Пользователи могут быть студентом, учителем, директором или их комбинацией, я использую роли для достижения этой цели (пакет называется spatie / Laravel-разрешение).
Я предоставляю конкретные модели для студентов, преподавателей и директоров школ с их собственной логикой, запросами и т. Д., Но у меня нет конкретных таблиц для этих моделей.
В настоящее время я определяю, является ли пользователь учителем, используя функцию boot () в модели Teacher (то же самое касается студентов и директоров школ):
protected static function boot()
{
parent::boot();
//Todo: make use of role package to determine if model is teacher or not.
static::addGlobalScope('teacher', function (Builder $builder) {
$builder->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('teacher_offering')
->whereRaw('teacher_offering.user_id = users.id');
});
});
}
Этот запрос работает хорошо, но мне было интересно, смогу ли я упростить это, используя пакет разрешений Laravel, предоставленный Spatie.
Мои вопросы: могу ли я заменить запрос внутри функции boot (), проверив, назначена ли роль учителя пользователю?
Могу ли я достичь этого с помощью этого пакета или я должен остаться с этим запросом?
Какой у вас сценарий использования для проверки роли пользователя? Если вы пытаетесь запретить доступ к определенным страницам, используйте Промежуточное проверять роли. Я не думаю, что рамки подходят для этого.
spatie / Laravel-разрешение Пакет обеспечивает hasRole($role)
метод, предполагая, что ваш User
реализует HasRoles
черта характера:
$isTeacher = Auth::user()->hasRole('teacher');
Других решений пока нет …