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

Я делаю свой самый первый проект 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 из таблицы пользователей, которая назначается пользователю во времяпостановка на учет?У меня была идея сделать что-то вроде этого: в 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метод в Controller

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

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

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

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

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

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;
   }
}

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

Счастливое кодирование ~!

0 голосов
/ 20 декабря 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...