所以,首先我希望我的头衔不会产生误导。如果我的标题符合问题,请告诉我。
问题。 我正在使用Laravel 5.3,我正在尝试找到一种方法来向Auth :: user()添加属性“role”,以便我可以像
一样访问它Auth::user()->role.
Role不是用于身份验证的用户表中的字段,但它是我计算得到的值。我问的原因是我不想每次需要值时计算角色,而是我想在验证成功后再设置它然后重复使用它。
知道我该怎么做吗?
或者有什么方法可以在用户登录时保留一个值,以便我可以计算一次并重复使用它?
答案 0 :(得分:2)
您可以在User.php模型中实现此目的的最佳方式:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
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','is_admin',
];
protected function getRole(){
if(\Session::has("role")){
return Session::get("role");
}else{
//calculate and save role in session
}
}//end get Role
}//end class
所以你会像这样检查
Auth::user()->getRole();
确保在登录后将角色保存在会话中,getRole将获取它并附加到user()对象,这也不需要中间件 希望它有所帮助
答案 1 :(得分:0)
只需在模型底部添加要使用的关键字的方法,然后使用belongsTo()
将其链接到相应的模型。然后,我们只需Auth::user()->role()
即可使用它。假设您有一个名为Role的模型,该模型具有定义的表和角色。 (laravel 5.2 +)
public function role() {
return $this->belongsTo( Role::class );
}
整个模型在这里:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $guarded = ['id', 'remember_token'];
protected $hidden = [ 'password', 'remember_token' ];
public static $rules = array(
'email' => 'required|email|unique:users,email',
'first_name' => 'required|min:2',
'last_name' => 'required|min:2'
);
public static $rules_password = array(
'password' => 'required|min:6|confirmed'
);
public function role() {
return $this->belongsTo( Role::class );
}
}