2009-06-29 12 views
2

나는 사진, 댓글, 투표 등을 게시하고 다른 많은 작업을 할 수있는 갤러리를 개발 중입니다.사용자가 계정을 삭제할 수 있도록 허용

이제 사용자가 원하는 경우 모든 데이터를 수신 거부하고 제거 할 수 있도록하는 것이 맞다고 생각합니다. 그러나 응용 프로그램을 중단시킬 위험이 있으므로 (예 : 댓글에 많은 답글이있을 때 어떻게해야합니까? 다른 사용자가 많은 수정을 한 페이지로 무엇을해야합니까?).

사진을 쉽게 제거 할 수 있지만, 다른 데이터 (예 : 주석, 수정 ...) 내가이 세 가지 가능성이 있다고 생각 :

  • 하면 관리자에게 할당
  • 사용자에 할당 (예 : 사용자 ID) 및 사용자 이름 만 바꿉니다 (예 : "removed-user-24"와 같은 새 사용자 이름 및 존재하지 않는 전자 메일 (예 : "제거 된 사용자")
  • ) [email protected] "

사용자가 계정을 삭제할 수 있도록 허용 할 때 따라야 할 권장 사항은 무엇입니까? 어떻게 구현합니까 (특히 레일즈에서)?

답변

1

시스템에서 이상적으로 데이터를 "하드 삭제"하고 싶지는 않습니다. 내가 아는 가장 좋은 방법은 우리가 과거에 구현 한 "소프트 삭제"입니다. 모든 데이터 테이블에서 행이 활성 상태인지 여부를 나타내는 상태 열을 이상적으로 참조하십시오. 생성 된 행은 기본적으로 "활성"입니다. 그러나 항목이 삭제됨에 따라; 그들은 비활성 상태가됩니다.

"활성 레코드"에 대해서만 화면 필터 결과에 데이터를 표시하는 모든 선택 쿼리. 이렇게하면 다음과 같은 이점을 얻을 수 있습니다. 1. 데이터 복구가 가능합니다. 2. 예약 된 작업을 데이터베이스 수준에서 수행 할 수 있습니다.이 작업은 한 번에 한 번에 하드 삭제를 처리 할 수 ​​있습니다. 정말 필요한 경우. (SQL 프로 시저 또는 그와 비슷 함) 3. 삭제 표시를 원하는 계정, 항목 등을 결정할 수있는 관리 화면을 가질 수 있습니다. 4. 계정의 질적 비활성화는 동일한 계정으로 구현할 수도 있습니다 해결책.

내가 작업 한 환경에서 엄격한 삭제는 엄격한 아니오입니다. Infact 감사는 삭제를 위해 유지 관리됩니다. 그러나 응용 프로그램이 실제로 작은 경우; 그것은 최대 사용자가 될 것입니다.

DB 수준에서 정기적 인 정리로 "가상 삭제"또는 "소프트 삭제"를 제안합니다. 보다 신속하고 효율적으로 청소할 수 있습니다.

+1

개인 정보 보호는 어떻게됩니까? 사용자는 자신의 이름, 전자 메일 등을 삭제하지 않았다고 불평 할 수 있습니다 (아무도 그 정보를 보지 못할지라도). 이 일에 신경 쓰지 않을 것 같습니까? (나는 너무 정확하게 알고있다.)) – collimarco

+1

나는 그 시나리오가 발생할 것을 안다. 그러나 여기에 몇 가지 있습니다. 1. 사용자는 주로 데이터가 사용자에게 다시 표시되지 않으며 어떤 방식으로도 사용되지 않는다는 점에주의해야합니다. 화면에 아무데도 표시되지 않으므로 휴면 상태, 비활성 상태 및 사용할 수 없으므로 어쨌든 표시되지 않습니다. Gmail이 이메일을 열심히 삭제한다고 생각하십니까? 그들은하지 않습니다. 법원 판결에서 여러 번 사용 된 비활성 사본이 항상 있습니다. 2. 데이터를 실제로 삭제하려면, 이미 효율적이고 유능한 방식으로 처리 할 수있는 하드 삭제 PL/SQL 프로 시저를 제안했습니다. – Priyank

+0

시스템에 즉시로드하지 않고 해당 절차를 주기적으로 실행할 수 있습니다. 이러한 절차 나 스크립트는 트래픽이 적을 때 유용합니다. – Priyank

2

일반적인 작업은 데이터베이스에서 삭제하고 부울 플래그 필드를 추가 한 다음 올바른 사용자에게는 true이고 유효하지 않은 사용자에게는 false가되도록하는 것입니다. 깃발을 걸러 내기위한 코드를 추가해야합니다. 또한 사용자가 할 수있는 모든 관련 데이터를 제거해야합니다. 이 플래그의 주된 목적은 링크를 손상되지 않게 유지하는 것입니다. 이는 사용자 데이터의 이름을 바꾸는 변형이지만 플래그를보다 쉽게 ​​확인할 수 있습니다.

+0

좋은 아이디어! 사용자 이름을 삭제해야한다고 생각하십니까? – collimarco

+1

이것은 사용 방법에 따라 다릅니다. 표시되는 경우 사용자가 자신의 데이터가 아직 보이지 않는다고 생각할 수 있도록 데이터를 표시 할 수 있습니다 (표시 할 때도 가능). 사용자 이름이 고유하면 충돌을 피하기 위해 사용자 이름을 변경해야합니다. –

1

나는 일반적으로 아무것도 삭제하지 않고 상태를 사용하여 레코드를 삭제/게시 취소로 표시하도록 선택합니다 (AASM은 상태 시스템으로 작동 함).

이벤트를 사용하여 속성을 업데이트하고 전자 메일 등을 하나의 파울 스풀로 보낼 수 있으므로 플래그를 사용하는 것보다 상태와 이벤트를 선호합니다. 그런 다음 상태를 확인하여 나중에 수행 할 작업을 결정하십시오.

HTH.

5

나는 일반적으로 사용자에게 활성 플래그를 지정하고 사용자가 삭제 될 때 단순히 활성을 false로 설정하여 이러한 유형의 문제를 해결했습니다. 그렇게하면 사용자가 "삭제"된 경우에도 시스템 전체에서 참조 무결성이 유지됩니다. 비즈니스 계층에서 나는 항상 사용자가 작업 수행을 허용하기 전에 활성 상태인지 확인합니다. 또한 데이터를 검색 할 때 비활성 사용자를 필터링합니다.

+2

예, 이것은 간단한 접근 방법입니다. 하지만 프라이버시는 어떨까요? 사용자는 자신의 이름, 전자 메일 등을 삭제하지 않았다고 불평 할 수 있습니다 (아무도 그 정보를 보지 못할지라도). – collimarco

+1

이메일과 모든 연락처 정보를 확실히 삭제할 수 있습니다. 참조는 중요한 것입니다. 또한 올바른 작업을 수행하면 데이터가 외부보기에서 완전히 숨겨집니다. –

+0

사용자로부터 특정 데이터를 모두 제거하고 사용자가 게시 한 일부 콘텐츠를 유지하려는 경우 간단한 getter 메서드를 사용하여 "삭제 된 사용자"를 렌더링하고 콘텐츠를 계속 표시 할 수도 있습니다 (TOS에서 정상인 경우).) –

1

사용자 기록뿐만 아니라 해당 사용자와 관련된 모든 정보에 대해 사용자가 구독 취소 한 날짜/시간이 포함 된 삭제 날짜 입력란을 넣는 것이 좋습니다. 응용 프로그램은 아무것도 표시하기 전에 필드를 확인해야합니다. 그런 다음 삭제 날짜 이후 30 일 (선택한 시간)의 모든 레코드에 대해 하드 삭제를 실행할 수 있습니다. 이렇게하면 정보가 표시되지 않고 (아마 몇 군데에서 앱을 업데이트해야 할 것입니다), 사용자가 실수로 다시 구독 할 수있는 시간과 예전 데이터를 삭제하는 예정된 프로세스가 허용됩니다. 회원에 관한 모든 정보와 회원 또는 이전에 게시 한 데이터 (사진 등)에 관한 모든 의견을 삭제합니다.

관련 문제