Hubungan antara tiga lajur dalam Laravel: Peranan, Pasukan dan Projek.
P粉645569197
P粉645569197 2023-07-26 15:10:19
0
1
440

Dalam Laravel, saya mempunyai hubungan antara pasukan, projek, pengguna, peranan dan kebenaran.

Pengguna boleh mempunyai berbilang pasukan, satu pasukan boleh mempunyai berbilang projek dan pengguna boleh mempunyai peranan pengguna, peranan pasukan dan peranan projek. Saya ingin tahu cara mendapatkan kebenaran pengguna bagi setiap projek, setiap pasukan dan hanya untuk pengguna.


Jadual pengguna

  • Id
  • nama
  • id_projek semasa
  • current_team_id
  • role_id
  • etc

Meja pasukan

  • id
  • nama

Jadual projek

  • id
  • nama
  • penerangan

Jadual peranan

  • id
  • nama
  • jenis(pengguna, projek, pasukan)

Jadual kebenaran

  • id
  • nama

Jadual kebenaran_peranan

  • id_izin
  • role_id

jadual pengguna_projek

  • project_id
  • user_id
  • role_id

jadual pengguna_pasukan

  • team_id
  • user_id
  • role_id

Seorang pengguna hanya boleh mempunyai satu peranan dalam projek, hanya satu peranan dalam pasukan dan pengguna sendiri hanya boleh mempunyai satu peranan, yang boleh menjadi pentadbir atau pengguna biasa.


class Pengguna melanjutkan Boleh Ditulenkan { projek fungsi awamRole() { //Saya tidak dapat mencari cara untuk memasukkan project_id seperti di mana, kerana current_project_id adalah batal dalam but return $this->belongsToMany(Role::class, 'project_user')->where('project_id', '=', $this->current_project_id)->first(); } public function projectPermissions() { kembalikan $this->projectRole()->permissions; } kebenaran fungsi awam() { //Saya tidak dapat mencari jalan untuk mendapatkan semua kebenaran pasukan, kebenaran projek dan kebenaran pengguna } peranan fungsi awam() : BelongsTo { //Hanya boleh menjadi peranan Pengguna, Pentadbir atau Sokongan return $this->belongsTo(Role::class); } fungsi awam userPermissions() { kembalikan $this->role->permissions; } } kelas Peranan meluaskan Model { kebenaran fungsi awam() { pulangkan $this->belongsToMany(Permission::class); } }

Saya mahu menggunakan kebenaran sebagai ambang untuk lulus ke bahagian hadapan Inersia, saya sedang mencuba sesuatu seperti ini.

Gate::before(function ($user, $permission) { kembalikan $user->projectPermissions($user->currentProject)->contains($permission) || $user->teamPermissions($user->currentTeam)->contains($permission) || $ user->teamPermissions($user->currentTeam)->contains($permission) ||. $user->userPermissions()->contains($permission); });


P粉645569197
P粉645569197

membalas semua (1)
P粉471207302

Berdasarkan penjelasan anda, saya melakukannya seperti berikut:

Jadual****************

jadual_projek_pengguna:

Schema::create('project_user', function (Blueprint $table) { $table->unsignedBigInteger('project_id'); $table->unsignedBigInteger('user_id'); });

jadual_permission_role:

Schema::create('permission_role', function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->unsignedBigInteger('role_id'); });

role_user table:

Schema::create('role_user', function (Blueprint $table) { $table->unsignedBigInteger('role_id'); $table->unsignedBigInteger('user_id'); });

Model *************

Model Pengguna:

/** * Team Relationship * * @return BelongsToMany */ public function teams(): BelongsToMany { return $this->belongsToMany(Team::class); } /** * Project Relationship * * @return BelongsToMany */ public function projects(): BelongsToMany { return $this->belongsToMany(Project::class); } /** * Role Relationship * * @return BelongsToMany */ public function roles(): BelongsToMany { return $this->belongsToMany(Role::class, 'role_user'); }

Model Pasukan:

/** * User Relationship * * @return BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class); } /** * Project Relationship * * @return HasMany */ public function projects(): HasMany { return $this->hasMany(Project::class); }

Model Projek:

/** * Team Relation * * @return BelongsTo */ public function team(): BelongsTo { return $this->belongsTo(Team::class); } /** * User Relation * * @return BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class); }

Role Model:

/** * Permission Relation * * @return BelongsToMany */ public function permissions(): BelongsToMany { return $this->belongsToMany(Permission::class, 'permission_role'); } /** * User Relation * * @return BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class,'role_user'); }

Model Kebenaran:

Firsreeet

cipta peranan yang kita kehendaki. Contohnya:

Peranan 1: Nama = Pentadbir Super, Jenis = Pengguna

Peranan 2: Nama = Ketua Pasukan, Jenis = Pasukan

Peranan 3: Nama = Pembangun Projek, Jenis = Projek

Sekarang, kami akan mengharapkan peranan diberikan kepada pengguna kami. Peranan ini disimpan dalam jadual role_user.

Kemudian, berdasarkan peranan ini, anda boleh menentukan tanggungjawab setiap pengguna dalam setiap projek dan pasukan.


    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!