W obu przypadkach baza danych. Będziesz używać tych samych struktur dla wielu osób/produktów, więc ma to sens. Pozwala także na zmianę rzeczy bez restartowania serwera.
Zrobiłem to w ten sposób w przeszłości: Dla ustawień specyficznych dla użytkownika, stworzyłem model/tabelę UserSettings, która ma związek jeden do jednego z relacją z użytkownikiem. Rozumowanie tego jest takie, że większość moich operacji z udziałem użytkowników nie wymaga załadowania tych ustawień, więc są one uwzględniane tylko w przypadku obciążeń użytkownika z bazy danych, kiedy ich potrzebuję.
Kiedy to zrobię, zazwyczaj zgrupuję nazwy kolumn, aby móc pisać pomocników, którzy dynamicznie tworzą na podstawie nazw. Oznacza to, że nie będę musiał modyfikować moich widoków, aby włączyć nowe ustawienia, chyba że dodaję jeden z innym schematem nazywania.
Dla ustawień właściwych dla produktu, zależy to od tego, jak to się robi. Istnieje kilka sposobów na zinterpretowanie pytania.
Sposób, w jaki to czytam, polega na tym, że chcesz decydować o poziomie produktu. Jakie ustawienia użytkownicy mogą przesłonić lub wyłączyć ustawienie użytkownika. I ewentualnie zdefiniuj niektóre ustawienia specyficzne dla produktu.
Chciałbym użyć jednego do wielu produktów do ustalenia relacji. Tabela ustawień byłaby czymś prostym (product_id, setting_name, setting_default_value, allow_user_change)
To robi wiele rzeczy. Pozwala na posiadanie zmiennej listy ustawień dla różnych produktów (idealne rozwiązanie w przypadku, gdy oferujesz wiele różnych produktów zamiast zmieniać poziomy dostępu do usług). Pozwala także określić, jakie ustawienia użytkownik może/nie może zmienić i podać wartości dla tego typu produktu. Można to zmienić z poziomu widoku administratora bez ponownego uruchamiania aplikacji. Nie jest również powiązany z ustawieniami użytkownika, do tego stopnia, że jeśli użytkownik nie ma ustawienia wymienionego w ustawieniach produktu, nie będzie żadnych problemów.
Wadą jest to, że w tej tabeli będzie wiele wspólnych ustawień. Przenieślibym ustawienia, że każdy produkt będzie miał inną wartość niż pole w tabeli produktów.
Będziesz musiał również napisać sprawdzanie poprawności, aby upewnić się, że użytkownik nie zmienia ustawienia, którego produkt mówi, że nie może. Będziesz musiał również napisać metody pomocnicze, aby scalić ustawienia od strony produktu i użytkownika.
Podałeś różne założenia dotyczące tego, co on myśli i jak zamierza to zaimplementować, ale jego prawdziwe pytanie brzmiało: "Jaki jest najlepszy sposób przechowywania tych ustawień?" Żadne z twoich założeń nie ma sensu w tym kontekście. Nie sądzę, że to całkiem kwalifikuje się jako "słomkowy człowiek", ale nie jestem pewien, jak inaczej to nazwać. –