Хорошо использовать для наследования одной таблицы? - PullRequest
0 голосов
/ 01 ноября 2009

Мне нужен пользователь и модель контактов, оба имеют общие атрибуты, такие как имя, фамилия, пол и т. Д. Таким образом, представляется разумным создать отдельного человека модели, а пользователь и контакты наследуются от этой модели.

class Individual  < ActiveRecord::Base
end

class User < Individual
end

class Contact < Individual
end

У меня вопрос: какие проблемы с безопасностью я бы открыл, имея вышеуказанную настройку? Я использую authlogic, и все его обязательные поля находятся в таблице лиц. Вышеупомянутый метод кажется простым, и все же я волнуюсь, что могу открыть себя для непредвиденных проблем безопасности, какие-нибудь мысли? Просто чтобы быть понятным, пользователь может войти в систему, и у пользователя будет много контактов.

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

Использование STI не открывает новых проблем с безопасностью, поскольку они ортогональны.

Однако STI может расстроить ваших администраторов баз данных, поскольку у вас будут нулевые поля в этой таблице. (атрибуты, которые присутствуют в одной подклассовой модели, а не в другой)

С точки зрения дизайна, чего вы добиваетесь, имея такие модельные отношения. Если единственное различие между пользователем и контактом состоит в том, что пользователь может войти в систему и иметь множество контактов, то у вас может быть просто лицо, которое может иметь много контактов (которые сопоставляются с физическими лицами) и может иметь учетные данные для входа в систему

Помните, что контакт может быть разделен между несколькими лицами, для которых предусмотрено значение has_and_belongs_to_many или has_many: через

НТН

1 голос
/ 01 ноября 2009

Концептуально я бы не стал их смешивать. Основное назначение / функция каждой модели существенно различается, поэтому тот факт, что они похожи по форме, - красная сельдь.

Потенциально вы столкнетесь с проблемой, когда кто-то может найти способ аутентификации в контакте, хотя это не представляется вероятным, учитывая маловероятность того, что вы назначите имя пользователя для контакта или секретный хэш , Но это было бы возможно, если в AuthLogic есть ошибка, или если кто-то изо всех сил попытался взломать вашу настройку, и вы не были заинтересованы в защите от атак с использованием инъекций.

Кроме того, существуют причины, по которым производительность не следует делать, если ваше приложение сильно растет. Вообще-то, я считаю плохим дизайном, когда эти две модели полагаются на одну и ту же таблицу по довольно поверхностным причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...