Die Beziehung zwischen drei Spalten in Laravel: Rollen, Teams und Projekte.
P粉645569197
2023-07-26 15:10:19
<p>In Laravel habe ich eine Beziehung zwischen Teams, Projekten, Benutzern, Rollen und Berechtigungen. <br /><br />Benutzer können mehrere Teams haben, ein Team kann mehrere Projekte haben und Benutzer können Benutzerrollen, Teamrollen und Projektrollen haben. Ich möchte wissen, wie ich die Berechtigungen eines Benutzers pro Projekt, pro Team und nur für den Benutzer erhalten kann. </p><p><br /></p>
<p><strong>Benutzertabelle</strong></p>
<ul>
<li>Id</li>
<li>Name</li>
<li>aktuelle_Projekt_ID</li>
<li>current_team_id</li>
<li>role_id</li>
<li>etc</li>
</ul>
<p><strong>Mannschaftstabelle</strong></p>
<ul>
<li>id</li>
<li>Name</li>
</ul>
<p><strong>Projekttabelle</strong></p>
<ul>
<li>id</li>
<li>Name</li>
<li>Beschreibung</li>
</ul>
<p><strong>Rollentabelle</strong></p>
<ul>
<li>id</li>
<li>Name</li>
<li>type(Benutzer,Projekt,Team)</li>
</ul>
<p><strong>Berechtigungstabelle</strong></p>
<ul>
<li>id</li>
<li>Name</li>
</ul>
<p><strong>Rollenberechtigungstabelle</strong></p>
<ul>
<li>permission_id</li>
<li>role_id</li>
</ul>
<p><strong>project_user-Tabelle</strong></p>
<ul>
<li>Projekt_ID</li>
<li>user_id</li>
<li>role_id</li>
</ul>
<p><strong>team_user-Tabelle</strong></p>
<ul>
<li>team_id</li>
<li>user_id</li>
<li>role_id</li>
</ul>
<p>Ein Benutzer kann nur eine Rolle in einem Projekt, nur eine Rolle in einem Team haben und ein Benutzer selbst kann nur eine Rolle haben, die ein Administrator oder ein normaler Benutzer sein kann.</p><p>Ich versuche, die Projektrolle des Benutzers zu ermitteln, und habe den Code des Teams übersprungen, da ich denke, dass er dem Code des Projekts sehr ähnlich ist. </p><p><br /></p>
<pre class="brush:php;toolbar:false;">class Benutzer erweitert Authenticatable
{
öffentliche Funktion projectRole()
{
//Ich kann die Möglichkeit, project_id wie in where einzufügen, nicht finden, da current_project_id beim Booten null ist
return $this->belongsToMany(Role::class, 'project_user')->where('project_id', '=', $this->current_project_id)->first();
}
öffentliche Funktion projectPermissions()
{
return $this->projectRole()->permissions;
}
öffentliche Funktionsberechtigungen()
{
//Ich kann nicht die Möglichkeit finden, alle Teamberechtigungen, Projektberechtigungen und Benutzerberechtigungen zu erhalten
}
öffentliche Funktion role() : BelongsTo
{
//Kann nur die Rolle „Benutzer“, „Administrator“ oder „Support“ sein
return $this->belongsTo(Role::class);
}
öffentliche Funktion userPermissions()
{
return $this->role->permissions;
}
}
Die Klassenrolle erweitert das Modell
{
öffentliche Funktionsberechtigungen()
{
return $this->belongsToMany(Permission::class);
}
}</pre>
<p>Ich möchte Berechtigungen als Schwelle für die Übergabe an das Inertia-Frontend verwenden. Ich versuche so etwas. </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->userPermissions()->contains($permission);
});</pre>
<p><br /></p>
根据您的解释,我按照以下方式进行操作:
表格 *************
project_user 表:
permission_role 表:
role_user 表:
Models *************
用户模型:
团队模型:
项目模型:
角色模型:
权限模型:
首先,我们创建我们期望的角色。例如:
角色1:名称=超级管理员,类型=用户
角色2:名称=团队主管,类型=团队
角色3:名称=项目开发者,类型=项目
现在,我们将期望的角色分配给我们的用户。这些角色存储在role_user表中。
然后,根据这些角色,您可以确定每个用户在每个项目和团队中的职责。