Не получает роль пользователя из промежуточного ПО во время аутентификации - PullRequest
0 голосов
/ 10 мая 2019

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

Промежуточное ПО CustomerAuth

<?php

namespace App\Http\Middleware;

use Closure;
use App\Http\Requests\Request;

class CustomerAuth
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {


        if (!auth()->check()) {
            return $next($request);
        }
    else{
dd(auth()->user()->roles);
        foreach (auth()->user()->roles as $role){

            if ($role->slug == 'admin' || $role->slug == 'product-admin' || $role->slug == 'logistic-admin' ){

                return redirect()->route('customer.login-reset');
            }
        }


        foreach (auth()->user()->roles as $role){

            if ($role->slug == 'customer' ){

            return redirect()->route('customer.dashboard');
            }
        }
    }
    }

}

Модель пользователя

<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;

class User extends BaseModel
{
    protected $table='users';
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'username','name', 'email', 'password','profile_image','role_id'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function  roles(){
        return $this->belongsToMany(Role::class);
    }


}

Ошибка , с которой я сталкиваюсь, пытается получить свойство не-объекта.

1 Ответ

0 голосов
/ 10 мая 2019

Отношения выглядят нормально.Может быть, немного поменять промежуточное ПО, чтобы оно стало более читабельным.Что говорит dd(auth()->user()->roles)?В какой строке он выдает ошибку?

namespace App\Http\Middleware;

use App\Http\Requests\Request;
use Closure;

class CustomerAuth
{
    public function handle($request, Closure $next)
    {
        if (auth()->check()) {
            foreach (auth()->user()->roles as $role) {
                if ($role->slug === 'admin' ||
                    $role->slug === 'product-admin' ||
                    $role->slug === 'logistic-admin') {

                    return redirect()->route('customer.login-reset');
                }
            }

            foreach (auth()->user()->roles as $role) {
                if ($role->slug === 'customer') {

                    return redirect()->route('customer.dashboard');
                }
            }
        }

        return $next($request);
    }
}


// User.php
public function role()
{
    return $this->belongsTo('App\Models\Role');
}

// Role.php
public function users()
{
    return $this->hasMany('App\Models\User');
}

Тогда вы можете получить доступ к слагу вот так ...

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