<p>Laravel では、チーム、プロジェクト、ユーザー、ロール、権限の間に関係があります。 <br /><br />ユーザーは複数のチームを持つことができ、1 つのチームは複数のプロジェクトを持つことができ、ユーザーはユーザー ロール、チーム ロール、およびプロジェクト ロールを持つことができます。プロジェクトごと、チームごと、そしてそのユーザーに対してのみユーザーの権限を取得する方法を知りたいです。 </p>
<p>
ユーザー テーブル</strong></p>
<li>ID</li>
<li>名前</li>
<li>current_project_id</li>
<li>現在のチーム ID</li>
<li>role_id</li>
<li>etc</li>
</ul>
<p><strong>Teams テーブル</strong></p>
<li>id</li>
<li>名前</li>
</ul>
<p><strong>プロジェクト表</strong></p>
<li>id</li>
<li>名前</li>
<li>説明</li>
</ul>
<p>役割テーブル</strong></p>
<li>id</li>
<li>名前</li>
<li>type(ユーザー,プロジェクト,チーム)</li>
</ul>
<p>権限テーブル</strong></p>
<li>id</li>
<li>名前</li>
</ul>
<p><strong>Role_permission テーブル</strong></p>
<li>permission_id</li>
<li>role_id</li>
</ul>
<p><strong>project_user テーブル</strong></p>
<li>プロジェクト ID</li>
<li>user_id</li>
<li>role_id</li>
</ul>
<p><strong>team_user テーブル</strong></p>
<li>チームID</li>
<li>user_id</li>
<li>role_id</li>
</ul>
<p>ユーザーはプロジェクト内で 1 つの役割のみ、チーム内で 1 つの役割のみを持つことができ、ユーザー自身も 1 つの役割 (管理者または一般ユーザー) のみを持つことができます。 </p>
<pre class="brush:php;toolbar:false;">class User extends Authenticatable
{
パブリック関数 projectRole()
{
//ブート時に current_project_id が null なので、where のように project_id を挿入する方法が見つかりません
return $this->belongsToMany(Role::class, 'project_user')->where('project_id', '=', $this->current_project_id)->first();
}
パブリック関数 projectPermissions()
{
$this->projectRole()->権限を返します。
}
パブリック関数のアクセス許可()
{
//すべてのチーム権限、プロジェクト権限、ユーザー権限を取得する方法が見つかりません
}
パブリック関数 role() : BelongsTo
{
//ユーザーロールは管理者またはサポートのみ可能
return $this->belongsTo(Role::class);
}
パブリック関数 userPermissions()
{
$this->role->権限を返します。
}
}
クラスの役割はモデルを拡張します
{
パブリック関数のアクセス許可()
{
return $this->belongsToMany(Permission::class);
}
}</pre>
<p>許可を Inertia フロントエンドに渡すしきい値として使用したいので、次のようなことを試しています。 </p>
<pre class="brush:php;toolbar:false;">Gate::before(function ($user, $permission) {
return $user->projectPermissions($user->currentProject)->contains($permission) || $user->gt;teamPermissions($user->currentTeam)->contains($permission) || $ user->teamPermissions($user->currentTeam)->contains($permission)
|| $user->userPermissions()->contains($permission);
});</pre>
<p><br /></p>
あなたの説明に基づいて、次のようにしました:
Table******************
project_user table:
permission_role テーブル:
role_user テーブル:
モデル *************
ユーザー モデル:
チーム モデル:
プロジェクト モデル:
ロール モデル:
権限モデル:
まず、私たちが期待する役割。例:
ロール 1: 名前 = スーパー管理者、タイプ = ユーザー
ロール 2: 名前 = チーム ディレクター、タイプ = チーム
ロール 3: 名前 = プロジェクト開発user, type=project
次に、目的のロールをユーザーに割り当てます。これらのロールは、role_user テーブルに保存されます。
次に、これらの役割に基づいて、各プロジェクトおよびチーム内での各ユーザーの責任を決定できます。