cari

Rumah  >  Soal Jawab  >  teks badan

Hubungan antara tiga lajur dalam Laravel: Peranan, Pasukan dan Projek.

<p>Dalam Laravel, saya mempunyai hubungan antara pasukan, projek, pengguna, peranan dan kebenaran. <br /><br />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. </p><p><br /></p> <p><strong>Jadual pengguna</strong></p> <ul> <li>Id</li> <li>nama</li> <li>id_projek semasa</li> <li>current_team_id</li> <li>role_id</li> <li>etc</li> </ul> <p><strong>Meja pasukan</strong></p> <ul> <li>id</li> <li>nama</li> </ul> <p><strong>Jadual projek</strong></p> <ul> <li>id</li> <li>nama</li> <li>penerangan</li> </ul> <p><strong>Jadual peranan</strong></p> <ul> <li>id</li> <li>nama</li> <li>jenis(pengguna, projek, pasukan)</li> </ul> <p><strong>Jadual kebenaran</strong></p> <ul> <li>id</li> <li>nama</li> </ul> <p><strong>Jadual kebenaran_peranan</strong></p> <ul> <li>id_izin</li> <li>role_id</li> </ul> <p><strong>jadual pengguna_projek</strong></p> <ul> <li>project_id</li> <li>user_id</li> <li>role_id</li> </ul> <p><strong>jadual pengguna_pasukan</strong></p> <ul> <li>team_id</li> <li>user_id</li> <li>role_id</li> </ul> <p>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.

</p><p><br /></p> <pre class="brush:php;toolbar:false;">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); } }</pre> <p>Saya mahu menggunakan kebenaran sebagai ambang untuk lulus ke bahagian hadapan Inersia, saya sedang mencuba sesuatu seperti ini. </p> <pre class="brush:php;toolbar:false;">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); });</pre> <p><br /></p>
P粉645569197P粉645569197485 hari yang lalu522

membalas semua(1)saya akan balas

  • P粉471207302

    P粉4712073022023-07-27 13:42:45

    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.


    balas
    0
  • Batalbalas