私は遠い関係を掴みようとしていて、うまくいきません。 hasManyThrough
を実行しようとしましたが、それはbelongsToMany
の関係では動作していません。それはクエリエラーを投げていた。ここで遠くのbelongsToManyからbelongsToManyを取得
は私移行している。ここで
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->integer('role_id');
$table->integer('user_id');
});
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('group');
$table->string('name');
$table->timestamps();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->integer('permission_id');
$table->integer('role_id');
});
は私のモデルです:
class User extends AuthUser
{
//
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
class Role extends Model
{
//
public function permissions()
{
return $this->belongsToMany('App\Permission');
}
}
私が何をしようとしている:
$user = App\User::find(1);
Log::info($user->roles->permissions);
これは私にProperty [permissions] does not exist on this collection instance.
エラーになります。
どのようにしてユーザーのロールを使用してユーザーのアクセス許可を取得できますか?
編集:私はこれを改善するにはどうすればよい
if (auth()->check()) {
if (auth()->user()->roles->contains('name', 'Admin')) {
Gate::before(function() {
return true;
});
}
else {
$permissions = [];
foreach (auth()->user()->roles as $role) {
$permissions = array_merge($permissions, $role->permissions->pluck('name')->all());
}
foreach (array_unique($permissions) as $permission) {
Gate::define($permission, function() {
return true;
});
}
}
}
:
私は私がやろうとしているものに、この醜い解決策を作ってみましたか?
多人数の関係がユーザーとロールにありますか? –
あなたの関係はどうですか? 1人のユーザーには多くの役割があり、その役割には多くの権限がありますか? –
@ImmortalDudeありがとうございます。 – kjdion84