0

我对 Laravel 比较陌生。

我有 2 张不同的桌子。rolesusers

我希望能够Auth::user()->role->perms获得用户角色的权限。

在我的User.php我有以下

public function role(){
        return $this->belongsTo(Role::class, 'role');
    }

在我的Role.php我有以下

public function users() {
        return $this->HasMany(User::class);
    }

这是我的create_users_table.php

Schema::connection('panel')->create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('steam64');
            $table->string('steamName');
            $table->string('name');
            $table->string('role')->default('user');
            $table->rememberToken();
        });

这是我的create_roles_table.php

Schema::connection('panel')->create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('role');
            $table->json('perms')->default('{"full_perms":0, "some_other_perms":0}');
            $table->integer('immunity')->default(10);
        });

当我使用{{Auth::user()->role->perms}}时,我得到以下错误Trying to get property 'perms' of non-object

希望这是足够的信息。如果没有,我可以提供更多信息。

4

2 回答 2

0

在用户表角色列不能是字符串它必须是角色表的 id 并且应该是无符号的

于 2020-08-08T05:10:10.877 回答
0

因此,您需要在角色表上定义 user_id,并且最好定义删除用户时角色会发生什么。

create_roles_table.php

 Schema::connection('panel')->create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('role');
            $table->integer('user_id')->unsigned()->index();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->json('perms')->default('{"full_perms":0, "some_other_perms":0}');
            $table->integer('immunity')->default(10);
        });

同时删除 $table->string('role')->default('user'); 从用户表中,您不需要那个。

于 2020-08-08T00:35:04.790 回答