La relation entre trois colonnes dans Laravel : Rôles, Équipes et Projets.
P粉645569197
2023-07-26 15:10:19
<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>
Sur la base de votre explication, je l'ai fait comme suit :
Table******************
table project_user :
permission_role table :
role_user table :
Modèles *************
Modèle d'utilisateur :
Modèle d'équipe :
Modèle de projet :
Modèle de rôle :
Modèle d'autorisations :
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.