如何在登录时向Auth :: user()添加自定义属性

时间:2017-04-14 16:24:04

标签: laravel laravel-5

所以,首先我希望我的头衔不会产生误导。如果我的标题符合问题,请告诉我。

问题。 我正在使用Laravel 5.3,我正在尝试找到一种方法来向Auth :: user()添加属性“role”,以便我可以像

一样访问它
Auth::user()->role. 

Role不是用于身份验证的用户表中的字段,但它是我计算得到的值。我问的原因是我不想每次需要值时计算角色,而是我想在验证成功后再设置它然后重复使用它。

知道我该怎么做吗?

或者有什么方法可以在用户登录时保留一个值,以便我可以计算一次并重复使用它?

2 个答案:

答案 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 ); 
    }

}