首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用角色和用户两个链接表在laravel中实现多用户(4种用户类型)身份验证

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

Stack Overflow用户
提问于 2018-12-20 19:46:00
回答 2查看 77关注 0票数 1

我正在制作我的第一个laravel (和编程)项目。我想做一个只有两个表的多用户认证系统:用户和角色,表的代码显示在用户下面

代码语言:javascript
运行
复制
$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();

角色

代码语言:javascript
运行
复制
$table->increments('id'); 
$table->string('role');

身份验证是使用laravel命令实现的

代码语言:javascript
运行
复制
php artisan make:auth

我已经使用laravel命令创建了midlleware admin、user1、user2和user3

代码语言:javascript
运行
复制
php artisan make:midlleware 

如何从注册时分配给用户的users表中实现基于role_id的中间件分配?我有一个想法来制作这样的东西:在HomeController中

代码语言:javascript
运行
复制
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

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

代码语言:javascript
运行
复制
public function __toString()
    {
      return $this->role_id;
    } 

我尝试回显$this以查看它的格式,我得到一个错误方法App\Http\Controllers\HomeController::__toString()不能抛出异常,捕获ErrorException:未定义的属性: App\Http\Controllers\HomeController::$role_id

我是在一个好的轨道上吗?或者,谁能给我一个建议,实现多用户身份验证的最简单方法是什么,但没有或只有一个额外的(权限)表?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-12-20 19:57:59

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

假设您已经将role_id属性添加到用户模型的$fillable数组中,那么\Auth::user()->role_id应该可以工作。

票数 1
EN

Stack Overflow用户

发布于 2018-12-20 20:37:26

首先,您尝试在此HomeController类中不定义$role_id

其次,在构造完成之前不能使用身份验证中间件,因为构造函数是在中间件之前创建的,这就是为什么它返回null.check here

代码语言:javascript
运行
复制
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

编码快乐~!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53868067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档