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

时间:2018-12-20 11:46:00

标签: php laravel authentication

我正在做我的第一个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 admin,user1,user2和user3

php artisan make:midlleware 

如何基于注册过程中分配给用户的用户表中的role_id实施中间件分配? 我有个主意可以做这样的事情: 在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 :: $ role_id

然后我在Controller中创建了__toString方法

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

我尝试回显$ this以查看其格式,但出现错误 方法App \ Http \ Controllers \ HomeController :: __ toString()不得引发异常,捕获到的ErrorException:未定义的属性:App \ Http \ Controllers \ HomeController :: $ role_id

我的赛道好吗?还是有人可以给我一个建议,但是实现多用户身份验证的最简单方法是什么呢?但是不设置,或者仅添加一个(权限)表?

谢谢

2 个答案:

答案 0 :(得分:1)

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

\Auth::user()->role_id应该有效,前提是您已将role_id属性添加到用户模型的$fillable数组中。

答案 1 :(得分:1)

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

第二,在构造完成之前,您不能使用auth中间件,因为构造函数是在中间件之前创建的,这就是为什么它返回null的原因。check here

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;
   }
}

并且另一种方式应该与此middleware-parameters

编码愉快〜!