2013-09-22 3 views
0

나는 CRM이있는 곳과 비슷한 레일 앱을 만들려고한다. 사용자가 있고, 각각의 용도에는 많은 "클라이언트"가있다.레일에서 사용자가 아닌 사람을 대표하는 방법

처음에는 사용자 용 모델과 클라이언트 용 모델을 만들었지 만 단위 테스트를 작성하는 동안이 두 모델은 매우 유사하다는 것을 알았습니다.

내 질문은 : 원래 설계를 수정하여 모델을 개별적으로 수정 했습니까? 아니면 클라이언트가 시스템에 실제로 로그인 할 수있는 것은 아니지만 코드를 재사용 할 수있는 더 좋은 방법이 있습니까?

비슷한 질문을 보았지만 모두 다른 사용자 유형 및 역할에 적용됩니다. 이 경우 클라이언트는 모델로만 존재하며 실제로 사용자가 될 수 없습니다.

+1

'is_client'라는 컬럼을 갖는 것은 어떨까요? – bzupnick

+1

은 사용자와 클라이언트의 속성을 살펴볼 필요가 있습니다. 일반적으로 로그인 할 수있는 사용자는 암호, 마지막 로그인 등과 같은 속성을가집니다. 클라이언트가 실제 사용자가 아닌 경우 별도의 모델로 유지하는 것이 좋습니다. – tihom

+0

나는 팬이 아니지만 STI가 참여하는 경우 일 수 있습니까? – jamesc

답변

1

CRM 응용 프로그램 사용자 및 클라이언트에는 유사점과 차이점이 있습니다. (의 일부 세부 사항

사용자 및 클라이언트의

  • 모두 다양한 속성, 개인 정보에 관한 특히 공유하는 유사점 (이름, 연락처 정보, ... 등.)
  • 모두를 넣어 보자 대부분)은 시스템과 관련이있는 유일한 사람을 나타냅니다. 한 가지 명백한 예외는 시스템 사용자입니다.

차이점

  • 사용자가 시스템에 액세스한다. 이는 인증, 식별 및 권한 부여와 같은 보안 요구를 의미하며 차례로 일부 유효성 검사 (암호, 인증서 등)를 의미합니다.
  • CRM에서 클라이언트는 일반적으로 계정, 회사, 팀, 계정 관리자 및 기타 사용자는 사용자에게 제공하지 않습니다. 모델에 의해 처리되지 않지만 일부 필드에서 일부 모델 수준 유효성 검사를 수행 할 수도 있습니다.

따라서 두 개의 다른 모델에서 사용자와 클라이언트를 분리하거나이를 부모는 실제 필요에 따라 선택합니다. is_system_user 속성을 정의하는 동안 동일한 방식으로 클라이언트와 사용자를 처리하는 시스템 (예 : OpenERP 등)이 있습니다. 개인적으로 언급 한 차이점과 보안상의 이유로이 둘을 구분할 것입니다. 필요에 대해 잘 모르겠다면 DRY를하지 않는 것이 더 안전합니다.

+1

나는 똑같은 생각을했습니다. 두 개의 클래스를 갖는 데 중복되는 코드가 있지만, 유사성보다 훨씬 많은 차이점이 있다는 것을 감안할 때 아마도 의미가 있습니다. 나는이 경우 슈퍼 드라이를 시도하는 것이 과잉이라고 생각한다. – Shinigami

+0

공통점을 유지하는 부모로부터 하위 클래스로 분류하여 언제든지 DRY 기능을 유지할 수 있습니다. 특정 필요가 여전히 명확하지 않은 경우 임시로 희생하도록 선택할 수 있습니다. 애자일 개발 분야에서 일반적인 관행입니다. – Mustafa

0

사용자에게 유형을 제공하고 (예 : 유형 모델을 생성하고 has_many/belongs_to ActiveRecord 연관성을 설정) 어쩌면 사용자가 원하는 클라이언트가 될 수 있습니다.

그런 다음 유형에 따라 cancan (매우 멋진 보석)으로 사용자 권한을 관리 할 수 ​​있습니다.

관련 문제