조직 구조
Doggy는 완전한 기업 조직 구조 관리 기능을 제공하며, Gedmo Nested Set 기반 트리 구조로 다중 회사, 다중 부서, 직위 편제를 지원합니다.
엔티티 모델
조직 구조 관련 엔티티는 src/Entity/Organization/에 있습니다:
| 엔티티 | 테이블명 | 설명 |
|---|---|---|
Corporation | — | 그룹/기업 그룹 |
Company | — | 회사 |
Department | org_department | 부서(Gedmo NestedTree) |
Position | — | 직위 |
PositionLevel | — | 직급 |
Employee | — | 직원(동시에 시스템 사용자) |
부서 관리
부서는 Gedmo NestedTree로 무제한 계층의 트리 구조를 구현합니다(src/Entity/Organization/Department.php):
php
#[ORM\Entity]
#[ORM\Table(name: 'org_department')]
#[Gedmo\Tree(type: 'nested')]
class Department implements GedmoNode
{
use CommonTrait;
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private $id;
#[ORM\Column(length: 100)]
private string $name;
#[ORM\Column(length: 50, nullable: true)]
private ?string $code = null;
#[Gedmo\TreeLeft]
#[ORM\Column(type: 'integer')]
private int $lft;
#[Gedmo\TreeLevel]
#[ORM\Column(type: 'integer')]
private int $lvl;
#[Gedmo\TreeRight]
#[ORM\Column(type: 'integer')]
private int $rgt;
#[Gedmo\TreeRoot]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $root = null;
#[Gedmo\TreeParent]
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
private ?self $parent = null;
#[ORM\OneToMany(targetEntity: self::class, mappedBy: 'parent')]
private Collection $children;
/** Many-to-Many with Employee for managers */
#[ORM\ManyToMany(targetEntity: Employee::class)]
private Collection $manager;
}부서 속성
| 필드 | 타입 | 설명 |
|---|---|---|
| name | string | 부서명 |
| code | string | 고유 코드 |
| parent | self (NestedTree) | 상위 부서 |
| manager | ManyToMany(Employee) | 부서 책임자 |
| company | ManyToOne(Company) | 소속 회사 |
| type | string | 부서 유형 |
| state | string | 활성화/비활성화 |
| sortOrder | integer | 정렬 가중치 |
관리 인터페이스
관리 백엔드 진입점: App\Controller\Admin\OrgController
- 트리 구조 시각화 표시(
templates/admin/org/department.html.twig) - 부서 편집(
departmentEdit.html.twig) - 부서 트리 노드 컴포넌트(
department_node.html.twig) - 부서 선택기(
department/singleSelect.html.twig)
직위 관리
직위는 조직 내 직무 정의로 부서와 연관되며 관리 진입점은 templates/admin/org/position/:
- 직위 목록(
index.html.twig) - 직위 생성/편집(
create_drawer.html.twig,edit_drawer.html.twig) - 직급 관리(
level_index.html.twig) - 직위 선택기(
position_modal.html.twig,position_multi_modal.html.twig)
회사 관리
다중 회사 구조 지원:
Corporation: 기업 그룹 최상위Company: 하위 회사,CommonTrait의corporation/company연관으로 연결- 관리 인터페이스:
corporation.html.twig,companyEdit.html.twig
캐시
조직 구조는 의미 기반 캐시 전략을 사용하며 Doctrine 이벤트 리스너로 캐시 일관성을 자동 유지합니다.