Вызов функции-члена hasRoles () для nul - PullRequest
0 голосов
/ 22 октября 2019

Я новичок в Laravel

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

Вот мое промежуточное ПО:

        namespace App\Http\Middleware;

        use Closure;
        use Auth;
        class AccessAdmin
        {
            /**
             * Handle an incoming request.
             *
             * @param  \Illuminate\Http\Request  $request
             * @param  \Closure  $next
             * @return mixed
             */
            public function handle($request, Closure $next)
            {
                if(Auth::user()->hasRoles('Admin')){
                    return $next($request);
                }
                return redirect('home');
            }
        }

    <?php

Ролевая модель

Приложение пространства имен;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    public function users(){
        return $this->belongsToMany('App\User');
    }
}
User Model
<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

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

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

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    public function roles(){
        return $this->belongsToMany('App\Role');
    }
    public function hasAnyRoles($roles){
        return null !== $this->roles()->whereIn('name',$roles)->first();
    }
    public function hasRoles($role){
        return null !== $this->roles()->where('name',$role)->first();
    }
}

, которое производит этоошибка:

FatalThrowableError (E_ERROR) Вызов функции-члена hasRole () со значением NULL

1 Ответ

1 голос
/ 22 октября 2019

Если зарегистрированный пользователь отсутствует, то Auth :: user () имеет значение null, попробуйте следующее

<?php 

namespace App\Http\Middleware;

use Closure;
use Auth;
class AccessAdmin
{
    /**
        * Handle an incoming request.
        *
        * @param  \Illuminate\Http\Request  $request
        * @param  \Closure  $next
        * @return mixed
        */
    public function handle($request, Closure $next)
    {
        if(!Auth::guest() && Auth::user()->hasRoles('Admin')){
            return $next($request);
        }
        return redirect('home');
    }
}

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

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