سلام به همگی دوستان.
من داخل فایل web.php یه روت رو به شکل زیر تعریف کردم .
Route::get('/test' , function (){
$user = auth()->user();
// return $user;
$role = $user->roles;
// return $role;
$permission = $role->permission;
return $permission;
});
وقتی user و role رو return می کنم اطلاعتشون به صورت کامل بر میگرده. ولی وقتی permission رو return می کنم. اررور زیر رو نمایش میده.
Property [permission] does not exist on this collection instance.
این کد های مربوط به مایگریشنم.
public function up()
{
Schema::create('permissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('title');
$table->timestamps();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->id();
$table->foreignId('role_id');
$table->foreignId('permission_id');
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('title');
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id');
$table->foreignId('role_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('permissions');
Schema::dropIfExists('permission_role');
Schema::dropIfExists('roles');
Schema::dropIfExists('role_user');
}
کدهای مربوط به مدل User
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function articles()
{
return $this->hasMany(Article::class);
}
public function courses()
{
return $this->hasMany(Course::class);
}
public function roles()
{
return $this->belongsToMany(Role::class);
}
کدهای مربوط به مدل Role
class Role extends Model
{
// protected $guarded = [];
public function users()
{
return $this->belongsToMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission::class , 'permission_role' , 'permission_id');
}
}
کدهای مربوط به مدل Permission :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Permission extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class , 'permission_role' , 'role_id');
}
}
@Ali.Abbasi1381
دوست عزیز شما در قسمت زیر یک آرایه از Role ها رو دریافت میکنید پس مستقیما نمیتونید به Permissions های اون Role دسترسی داشته باشید.
$role = $user->roles;
اگر دقت کنید اسم تابع هم Roles عه که یعنی "role های" مربوط به هر کاربر
شما میتونید با کد زیر تقریبا به Permission های هر Role دسترسی داشته باشید.
$roles = $user->roles;
foreach($roles as $role){
$p = $role->permissions;
}
@Ali.Abbasi1381
ظاهرا هر یوزر شما چندین رول داره، یا یک رول داره و چون ارتباط چندگانه هست array بر میگردونه . یعنی کد زیر شما collection بر میگردونه :
$role = $user->roles;
پس در این قسمت باید یک role انتخاب کرده و permissions های اون رو بگیرید. و یا از relation های بین role - permission استفاده کنید :
$permission = $role[0]->permission;
return $permission;
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟