본문으로 건너뛰기

Team 패널 (Level 5)

📝 초안 (Draft)

이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.

Group Leader 전용 패널 기능을 설명합니다.

개요

Team 패널은 **Level 5 (Group Leader)**을 위한 관리 패널입니다. 팀 내의 멤버를 관리하고, 업무를 할당하며, 팀 성과를 추적합니다.

접근 권한

항목
권한 레벨Level 5 (Group Leader)
기본 경로/team
환경변수PANEL_PATH_TEAM
접근 가능자Level 0, 1, 2, 3, 4, 5

담당 범위

Group Leader는 자신의 팀 내에서만 권한을 가집니다:

Team A (담당)
├── Member 1 ✅ 관리 가능
├── Member 2 ✅ 관리 가능
├── Member 3 ✅ 관리 가능
└── 팀 설정 ✅ 조회 가능

Team B (타 팀)
└── 모든 데이터 ❌ 접근 불가

주요 기능

1. 멤버 관리

팀 내의 Level 6 멤버를 관리합니다.

MemberResource 주요 필드:

필드설명예시
name이름"홍길동"
email이메일"hong@example.com"
password비밀번호(암호화됨)
organization소속 조직"개발부"
leader담당 리더"김팀장"

테이블 컬럼:

  • ID
  • 이름 (검색 가능)
  • 이메일 (검색 가능)
  • 소속 조직
  • 담당 리더
  • 생성일

2. 멤버 생성

새로운 팀원을 **Level 6 (Member)**로 생성합니다.

// MemberResource.php - 자동 설정값
Forms\Components\Hidden::make('level')
->default(UserLevel::MEMBER->value),

Forms\Components\Hidden::make('tenant_id')
->default(fn () => auth()->user()?->tenant_id),

Forms\Components\Hidden::make('organization_id')
->default(fn () => auth()->user()?->organization_id),

Forms\Components\Hidden::make('parent_id')
->default(fn () => auth()->id()), // 현재 리더가 상위자

3. Impersonate 기능

Group Leader는 팀원으로 전환하여 팀원 시점에서 시스템을 확인할 수 있습니다.

// MemberResource.php
->recordActions([
ImpersonateAction::make(), // 멤버로 전환
EditAction::make(),
DeleteAction::make(),
])

사용 사례:

  • 팀원이 겪는 문제 재현
  • 팀원 화면 확인
  • 교육/온보딩 지원

4. 팀 통계

팀의 현황 및 성과를 조회합니다.

지표설명
팀원 수현재 팀 인원
활동 현황최근 로그인/활동
업무 진행률할당된 업무 완료율

파일 구조

app/Filament/Team/
├── Resources/
│ └── MemberResource.php # 멤버 관리
│ └── Pages/
│ ├── ListMembers.php
│ ├── CreateMember.php
│ └── EditMember.php

├── Pages/
│ └── Dashboard.php

└── Widgets/
├── TeamStatsWidget.php
└── MemberActivityWidget.php

PanelProvider 설정

// app/Providers/Filament/TeamPanelProvider.php

class TeamPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->id('team')
->path(env('PANEL_PATH_TEAM', 'team'))
->login()
->colors(['primary' => Color::Green])
->discoverResources(
in: app_path('Filament/Team/Resources'),
for: 'App\Filament\Team\Resources'
)
->authMiddleware([
Authenticate::class,
EnsureUserLevel::class.':0,1,2,3,4,5', // Level 0-5 접근
]);
}
}

데이터 필터링

HasLevelBasedAuthorization Trait

MemberResource는 Level 기반 권한 검사를 사용합니다.

class MemberResource extends Resource
{
use HasLevelBasedAuthorization;

// 이 Resource가 관리하는 대상: Level 6
protected static function getTargetLevel(): int
{
return UserLevel::MEMBER->value;
}
}

자동 필터링

팀 리더는 자신의 하위 멤버만 조회합니다:

public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->where('parent_id', auth()->id())
->where('level', UserLevel::MEMBER->value);
}

관련 문서