2009-11-01 2 views
0

나는 사용자와 연락처 모델에 대한 필요성을 가지고 있는데, 둘 다 이름, 성, 성 등과 같은 공통 속성을 가지고 있기 때문에 모델 개인을 만들고 해당 모델에서 사용자와 연락처를 상속받는 것이 합리적인 것처럼 보였다.단일 테이블 상속에 사용할 수 있습니까?

class Individual < ActiveRecord::Base 
end 

class User < Individual 
end 

class Contact < Individual 
end 

내 질문에 위의 설정을 사용하면 어떤 유형의 보안 문제가 발생합니까? 나는 authlogic을 사용하고 있으며 모든 필수 필드는 individual 테이블 내에 있습니다. 위의 방법은 쉬운 것처럼 보이지만 예기치 못한 보안 문제, 생각까지 열어 두려워합니다. 사용자가 로그인 할 수 있고 사용자가 많은 연락처를 가질 수 있음을 분명히하십시오.

답변

1

.... (하나의 하위 분류 된 모델에 있고 다른 모델에는 존재하지 않는 속성)

디자인 관점에서 볼 때 모델 관계를 통해 무엇을 달성 했습니까? 사용자와 연락처 간의 유일한 차이점은 사용자가 로그인 할 수 있고 수많은 연락처를 가질 수 있다면 개인에게 매핑 할 수 있고 (로그인 할 수있는) 많은 연락처를 가질 수 있고 로그인 자격 증명을 가질 수있는 개인이있을 수 있음

연락처는 has_and_belongs_to_many 또는 has_many를 규정하는 수많은 개인이 공유 할 수 있습니다.

hth

1

개념적으로 나는 그것들을 섞어서는 안된다. 각 모델의 근본적인 의도/기능은 실질적으로 다르기 때문에 모양이 비슷하다는 사실은 붉은 청어입니다.

잠재적으로 연락처를 인증하는 방법을 알아낼 수있는 문제가 발생할 수 있습니다. 사용자 이름을 연락처에 할당 할 가능성이 거의 없거나 비밀 해시 물건. AuthLogic에 버그가 있거나 누군가 당신의 설정을 해킹하기에 열심히 노력했지만 주입 공격으로부터 보호하는 것에 대해 항문이 아니 었 더라면 가능할 것입니다.

또한 앱이 크게 커질 경우 성능상의 이유로이 작업을 수행하지 않아도됩니다. 기본적으로, 나는이 두 모델을 가지고있는 나쁜 디자인이 상당히 피상적 인 이유 때문에 같은 테이블에 의존한다고 생각한다. 당신이 그 테이블에서 널 (null) 필드가되므로 STI 당신의 DBA를 화나게 할 수있다 그러나

, 그들은 직교으로 새로운 보안 문제에 당신을 열지 않습니다 STI를 사용

관련 문제