Я делаю свой самый первый проект 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
Я на хороших треках? Или кто-нибудь может дать мне совет, как проще всего реализовать многопользовательскую аутентификацию, но без или с одной дополнительной таблицей (разрешениями)?
Спасибо
Вы не можете получить доступ к role_id
потому что это свойство вашей модели пользователя, а не вашего контроллера. Вот что означает ошибка «Неопределенное свойство». $this
ссылается на объект Controller, а не на модель User.
\Auth::user()->role_id
должно работать, если вы добавили role_id
атрибут пользовательской модели $fillable
массив.
Во-первых, вы пытались использовать без определения $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;
}
}
и другой способ должен быть с этим промежуточный слой-параметры
Удачного кодирования ~!