recherche

Maison  >  Questions et réponses  >  le corps du texte

La relation entre trois colonnes dans Laravel : Rôles, Équipes et Projets.

<p>Dans Laravel, j'ai une relation entre les équipes, les projets, les utilisateurs, les rôles et les autorisations. <br /><br />Les utilisateurs peuvent avoir plusieurs équipes, une équipe peut avoir plusieurs projets et les utilisateurs peuvent avoir des rôles d'utilisateur, des rôles d'équipe et des rôles de projet. Je veux savoir comment obtenir les autorisations d'un utilisateur par projet, par équipe et uniquement pour l'utilisateur. </p><p><br /></p> <p><strong>Tableau utilisateur</strong></p> <ul> <li>Id</li> <li>nom</li> <li>current_project_id</li> <li>current_team_id</li> <li>role_id</li> <li>etc</li> </ul> <p><strong>Tableau des équipes</strong></p> <ul> <li>id</li> <li>nom</li> </ul> <p><strong>Tableau des projets</strong></p> <ul> <li>id</li> <li>nom</li> <li>description</li> </ul> <p><strong>Tableau des rôles</strong></p> <ul> <li>id</li> <li>nom</li> <li>type(utilisateur,projet,équipe)</li> </ul> <p><strong>Tableau des autorisations</strong></p> <ul> <li>id</li> <li>nom</li> </ul> <p><strong>Tableau des autorisations_rôles</strong></p> <ul> <li>permission_id</li> <li>role_id</li> </ul> <p><strong>table project_user</strong></p> <ul> <li>project_id</li> <li>id_utilisateur</li> <li>role_id</li> </ul> <p><strong>table team_user</strong></p> <ul> <li>team_id</li> <li>id_utilisateur</li> <li>role_id</li> </ul> <p>Un utilisateur ne peut avoir qu'un seul rôle dans un projet, un seul rôle dans une équipe, et un utilisateur lui-même ne peut avoir qu'un seul rôle, qui peut être un administrateur ou un utilisateur ordinaire.</p><p>J'essaie de trouver un moyen d'obtenir le rôle de l'utilisateur dans le projet et j'ai ignoré le code de l'équipe car je pense qu'il est très similaire au code du projet. </p><p><br /></p> <pre class="brush:php;toolbar:false;">class L'utilisateur étend l'authentification { fonction publique projectRole() { //Je ne trouve pas le moyen d'insérer project_id comme dans où, car current_project_id est nul au démarrage return $this->belongsToMany(Role::class, 'project_user')->where('project_id', '=', $this->current_project_id)->first(); } fonction publique projectPermissions() { return $this->projectRole()->permissions; } autorisations de fonction publique() { //Je ne trouve pas le moyen d'obtenir toutes les autorisations de l'équipe, les autorisations du projet et les autorisations des utilisateurs } rôle de fonction publique () : appartient à { //Peut uniquement être un rôle d'utilisateur, d'administrateur ou de support. return $this->belongsTo(Role::class); } fonction publique userPermissions() { renvoyer $this->role->permissions ; } } Le rôle de classe étend le modèle { autorisations de fonction publique() { return $this->belongsToMany(Permission::class); } }</pré> <p>Je souhaite utiliser les autorisations comme seuil pour passer à l'interface Inertia, j'essaie quelque chose comme ça. </p> <pre class="brush:php;toolbar:false;">Gate::before(function ($user, $permission) { return $user->projectPermissions($user->currentProject)->contains($permission) || $user->teamPermissions($user->currentTeam)->contains($permission) || user->teamPermissions($user->currentTeam)->contains($permission) || $user->userPermissions()->contient($permission); });</pré> <p><br /></p>
P粉645569197P粉645569197568 Il y a quelques jours576

répondre à tous(1)je répondrai

  • P粉471207302

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

    Sur la base de votre explication, je l'ai fait comme suit :

    Table******************

    table project_user :

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

    permission_role table :

    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');
    });

    Modèles *************

    Modèle d'utilisateur :

    /**
     * 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');
    }

    Modèle d'équipe :

    /**
     * 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);
    }

    Modèle de projet :

    /**
     * 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);
    }

    Modèle de rôle :

    /**
     * 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');
    }

    Modèle d'autorisations :

    /**
     * Role Relation
     *
     * @return BelongsToMany
     */
    public function roles(): BelongsToMany
    {
        return $this->belongsToMany(Role::class, 'permission_role');
    }

    Tout d'abord, nous créer notre rôle souhaité. Par exemple :

    Rôle 1 : Nom = Super Administrateur, Type = Utilisateur

    Rôle 2 : Nom = Chef d'équipe, Type = Équipe

    Rôle 3 : Nom = Développeur de projet, Type = Projet

    Maintenant, nous nous attendrons à des rôles attribués à nos utilisateurs. Ces rôles sont stockés dans la table role_user.

    Ensuite, en fonction de ces rôles, vous pouvez déterminer les responsabilités de chaque utilisateur au sein de chaque projet et équipe.


    répondre
    0
  • Annulerrépondre