2017-04-14 42 views
0

因此,首先我希望我的标题不会令人误解。请让我知道我的标题是否适合这个问题。如何在登录时向Auth :: user()添加自定义属性

问题。 我使用Laravel 5.3和我试图找到一种方法来添加属性“角色”,以验证用户::()这样我就可以像

Auth::user()->role. 

角色的访问是不是在一个领域用于认证的用户表,但它是我计算得到的一个值。我问的原因是我不想每次都需要计算角色的价值,而是想在验证成功后再设置它,然后重新使用它。

任何想法我可以做到这一点?

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

+0

Auth :: user()在每个请求上重新创建或重新加载,所以我建议你存储你的c在会话中计算角色,然后创建一个中间件,检查角色是否存在,然后将该角色附加到该中间件中的Auth :: user()对象中...希望它有帮助 – razzbee

+0

好吧,我刚刚阅读了有关中间件,这看起来像我在找什么。但是可以告诉我如何将一个额外的属性附加到Auth :: user(),或者你可以指向正确的方向。是否像“$ request-> user() - > role = 23”? –

回答

1

你可以做到这一点,最好的办法是在你的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会得到它并附加到用户()对象,这也不需要中间件 希望它有帮助

+0

这会在用户注销时刷新会话变量,是的? –

+0

没关系。想出了最后一部分。让我试试你的解决方案。 –

+0

这将返回“调用未定义的方法Illuminate \ Database \ Query \ Builder :: getRole()”的想法? –