Як розгорнути функцію лише для кількох користувачів


11

Хорошим прикладом того, про що я намагаюся запитати, буде нова функція Facebook у Timeline. На початку лише декілька вибраних мали доступ до часової шкали. Оскільки функція ставала більш твердою в її роботі, і в ній виправлялися помилки, додатковим користувачам було надано доступ до цієї функції. Надалі великій групі користувачів було надано доступ до цієї функції, і тепер це загальна особливість для всіх користувачів. Як команда розробників керує розгортанням цього типу функцій?

Я грав з ідеєю використання параметрів конфігурації для вибіркового контролю доступу, якщо щось знаходиться в процесі тестування або в виробництві через файл конфігурації, і умовно, якщо заяви в коді. Тепер, хоча це нормально для простих функцій, я вважаю, що якби ми спробували реалізувати це у більшій наборі функцій, це стане некерованим.

Який був би найкращий спосіб керувати розкручуванням функцій таким чином?


3
ACL & RBAC - це два (дуже схожі) способи робити те, що ви шукаєте.
янніс

@YannisRizos: Звичайно, це невелика / коротка відповідь, але я вважаю, що це корисно. Ви повинні опублікувати це як відповідь.
Стівен Еверс

Хіба це в основному не однаково для всіх функцій, а не лише нових? Залежно від облікових даних користувач має доступ до x кількості опцій? Наприклад, рівень адміністратора може змінювати налаштування, а рівень грунту може вводити лише дані?
Пітер Б

Відповіді:


2

Як команда розробників керує розгортанням цього типу функцій?

Неважко здогадатися, що така система, як Facebook, керується значною мірою базами даних. Усі дані користувачів, очевидно, зберігаються в базах даних, і це, ймовірно, включає інформацію про те, як рендерувати дані користувача. Неможливо точно визначити, як налаштовано базу даних Facebook, але повинно бути так, що така функція, як Timeline, розгортається для користувачів поступово, періодично вибираючи користувачів у базі даних на основі деяких критеріїв та змінюючи значення ( s) деякого поля.

Наприклад, може бути , у них є поле в таблиці користувачів , як , timeline_statusщо має такі значення, як not offered, offered, previewі public. Тільки виходячи з цього, система Facebook може вирішити, як візуалізувати інформацію про сторінку користувача. Потім команда FB може спробувати функцію Timeline, вибравши певну групу користувачів і змінивши значення цього поля.

На практиці я впевнений, що це трохи складніше, ніж це, але основна ідея полягає в тому, що обліковий запис користувача - це лише дані, і деякі з цих даних можуть визначити, які функції доступні. Розгортання нової функції - це лише питання оновлення записів користувачів у базі даних.


9

... і умовні, якщо заяви в коді.

Так, це неправильний спосіб зробити це. Якою б не була функція X, якщо вона налаштована, вона повинна щось розширити або замінити. Зробіть ТО в коді. Наприклад, у FB речі може бути щось подібне:

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

Тоді ви створили фабрику, яка робить UserPageView об'єктами під час відвідування сторінки користувача на основі конфігурації. Ви активуєте цей вид. Без дурних гілок.

Ви хочете зробити це таким чином, тому що якщо хтось попросить вас змінити його один раз, він знову попросить його. Далі вони попросять змінити іншу річ. Загадайте свою архітектуру з особливими випадками, і якщо у вас все це буде, ви матимете гігантську миску з незмінними, пліснявими спагетті, а не зрілим продуктом, багатим на функції.


Вам потрібно використовувати умовні, якщо заяви. Інакше як ваша фабрика знає, який UserPageView повернути? З цього приводу я погоджуюся з тим, що, якщо висловлювати твердження через код - це погана ідея, ви хочете їх централізувати.
briddums

1

Подумайте про цю функцію так само, як ви вважали б функцію адміністрування на веб-сайті.

Під час завантаження сторінки перевірте, чи користувач має права на функцію, якщо вона завантажується.

Facebook, здається, використовує підхід, заснований на розташуванні, під час впровадження нових функцій. Це може бути таким же простим, як перегляд ip-адреси користувачів, щоб знайти їхнє місцезнаходження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.