2010-08-09 2 views
1

현재 직원, 관리자 엔티티가있는 프로젝트에서 작업하고 있습니다. 맨 처음에는 관리자가 회사의 직원이어야한다는 것을 당연시 했으므로 직원은 급여 시스템에서 동일한 직원 ID를 가진 사람과 같습니다. 이 가정을 바탕으로 Manager 클래스가 Employee 클래스를 확장하도록합니다.직원 및 관리자 관계 디자인에 대한 도움이 필요합니다.

나중에 고객이 일부 관리자가 회사의 직원이 아니지만 직원에게 직원에게보고하고 관리자가 시스템에 있어야한다고 말했습니다. 직원과 관리자 간의 상속 관계가 깨졌으며 이제 데이터베이스에 두 개의 테이블 (TAB_EMPLOYEE & TAB_MANAGER)이있는 두 개의 독립적 인 클래스가 있습니다.

관리자와 직원은 모두 사용자 이름과 암호로 시스템에 액세스 할 수 있습니다. User라는 클래스가 있으며 시스템은 관리자와 직원을위한 사용자 계정을 만드는 기능을 제공해야합니다. 관리자는 이전의 상황에서 관리자를 확장하고 두 개의 역할 (ROLE_EMPLOYEE, ROLE_MANAGER)을 사용자에게 할당 할 수 있습니다. 그러나 이제 사용자 계정이 이미 직원 용으로 생성 된 경우 (이 직원도 관리자이기 때문에 TAB_EMPLOYEE의 레코드 외에 TAB_MANAGER에 레코드가 있음) 어떻게 관리자로 사용할 사용자 계정을 만들 수 있습니까? ROLE_EMPLOYEE, ROLE_MANAGER 등 두 가지 역할을 할 수 있도록 ROLE_MANAGER를 기존 사용자에게 할당 할 수는 있지만 사용자가 로그인 한 후에는 사용자 또는 사용자 ID를 사용하여 참조 된 개체 (Employee 및/또는 관리자). 이를 위해 옵션을 사용해야합니다 :

옵션 1 : TAB_EMPLOYEE 및 TAB_MANAGER 테이블 모두에 사용자 ID 열을 추가하십시오. 옵션 2 : TAB_USER에 ObjectType, ObjectId 두 열을 추가하고 ObjectType에는 EMPLOYEE 또는 MANAGER가 포함되며 ObjectId에는 관련 ID가 포함됩니다.

어느 옵션이 더 좋을지 모르거나 다른 옵션이 있습니까?

답변

1

직원 테이블이 있으므로 테이블을 결합합니다. 그런 다음 관리자를 식별하기 위해 단항 관계 (자체 포인터)를 추가합니다. 마지막으로 내부 직원 (직원)을 식별하는 플래그를 추가합니다.

+0

답장을 보내 주셔서 감사합니다. N8g. 이 경우, 관리자에게 하위 클래스 Employee를 허용 할 수 있다고 생각합니다. 스프링 보안을 사용하려면 둘 다 클래스 AbstractUser를 서브 클래스로 만들거나 UserDetails 인터페이스를 구현할 수 있습니다. –

관련 문제