Bir özelliği yalnızca seçili birkaç kullanıcıya nasıl sunabilirim?


11

Sormaya çalıştığım şeylere iyi bir örnek Facebook'un yeni Zaman Çizelgesi özelliği olacaktır. Başlangıçta, yalnızca birkaç kişinin zaman çizelgesine erişmesine izin verildi. Özellik, çalışma biçiminde daha sağlamlaştıkça ve hatalar düzeltildiğinden, ek kullanıcıların özelliğe erişmesine izin verildi. Daha sonraki bir tarihte, büyük bir kullanıcı grubunun bu özelliğe erişmesine izin verildi ve şimdi, tüm kullanıcılara genel bir özellik. Bir geliştirme ekibi bu tür özellikleri nasıl yönetir?

Bir şey bir yapılandırma dosyası aracılığıyla test veya üretimde olup olmadığını ve kodda koşullu if ifadeleri seçerek erişim denetlemek için yapılandırma ayarlarını kullanma fikri ile oynadım. Şimdi bu basit özellikler için uygun olsa da, bunu daha büyük bir özellik kümesinde uygulamaya çalışırsak yönetilemez hale geleceğine inanıyorum.

Özellik sunumlarını bu şekilde yönetmenin en iyi yolu ne olabilir?


3
ACL & RBAC aradığınızı yapmanın iki (çok benzer) yoludur.
yannis

@YannisRizos: Verilen, bu küçük / kısa bir cevap, ama bence bu meşru olarak faydalı. Cevap olarak göndermelisiniz.
Steven Evers

Bu sadece yeni özellikler değil tüm özellikler için aynı şey değil mi? Kimlik bilgilerine bağlı olarak kullanıcı x seçeneğe erişebilir mi? Örneğin yönetici seviyesi ayarları değiştirebilir ve homurdanma seviyesi sadece veri yazabilir mi?
Pieter B

Yanıtlar:


2

Bir geliştirme ekibi bu tür özellikleri nasıl yönetir?

Facebook gibi bir sistemin büyük ölçüde veritabanları tarafından yönlendirildiği kolay bir tahmin. Tüm kullanıcı verileri açık bir şekilde veritabanlarında saklanır ve bu, büyük olasılıkla kullanıcının verilerinin nasıl işleneceği hakkında bilgi içerir. Facebook'un veritabanının tam olarak nasıl kurulduğunu bilmek imkansızdır, ancak Timeline gibi bir özelliğin, bazı ölçütlere göre periyodik olarak kullanıcıları veritabanında periyodik olarak seçip değeri değiştirerek kullanıcılara aşamalı olarak sunulması gerekir ( bazı alan (lar) ın.

Gibi Örneğin, belki de kullanıcı tabloda bir alan timeline_statusbu gibi değerlere sahiptir not offered, offered, previewve public. Sadece buna dayanarak, Facebook sistemi kullanıcının bilgi sayfasını nasıl oluşturacağına karar verebilir. FB ekibi daha sonra bazı kullanıcı gruplarını seçip o alanın değerini değiştirerek Zaman Çizelgesi özelliğini deneyebilir.

Pratikte, bundan biraz daha karmaşık olduğuna eminim, ancak temel fikir, bir kullanıcı hesabının sadece veri olduğu ve bu verilerin bazılarının hangi özelliklerin kullanılabilir olduğunu belirleyebileceğidir. Yeni bir özellik sunmak, veritabanındaki kullanıcı kayıtlarını güncellemekle ilgilidir.


9

... ve koşullu if ifadeleri kodda.

Evet, bunu yapmanın yanlış yolu. X özelliği ne olursa olsun, yapılandırılabilirse, bir şeyi genişletmeli veya değiştirmelidir. Kodda bunu yapın. Örneğin, FB şeyinde şöyle bir şey olabilir:

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

Ardından, yapılandırmayı temel alan bir kullanıcı sayfasını ziyaret ederken UserPageView nesnelerini yapan bir fabrika oluşturacaksınız. Bu görüşü aktive edersiniz. Aptal dal yok.

Bunu bu şekilde yapmak istersiniz çünkü biri sizden bir kez değiştirmenizi isterse, tekrar isteyecektir. Ayrıca başka bir şeyi değiştirmek isteyecekler. Özel durumlarla mimarinizi bilmeye başlayın ve eğer her yerdeyse ve zengin bir olgun ürün yerine devasa bir küflü spagetti kabına sahip olacaksınız.


Koşullu if ifadelerini kullanmanız gerekir. Aksi takdirde fabrikanız hangi UserPageView'in geri döneceğini nasıl bilir? Bununla birlikte, tüm kod boyunca ifadeler koymak kötü bir fikir olursa, onları merkezileştirmek istediğinizi kabul ediyorum.
briddums

1

Özelliği, bir web sitesindeki bir yönetim özelliğini düşündüğünüz şekilde düşünün.

Bir sayfa yüklenirken, kullanıcının özellik için doğru ayrıcalıklara sahip olup olmadığını kontrol edin.

Facebook, yeni özellikler sunarken konuma dayalı bir yaklaşım kullanıyor gibi görünüyor. Bu, konumlarını bulmak için kullanıcıların ip adresine bakmak kadar basit olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.