2011-12-03 2 views
0

응용 프로그램은 Ruby on Rails로 작성되었지만 현재 직면 한 문제는 언어 관련 문제보다 더 중요한 문제입니다.사용자 인증 디자인은 사용자입니까?

시스템은 레지스트리를 유지 관리하기 위해 많은 사용자에게 서비스를 제공합니다. 그래서 그것은 사람과 사물을 관련시킵니다. 이 모델에는 소유자를 나타내는 Person이라는 모델이 있으며 레지스트리를 관리하는 사용자를 나타내는 User라는 모델이 있습니다.

이제 사람들이 로그인하여 원래 설계에 필요하지 않은 개인 세부 사항을 변경할 수있는 새로운 요구 사항이 생겼습니다.

질문은 어떻게이 새로운 요구 사항을 허용하도록 응용 프로그램을 리팩터링합니까?

하나의 쉬운 해결책은 로그인 자격 증명을 요청하고 사용자를 개인 엔터티에 연결하는 각 사용자에 대해 사용자를 생성하는 것입니다.하지만 이름, 성 등과 같은 일부 필드는 두 클래스 모두에 있으며 특히 DRY가 아닙니다. 정확히 사람들이 바꿀 수 있습니다. 게다가 사용자와 사람은 별도의 테이블에 저장됩니다.

내가 생각한 또 다른 가능성은 하나를 다른 것으로 확장하는 것이지만 분리 된 테이블에 데이터를 넣으면 조금 더러워집니다. 또한 로직 확장은 사용자가 될 것입니다 < - 사용자로서 사람은 (일반적으로) 사람이지만 구현에 대해 생각합니다 사람 < - 사용자가 훨씬 쉽습니다.

은 마지막 옵션 사용자를 스크랩하고 해당 단지에 로그인 빈 필드에 로그인 할 자들과 반 빈 로그온 필드를 떠나 사람에 로그인 자격 증명을 이동할 수 있습니다.

당신은 생각할 수 더 나은 해결책?

답변

1

응용 프로그램을 상향식으로 작성하고 해당 설정과 현재 설정 사이에 적절한 절충안을 작성하는 방법을 생각해 보면 이상적으로 어떻게 작동하는지 생각할 수 있습니다. 다음은 일반적인 입력입니다.

인증과 관련하여 인증 할 수있는 "ID"가 필요합니다. 예 : 전자 메일 주소 및 관련 암호, 전자 메일 확인.

신원 정보는 잠재적으로 여러 '역할'에 연결될 수 있으며 신원 정보로 인증 된 사람은 수행 할 역할을 선택할 수 있습니다. "저는 이제 관리자입니다"대 "나는 이제 일반 사이트 사용자"입니다.이 역할은 로그인 한 ID에 대한 사용자의 현재 권한을 정의합니다. 또는 그 정도의 복잡성이 필요하지 않은 경우 신원은 (단일) 역할이라고 말할 수 있습니다.

가능한 "권한"과 사용자가 수행하는 역할 사이에 약간의 추적이 필요합니다. 예 : 가장 단순한 설정은 Identity 또는 역할 일 수 있습니다. 일부 부울 can_edit_profile 또는 can_modify_registry 속성이 있습니다.

사용자가 특정 권한이 필요한 작업을 수행하려고 할 때마다 사용자가 수행중인 역할에 대해 설정된 해당 권한을 조회하여 사용자가 진행할 수 있는지 여부를 확인하기 만하면됩니다.

응용 프로그램의 경우 사용자 개체에 대해 'can_change_registry'속성을 추가하고 사이트의 해당 부분에 액세스하는 모든 코드에 대해 해당 속성이 True인지 확인해야 할 수 있습니다.