Laravel: несколько типов пользователей

Я работаю над приложением, где у меня есть три типа пользователей (реальный сценарий), в приложении есть три области: фрилансеры и Lms (системы управления обучением) и панель администратора для обоих:

  • Admins => Пользователи панели администратора, где есть вся статистика / данные.
  • Раздел фрилансеров: вход / регистрация в разделе фрилансеров
  • Раздел Lms => Пользователи раздела системы управления обучением. Вход / Регистрация

В настоящее время я не использую какие-либо функции множественной аутентификации, и всякий раз, когда я вхожу в систему в разделе фрилансера и захожу в раздел lms, аутентифицированный пользователь там доступен.

Поскольку я использую только одну таблицу для пользователей, где у меня есть столбец userType(Который не используется, но есть для проверки в будущем).

Я знаю пару пакетов этот. который я могу реализовать, но я не сделал и подумал, что может быть лучший способ и stackoverflow сообщество может предоставить один.

Мой вопрос заключается в том, как справиться с ситуацией такого типа. Какой самый эффективный и надежный способ?

2

Решение

Вероятно, вы ищете не multiauth, а разрешения для определенных страниц. Взгляни на: https://github.com/spatie/laravel-permission

Это очень просто и понятно. Он даже позволяет выделить пользователей, которые, например, оба имеют уровень администратора, но только один может просматривать его.

1

Другие решения

Наиболее эффективным и надежным способом является использование простых user_type колонка для хранения типа пользователя и создания некоторых помощников. Например, чтобы проверить, является ли пользователь администратором, вы можете создать что-то подобное в User модель:

public function isAdmin()
{
return auth()->check() && auth()->user()->user_type === 3;
}

Это самый простой метод с большим количеством преимуществ. Это хорошо для приложений, которые используют много отношений, это хорошо для скорости и т. Д.

1

Вот как бы я это сделал.

Я собираюсь пропустить подробные сведения о настройке контроллеров аутентификации и представлений. Они довольно просты, чтобы подмостить, используя ремесленную консоль.

Первое, что нам нужно, это новое поле на вашем Users Таблица. admin поле, если у вас есть только два уровня (админ и не админ). Значение ENUM в вашем случае.

В зависимости от значения в этом поле вы хотите предоставить (или нет) доступ к определенным разделам / страницам / ресурсам и т. Д.

Консоль ремесленника генерирует все необходимые страницы, промежуточное программное обеспечение, маршруты для базового входа в систему. Но после того, как вы это сделаете, вам понадобится второе промежуточное ПО для проверки разных уровней доступа. Давай называть это CheckAdmin,

  1. Используйте следующую команду
    php artisan make:middleware CheckAdmin, Это создает новое промежуточное ПО с указанным именем в app\Http\Middleware

  2. Теперь зарегистрируйте промежуточное ПО в Kernel.php (Последняя строка кода). Это дает промежуточному классу, который мы только что создали имя (в данном случае admin).

    protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'admin' => \App\Http\Middleware\CheckAdmin::class,
    ];
    
  3. Все маршруты в вашей проверке для определенных прав администратора должны использовать admin промежуточное программное обеспечение, которое мы только что зарегистрировали сразу после auth Заводское промежуточное ПО, снабженное Laravel. Есть два способа сделать это в зависимости от того, как вы создаете свое приложение / веб-сайт.

A. НЕ использовать контроллеры ресурсов для маршрута.

Перейти к вашим маршрутам web.php файл. И зарегистрировать auth а также admin промежуточное программное обеспечение для запроса. Пример следует.

Route::get('/example-admin-only-route', function () { //SOME LOGIC
})->middleware('auth', 'admin');

Б. Использование ресурсов контроллеров. (Что вы, вероятно, должны, когда вы можете)

В конструкторе контроллера ресурсов. ExampleController.php за наших пример ресурс.

class ExampleController extends Controller
{

public function __construct()
{
$this->middleware('auth');
$this->middleware('admin');
}

...
}
  1. Напишите логику для вашего CheckAdmin промежуточное программное обеспечение.

    namespace App\Http\Middleware;
    
    use Closure;
    
    class CheckAdmin
    {
    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    
    public function handle($request, Closure $next)
    {
    if($request->user()->admin == 'Admin') //or FreeLancers or LMS (or maybe Unicorns)
    {
    return $next($request);
    }
    else
    {
    return redirect("/not-worthy");
    }
    
    }
    }
    

Код проверяет права администратора и либо пропускает запрос, либо делает что-то еще с ним. В нашем случае перенаправляет на другую конечную точку. Но вы можете захотеть сделать более творческие вещи с этим.

Приветствия.

1
По вопросам рекламы [email protected]