我正在制作我的第一个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命令创建了midlleware admin、user1、user2和user3
php artisan make:midlleware
如何从注册时分配给用户的users表中实现基于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
然后我在控制器中创建了__toString方法
public function __toString()
{
return $this->role_id;
}
我尝试回显$this以查看它的格式,我得到一个错误方法App\Http\Controllers\HomeController::__toString()不能抛出异常,捕获ErrorException:未定义的属性: App\Http\Controllers\HomeController::$role_id
我是在一个好的轨道上吗?或者,谁能给我一个建议,实现多用户身份验证的最简单方法是什么,但没有或只有一个额外的(权限)表?
谢谢
发布于 2018-12-20 11:57:59
您不能访问role_id
,因为它是用户模型上的属性,而不是控制器上的属性。这就是“未定义的属性”错误的含义。$this
引用的是控制器对象,而不是用户模型。
假设您已经将role_id
属性添加到用户模型的$fillable
数组中,那么\Auth::user()->role_id
应该可以工作。
发布于 2018-12-20 12:37:26
首先,您尝试在此HomeController
类中不定义$role_id
。
其次,在构造完成之前不能使用身份验证中间件,因为构造函数是在中间件之前创建的,这就是为什么它返回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
编码快乐~!
https://stackoverflow.com/questions/53868067
复制相似问题