Надеюсь, это то, что вы имеете в виду, но именно так я различаю типы пользователей с помощью Middleware.
По сути, создание собственного промежуточного программного обеспечения (я думаю, вы также можете сделать это с помощью встроенного функционала, но я предпочитаю это), например:
1) MiddleWare:
app/Http/Middleware/CheckUserType.php
namespace App\Http\Middleware;
use Auth;
use Closure;
use App\Usergroup;
class CheckUserType
{
/**
* This middleware checks if the user is logged in as a specific type
*
* @var array
*/
public function handle($request, Closure $next, ...$userGroups)
{
if (in_array(UserGroup::where('id', Auth::user()->groupid)->first()->title, $userGroups)) {
return $next($request);
} else {
return response('Unauthorized...', 401);
}
}
}
В моем случае у меня есть таблица групп пользователей, которая ссылается на user-> groupid, поэтому я использую эту модель для перекрестной ссылки на идентификатор группы, которую я передаю в своем маршрутизаторе.
Но вы можете изменить это, очевидно.
Также обратите внимание, что я делаю ...$userGroups
, поэтому я могу перебирать несколько типов пользователей, если я хочу в маршрутизаторе (см. Ниже).
2) Зарегистрируйтесь в вашем ядре:
Тогда зарегистрируйтесь в app/Http/Kernel.php
:
добавить к protected $routeMiddleware
:
checkUserType' => CheckUserType::class
Убедитесь, что вы включили пользовательское промежуточное ПО (use App\Http\Middleware\CheckUserType;
)
3) Маршруты:
Итак, наконец, в моем маршрутизаторе у меня есть, например, следующее:
/**
* @section Routes that require the user to be a Manager or an Administrator
*/
Route::group(['middleware' => 'checkUserType:Managers,Administrators'], function () {
//
});
или
/**
* @section Routes that require the user to be an Administrator
*/
Route::group(['middleware' => 'check.usertype:Administrators'], function () {
// User Routes
Route::delete('/users/delete/{id}', 'UserController@deleteUser');
});