Jak wdrożyć funkcję tylko dla kilku wybranych użytkowników

11

Dobrym przykładem tego, o co staram się zapytać, jest nowa funkcja osi czasu Facebooka. Na początku tylko nieliczni mieli dostęp do osi czasu. Ponieważ funkcja stała się bardziej ugruntowana w działaniu, a błędy zostały w niej naprawione, dodatkowi użytkownicy mieli dostęp do tej funkcji. W późniejszym czasie duża grupa użytkowników miała dostęp do tej funkcji, a teraz jest to ogólna funkcja dla wszystkich użytkowników. Jak zespół programistów zarządza wprowadzaniem tego typu funkcji?

Grałem z pomysłem użycia ustawień konfiguracyjnych do selektywnej kontroli dostępu, jeśli coś jest w fazie testowej lub produkcyjnej za pomocą pliku konfiguracyjnego i warunkowe, jeśli instrukcje w kodzie. Teraz, chociaż jest to w porządku dla prostych funkcji, uważam, że jeśli spróbujemy zaimplementować to w większym zestawie funkcji, stanie się to niemożliwe do zarządzania.

Jaki byłby najlepszy sposób zarządzania wdrażaniem funkcji w ten sposób?

Chris
źródło
3
ACL i RBAC to dwa (bardzo podobne) sposoby robienia tego, czego szukasz.
yannis
@YannisRizos: To prawda, że ​​to krótka / krótka odpowiedź, ale myślę, że jest uzasadniona. Powinieneś opublikować to jako odpowiedź.
Steven Evers
Czy to nie jest w zasadzie to samo dla wszystkich funkcji, a nie tylko nowe? W zależności od poświadczeń użytkownik ma dostęp do x ilości opcji? Na przykład poziom administratora może zmieniać ustawienia, a poziom pomruku może tylko wpisywać dane?
Pieter B,

Odpowiedzi:

2

Jak zespół programistów zarządza wprowadzaniem tego typu funkcji?

Łatwo zgadnąć, że system taki jak Facebook jest napędzany głównie przez bazy danych. Wszystkie dane użytkownika są oczywiście przechowywane w bazach danych, a to prawdopodobnie obejmuje informacje o tym, jak renderować dane użytkownika. Nie można dokładnie wiedzieć, jak konfigurowana jest baza danych Facebooka, ale musi tak być, że funkcja taka jak Oś czasu jest wprowadzana do użytkowników w sposób stopniowy, poprzez okresowe wybieranie użytkowników w bazie danych na podstawie niektórych kryteriów i zmianę wartości ( s) niektórych pól.

Na przykład, może oni mają pole w tabeli użytkownika jak timeline_statusto ma wartości takie jak not offered, offered, preview, i public. Na tej podstawie system Facebooka może decydować o sposobie renderowania strony informacyjnej użytkownika. Zespół FB mógł następnie wypróbować funkcję Oś czasu, wybierając grupę użytkowników i zmieniając wartość tego pola.

W praktyce jestem pewien, że jest to trochę bardziej skomplikowane, ale podstawową ideą jest to, że konto użytkownika to tylko dane, a niektóre z tych danych mogą określać, które funkcje są dostępne. Wdrożenie nowej funkcji jest więc tylko kwestią aktualizacji rekordów użytkowników w bazie danych.

Caleb
źródło
9

... i warunkowe, jeśli instrukcje w kodzie.

Tak, to zły sposób na zrobienie tego. Czymkolwiek jest X, jeśli jest konfigurowalna, musi coś rozszerzyć lub wymienić. Zrób TO w kodzie. Na przykład FB może mieć coś takiego:

class UserPageView;
class HatedTimelineView : UserPageView;
class OldViewEveryoneLikes : UserPageView;

Następnie zbudujesz fabrykę, która tworzy obiekty UserPageView podczas odwiedzania strony użytkownika na podstawie konfiguracji. Aktywowałbyś ten widok. Żadnych głupich gałęzi.

Chcesz to zrobić w ten sposób, ponieważ jeśli ktoś poprosi cię o zmianę raz, poprosi o to ponownie. Ponadto będą prosić o zmianę innej rzeczy. Rozwiąż swoją architekturę specjalnymi skrzynkami, a jeśli jest wszędzie, a będziesz miał gigantyczną miskę niemożliwego do utrzymania, spleśniałego spaghetti zamiast bogatego w funkcje, dojrzałego produktu.

Edward Strange
źródło
Musisz użyć warunkowych instrukcji if. W przeciwnym razie skąd Twoja fabryka wie, który UserPageView zwrócić? To powiedziawszy, zgadzam się, że umieszczanie instrukcji w całym kodzie jest złym pomysłem, chcesz je scentralizować.
briddums
1

Pomyśl o tej funkcji tak samo, jak o funkcji administracyjnej w witrynie ślubnej.

Podczas ładowania strony sprawdź, czy użytkownik ma odpowiednie uprawnienia do tej funkcji, jeśli tak, załaduj ją.

Wydaje się, że Facebook wprowadza podejście oparte na lokalizacji przy wdrażaniu nowych funkcji. Może to być tak proste, jak sprawdzenie adresu IP użytkownika w celu znalezienia jego lokalizacji.

Gordon
źródło