Laravel의 세 열(역할, 팀, 프로젝트) 사이의 관계.
P粉645569197
P粉645569197 2023-07-26 15:10:19
0
1
538
<p>Laravel에서는 팀, 프로젝트, 사용자, 역할 및 권한 간의 관계가 있습니다. <br /><br />사용자는 여러 팀을 가질 수 있고, 팀은 여러 프로젝트를 가질 수 있으며, 사용자는 사용자 역할, 팀 역할 및 프로젝트 역할을 가질 수 있습니다. 프로젝트별, 팀별, 해당 사용자에 대해서만 사용자 권한을 얻는 방법을 알고 싶습니다.


<p><strong>사용자 테이블</strong></p>
  • ID
  • 이름
  • 현재_프로젝트_ID
  • current_team_id
  • role_id
  • </ul> <p><strong>팀 테이블</strong></p>
    • ID
    • 이름
    • </ul> <p><strong>프로젝트 테이블</strong></p>
      • ID
      • 이름
      • 설명
      • </ul> <p><strong>역할 테이블</strong></p>
        • ID
        • 이름
        • 유형(사용자,프로젝트,팀)
        • </ul> <p><strong>권한 테이블</strong></p>
          • ID
          • 이름
          • </ul> <p><strong>Role_permission 테이블</strong></p>
            • permission_id
            • role_id
            • </ul> <p><strong>project_user 테이블</strong></p>
              • project_id
              • user_id
              • role_id
              • </ul> <p><strong>team_user 테이블</strong></p>
                • 팀_ID
                • user_id
                • role_id
                • </ul> <p>사용자는 프로젝트에서 하나의 역할, 팀에서 하나의 역할만 가질 수 있으며, 사용자 자신도 관리자 또는 일반 사용자 등 하나의 역할만 가질 수 있습니다.


                  <pre class="brush:php;toolbar:false;">class 사용자 확장 인증 가능 { 공개 함수 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->역할->권한을 반환합니다. } } 클래스 역할 확장 모델 { 공개 함수 권한() { 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->teamPermissions($user->currentTeam)->contains($permission) || 사용자->팀권한($user->현재팀)->포함($permission) || $user->userPermissions()->contains($permission); });</pre> <p><br /></p>
P粉645569197
P粉645569197

모든 응답(1)
P粉471207302

귀하의 설명에 따라 다음과 같이 했습니다.

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

project_user 테이블:

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

permission_role 테이블:

Schema::create('permission_role', function (Blueprint $table) {
    $table->unsignedBigInteger('permission_id');
    $table->unsignedBigInteger('role_id');
});

role_user 테이블:

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

모델 *************

사용자 모델:

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

팀 모델:

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

프로젝트 모델:

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

역할 모델:

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

권한 모델:

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

먼저, we 원하는 역할을 만듭니다. 예:

역할 1: 이름 = 최고 관리자, 유형 = 사용자

역할 2: 이름 = 팀 리더, 유형 = 팀

역할 3: 이름 = 프로젝트 개발자, 유형 = 프로젝트

이제 역할을 기대합니다. 우리 사용자에게 할당되었습니다. 이러한 역할은 role_user 테이블에 저장됩니다.

그런 다음 이러한 역할을 기반으로 각 프로젝트 및 팀 내에서 각 사용자의 책임을 결정할 수 있습니다.


최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿