如何在Laravel中使用两个链接表 - 角色和用户实现多源(4种用户类型)身份验证



我正在制作我的第一个laravel(和编程)项目。我想用两个表制作多用户身份验证系统:用户和角色表代码如下所示用户

$table->increments('id'); 
$table->string('name'); 
$table->string('email')->unique(); 
$table->integer('role_id')->unsigned(); 
$table->foreign('role_id')->references('id')->on('roles'); 
$table->string('password'); 
$table->rememberToken(); 
$table->timestamps();

角色

$table->increments('id'); 
$table->string('role');

使用Laravel命令

实现身份验证
php artisan make:auth

我使用laravel命令

创建了Midllewares管理员,User1,user2和user3
php artisan make:midlleware 

如何根据注册期间分配给用户的用户表实现中间件评估?我有一个想法做这样的事情:在Homecontroller

public function __construct()
    {     
       if($this->role_id=="1"){
        $this->middleware('admin'); }
       if($this->role_id=="2"){
        $this->middleware('user0');  }
       if($this->role_id=="3"){
        $this->middleware('user1'); }
       if($this->role_id=="4"){
        $this->middleware('user2'); }
    }

但是我有一个错误未定义的属性:app http controllers homecontroller :: $ prole_id

然后我在控制器中创建了__Tostring方法

public function __toString()
    {
      return $this->role_id;
    } 

我尝试回声$以查看其格式,我有一个错误方法app http controllers homecontroller :: __ toString()不得抛出异常,抓取errorexception:undefined属性:app http controllers homecontroller :: $ crole _ proam_id

我在一条好的曲目上吗?或任何人都可以给我一个建议,什么是实现多源Auth的最简单方法,但只有一个额外的(权限)表?

谢谢

您无法访问role_id,因为它是用户模型上的属性,而不是控制器上的属性。这就是"未定义属性"错误的含义。$this是指控制器对象,而不是用户模型。

Auth::user()->role_id应该起作用,并认为您已将role_id属性添加到用户模型的$fillable数组中。

首先,您尝试在此HomeController类中使用$role_id而尝试使用。

第二,在完成构造之前,您不能使用验证中间件,因为构造函数是在中间件之前创建的,这就是为什么它返回null.在此处检查

use Auth;
class Homecontroller extends Controller{
   private $role_id;
   public function __construct(){
   }
   public function __toString(){
      $authUser = Auth::user(); // or Auth::user()->role_id;
      $this->role_id = $authUser->role_id;
      if($this->role_id=="1"){
        $this->middleware('admin'); 
      }
      if($this->role_id=="2"){
        $this->middleware('user0');  
      }
      if($this->role_id=="3"){
        $this->middleware('user1'); 
      }
      if($this->role_id=="4"){
        $this->middleware('user2'); 
      }
      return $this->role_id;
   }
}

和另一种方法应该与此中间软件参数

快乐编码〜!

最新更新