【问题标题】:how to implement multiuser (4 user types) authentification in laravel with two linked tables - roles and users如何在 laravel 中使用两个链接表实现多用户(4 种用户类型)身份验证 - 角色和用户
【发布时间】:2018-12-20 20:37:25
【问题描述】:

我正在做我的第一个 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: Undefined property: App\Http\Controllers\HomeController::$role_id

我走的很好吗?或者任何人都可以给我一个建议,什么是实现多用户身份验证但没有或只有一个额外(权限)表的最简单方法?

谢谢

【问题讨论】:

  • 我很确定会有一个 Addin/Plugin/.... 如果你寻找它

标签: php laravel authentication


【解决方案1】:

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

\Auth::user()->role_id 应该可以工作,前提是您已将 role_id 属性添加到 User 模型的 $fillable 数组中。

【讨论】:

  • 我已将 role_id 作为 $fillable 属性添加到用户模型中。你的意思是 $this->role_id 我放了 \Auth::user()->role_id ?当我替换并添加使用 Illuminate\Support\Facades\Auth;到 HomeController 标头我收到此错误尝试获取非对象的属性“role_id”
  • 看看盖茨。这是通过 laravel 应用确定权限的一种非常简单的方法。
【解决方案2】:

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

其次,在完成构造之前不能使用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

编码愉快~!

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2013-09-11
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多