как реализовать многопользовательскую (4 пользовательскую) аутентификацию в laravel с двумя связанными таблицами — ролями и пользователями

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

$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles');
$table->string('password');
$table->rememberToken();
$table->timestamps();

роли

$table->increments('id');
$table->string('role');

Аутентификация осуществляется с помощью команды laravel

php artisan make:auth

Я создал midllewares admin, user1, user2 и user3 с помощью команды laravel

php artisan make:midlleware

Как реализовать назначение промежуточного программного обеспечения на основе role_id из таблицы users, которая назначается пользователю при регистрации?
У меня была идея сделать что-то вроде этого:
в HomeController

public function __construct()
{
if($this->role_id=="1"){
$this->middleware('admin'); }

if($this->role_id=="2"){
$this->middleware('user0');  }

if($this->role_id=="3"){
$this->middleware('user1'); }

if($this->role_id=="4"){
$this->middleware('user2'); }
}

Но у меня ошибка
Неопределенное свойство: App \ Http \ Controllers \ HomeController :: $ role_id

Затем я создал метод __toString в контроллере

public function __toString()
{
return $this->role_id;
}

Я пытаюсь повторить $ this, чтобы увидеть его формат, я получил ошибку
Метод App \ Http \ Controllers \ HomeController :: __ toString () не должен генерировать исключение, перехвачено ErrorException: неопределенное свойство: App \ Http \ Controllers \ HomeController :: $ role_id

Я на хороших треках? Или кто-нибудь может дать мне совет, как проще всего реализовать многопользовательскую аутентификацию, но без или с одной дополнительной таблицей (разрешениями)?

Спасибо

1

Решение

Вы не можете получить доступ к role_id потому что это свойство вашей модели пользователя, а не вашего контроллера. Вот что означает ошибка «Неопределенное свойство». $this ссылается на объект Controller, а не на модель User.

\Auth::user()->role_id должно работать, если вы добавили role_id атрибут пользовательской модели $fillable массив.

1

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

Во-первых, вы пытались использовать без определения $role_id в этом HomeController Учебный класс.

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

use Auth;

class Homecontroller extends Controller{

private $role_id;

public function __construct(){

}

public function __toString(){
$authUser = Auth::user(); // or Auth::user()->role_id;
$this->role_id = $authUser->role_id;

if($this->role_id=="1"){
$this->middleware('admin');
}

if($this->role_id=="2"){
$this->middleware('user0');
}

if($this->role_id=="3"){
$this->middleware('user1');
}

if($this->role_id=="4"){
$this->middleware('user2');
}

return $this->role_id;
}
}

и другой способ должен быть с этим промежуточный слой-параметры

Удачного кодирования ~!

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector