【问题标题】:Can't Compare Name Column form Database无法比较数据库中的名称列
【发布时间】:2022-11-27 13:34:24
【问题描述】:

我在 admin 用户,它担任管理员角色,但是当我添加一个条件来检查用户是否是 admin 时,它总是返回 false。我找不到问题所在。 这是我的代码:

所以这是我的角色表:

这是我的用户表:

我在我的用户模型中设置了关系,代码末尾的条件将检查用户是否为管理员:

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

/**
 * The attributes that should be hidden for serialization.
 *
 * @var array<int, string>
 */
protected $hidden = [
    'password',
    'remember_token',
];

/**
 * The attributes that should be cast.
 *
 * @var array<string, string>
 */
protected $casts = [
    'email_verified_at' => 'datetime',
];

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

public function isAdmin() {
    if($this->role->name == 'administrator')
        return true;
    else
        return false;
}

}

比我创建一个中间件女巫将允许我进入管理页面,如果用户是管理员,否则它会将我重定向到根目录:

最后我用控制器添加了路由:

这是控制器,以备不时之需:

【问题讨论】:

标签: php laravel database web backend


【解决方案1】:

首先,路线行动应该是:

Route::get('/admin', [AdminController::class, 'index'];

而不是检查天气用户是否是管理员,你可以在中间件中这样做:

if (auth()->user()->role->name == 'administrator') {
    return $next($request);
} else {
    return redirect('/');
}

【讨论】:

  • 我现在就试试,但路线也是这样,而且输入起来更容易!
  • 这种方式是一样的,只是更短,但它仍然不起作用。它再次返回 false!
【解决方案2】:

我发现了我的错误,所以我跑了:

返回 dd(Auth::user()->role->name)

它在页面中呈现了这个: “行政人员 ”

我有他们:

Auth::user()->role->name == "administrator" 但这意味着: “管理员”==“管理员”

问题是我在添加角色名称时加了一个额外的空格,请注意这一点,因为这是一个很难发现的错误。 注意间距! 现在可以了!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 2020-10-05
    • 1970-01-01
    • 2015-05-25
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多