Изначально в моем проекте было 3 типа пользователей
Но теперь я хочу добавить еще одногоодин между администратором и пользователем, как директор, это для школы.
В настоящее время я настроил типы следующим образом: в пользовательской таблице у меня есть внешний ключ user_type_id
, который ссылается на таблицу user_types, где будут 4 типа.
В моей модели пользователя
public function userTypes()
{
return $this->belongsTo(UserType::class);
}
public function hasRole($id)
{
return $this->user_type_id == $id;
}
public function isSuperAdmin()
{
return $this->hasRole(UserType::SUPER_ADMIN);
}
public function isAdmin()
{
return $this->hasRole(UserType::ADMIN);
}
public function isDirector()
{
return $this->hasRole(UserType::DIRECTOR);
}
public function isUser()
{
return $this->hasRole(UserType::USER);
}
Модель UserType
public static $SUPER_ADMIN = 1;
public static $ADMIN = 2;
public static $DIRECTOR = 3;
public static $USER = 4;
public $timestamps = false;
protected $fillable = ['name'];
public const SUPER_ADMIN = 1;
public const ADMIN = 2;
public const DIRECTOR = 3;
public const USER = 4;
Я использую Inertia для настройки разрешений, эти разрешения в основном являются пунктами меню, которые видны для каждого конкретного типа пользователя, это вAppServiceProvider.php
Inertia::version(function () {
return md5_file(public_path('mix-manifest.json'));
});
Inertia::share('auth.user', function () {
$auth = null;
if (Auth::user()) {
$perms = [];
$user = Auth::user();
if ($user->isSuperAdmin()) {
$perms = [
//permissions here
];
}
if ($user->isAdmin()) {
$perms = [
//permissions here
];
}
if ($user->isDirector()) {
$perms = [
//permissions here
];
}
if ($user->isUser()) {
$perms = [
//permissions here
];
}
}
});
Для промежуточного программного обеспечения у меня это для SuperAdminMiddleware
public function handle($request, Closure $next)
{
$user = Auth::user();
if (auth()->check() && $user->isSuperAdmin()) {
return $next($request);
}
return redirect('/');
}
AdminMiddleware
public function handle($request, Closure $next)
{
$user = Auth::user();
if (auth()->check() && $user->isAdmin() || $user->isSuperAdmin()) {
return $next($request);
}
return redirect('/');
}
Мои маршруты вweb.php
//Auth and login routes
Route::group(['middleware' => 'auth'], function () {
Route::resource('/', 'DashController');
Route::get('/logout')->name('logout')->uses('Auth\LoginController@logout');
Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function () {
//All the routes are in this group
});
});
Как правильно добавить другой тип пользователя, прямо сейчас с помощью кода, который у меня есть, я могу войти в систему пользователю-директору и увидеть меню для директора, я могу нажатьна них, но я не перенаправлен никуда, я просто остаюсь на странице панели инструментов. Как я могу сделать это правильно?