Birlikte

Çalışma alanları, depolar ve paylaşım

Birlikte çalışmak bir davet düğmesinden fazlasını gerektirir: kuralların gerçekten bağladığı bir sınır, tam olarak seçtiklerinizi taşıyan bir raf ve bir kişiye tek bir şeyi — isterseniz son kullanma tarihiyle — verebilmenin bir yolu. Scellis bunların her birini ayrı bir araç olarak kurar ve önemli olanları sunucuda, bir istemci hatasının erişemeyeceği katmanda zorunlu kılar.

Bunların tümünü beş gruplama kavramı taşır. Her biri tam olarak tek bir eksene sahiptir ve asla birbirine karıştırılmaz:

KavramTek ekseni
Packİçerik teslim eder
ListingOnu satar
Çalışma alanıEkibi yönetir
DepoSeçkiyi düzenler
HavuzBirlikte hesaplar

Bir Pack teslim eder, bir Listing satar, bir havuz hesaplar — her birinin kendi sayfası var. Buradaki konu tablonun ortası: bir ekip nasıl yönetir, bir koleksiyon nasıl seçilmiş kalır ve iş insanlar arasında nasıl dolaşır.

Çalışma alanı yönetir#

Çalışma alanı ekip sınırıdır. Üyelik, izolasyon sınırıdır: Bir çalışma alanının içindekileri üyeleri görür — başka hiç kimse görmez. Bir üyenin ne yapabileceğini dört rol belirler — owner > admin > editor > viewer — kesin sıralıdır.

Kurallar sunucu tarafında ve katmanlı biçimde uygulanır. Arayüz rolünüzü yansıtır; onu asla kendisi uygulamaz. Uygulamanın altında ise ikinci, bağımsız bir taban vardır: Veritabanındaki satır düzeyinde güvenlik politikaları, bir isteğin hangi satırları görebileceğine bizzat karar verir. Bu taban elle yazılmaz, üretilir — tek bir üreteç her iki görünürlük kafesini, Grant'leri ve bağlantı-Grant'lerini kapsar — böylece bir istemci hatası erişimi genişletemez: Karar veren hiçbir zaman istemci değildi.

izin verilmeyen bir istekgördüğünüz şeygizlenmiş bir düğme yalnızca nezakettirsunucuher erişim burada karara bağlanırveritabanının kendisison sözburada durdurulur
Şek. 1 — Gizlenmiş bir düğme bir yetki değildir. Gerçekte ne yapabildiğinize sunucu karar verir; altındaki veritabanı da uygulamanın sözüne güvenmez — yani izin verilmemesi gereken bir istek, düğme hiç var olmasa da durdurulur.

Not

Bir düğmeyi gizlemek nezakettir. Sunucu tarafındaki denetim sınırın kendisidir; veritabanının satır düzeyinde güvenliği ise o sınırın altındaki tabandır — ikisi de arayüzün ne iddia ettiğine kayıtsızdır.

Arayüzün geçersiz kılamayacağı politika#

Çalışma alanı ayrıca politika taşır — ve buradaki politika bir tercih değil, bir zorlama sınırıdır. Bir çalışma alanı yalnızca imzalı Pack'lerin kurulmasını şart koşabilir, ağ etkilerini tümüyle yasaklayabilir, yalnızca deterministik yürütmeyi zorunlu kılabilir ve kayıtlarını değiştirilemez yapabilir. Hiçbir yerel ayar bunları geçersiz kılamaz: Politika, her üye için, istemcisi ne yaparsa yapsın, sunucuda bağlar.

Denetim kayıtları bu sınırı kanıtlanabilir kılar. Yöneticiler kimin neyi ne zaman çalıştırdığını sorgulayabilir ve dışa aktarabilir. Düzenlemeye tabi işlerde bütün düzenin amacı tam da budur — iddia ettiğiniz bir politika değil, bir denetçiye gösterebileceğiniz bir sınır.

Hak kayıtları çalışma alanına ait olabilir#

Bir ekibi yönetmek ile bir ekip için ödemek aynı eksendir; bu yüzden Scellis ikisini tek modelde tutar. Bir hak kaydı — bir kademe planı ya da satın alınmış bir Pack — bir kimliğe ya da bir çalışma alanına verilebilir; üyeleri arasında koltuk havuzuyla paylaştırılır. Ekip, ders ve kampüs lisanslaması böylece veridir; sonradan eklenmiş ikinci bir faturalama sistemi değil: çalışma alanı için bir kez satın alın, her üye kapsanır — ve rolleri uygulayan aynı sunucu kontrol noktası planı da uygular. Bunun ticari yanının nasıl işlediği — kesinleşme, faturalar, iadeler — pazar yeri sayfasının konusudur; kademelerin kendisi ise fiyatlandırma sayfasında yaşar.

Depo küratörlük yapar#

Depo; iş akışları, modeller, veri kümeleri, bloklar — her şeyden oluşabilen, adlandırılmış, paylaşılabilir bir koleksiyondur ve her girdisi bir sürüme sabitlenir. Tek bir raftır: Üzerinde tam olarak sizin seçtikleriniz durur. Sürümler sabitlendiği için raf kararlıdır: Birinin bir modelin 12. sürümünü yayımlaması, arkasında durduğunuz 7. sürümü sessizce değiştirmez. Değişmez sürümlerin bir arada var olması, bir depoyu bir bütün olarak alıntılanabilir kılar — yarın da aynı şekilde çözülen bir okuma listesi.

Depoda bilinçli olarak ne rol ne de politika vardır. Bir depoya rol eklemek istediğinizi fark ederseniz, aslında istediğiniz bir çalışma alanıdır: Depo seçkiyi düzenler, çalışma alanı yönetir. Kavram başına tek eksen — bir deponun neden bir Pack olmadığının da nedeni budur. Bir Pack, kapalı bir bağımlılık grafını tek bir imzalı birim olarak taşır; bir depo yalnızca sizin bir araya getirdiğiniz sürümlere işaret eder.

Görünürlük tek yöne ilerler; paylaşım bir Grant'tir#

Her varlığın bir görünürlüğü vardır ve görünürlük monotondur: private → workspace → public — yalnızca yukarı. Geri alma vardır; ama ayrı bir addır ve ayrı bir eylemdir: Yayından kaldırma, kayda geçen, denetlenen ayrı bir işlemdir — asla sessiz bir geri kayma değildir. Ve iliştirilmiş bir SPDX lisansı olmadan hiçbir şey herkese açık olmaz.

Bir kişiyle paylaşmak bilinçli olarak bir görünürlük değeri değildir. Bir Grant'tir: kişiye özel bir yetki — viewer ⊏ commenter ⊏ editor ⊏ owner sırasıyla — isteğe bağlı son kullanma tarihi ve anında iptal ile. “Benimle paylaşılanlar” ikinci bir depolama sistemi değildir; Grant'leriniz üzerinde bir sorgudur — bir düzenleyiciye canlı oturumda çalıştırma kontrolü veren Grant'in aynısı. Davetler de aynı biçimi izler: e-postayla davet edersiniz, kabul bir Grant oluşturur.

Paylaşacak insanları bulmak onları ifşa etmez. Kişi keşfi yalnızca açıkça herkese açık kılınmış profil alanlarını döndürür — kullanıcı adı, görünen ad, avatar — asla bir e-posta adresi, asla kimin neye sahip olduğunun dökümü değil. Bir profil keşfin tümüyle dışında da kalabilir.

İki tür paylaşım bağlantısı#

Bir bağlantı iki farklı anlama gelebilir; bu yüzden Scellis'te iki farklı bağlantı vardır ve bunlar asla birbirine karıştırılmaz. Anlık görüntü bağlantısı, dondurulmuş, içerik adresli bir sürüme çözümlenir: değişmez, girişsiz, kendini doğrulayan — gelen şey, bağlantının adlandırdığı şey olduğunu kanıtlayabilir. Bu, URL ile yeniden üretilebilirliğin temel yapı taşıdır; bir meslektaşınız tam olarak paylaştığınız commit'lenmiş sürümü açar — taslağınızın bir gecede dönüştüğü şeyi değil.

Oturum bağlantısı canlı, düzenlenebilir taslağı açar ve bu yüzden kimlik ister. Girişsiz bir ziyaretçi bile kararlı, atfedilebilir anonim bir kimlikle birlikte düzenler; canlı oturumdaki her şeyin bir yazarı vardır. Canlı taslak asla hash'lenmez: Alıntılanabilir bir şey gerektiğinde commit'leyin ve anlık görüntü bağlantısını gönderin.

bağlantı paylaşırsınızdondurulmuş bir sürümgönderdiğiniz baytların tam olarak kendisihesap gerekmezcanlı belgeşu an neye benziyorsa ogiriş gerekir
Şek. 2 — İki bağlantı, asla birbirine karışmaz. Biri dondurulmuş bir sürümü açar — gönderdiğiniz baytların tam olarak kendisini, hesap gerektirmeden. Diğeri canlı belgeyi şu anki hâliyle açar ve karşı tarafın kim olduğunu sorar.

Her iki durumda da bağlantının sırrı yalnızca URL'nin “#” işaretinden sonraki bölümünde — tarayıcının sunucuya asla göndermediği parçada — yaşar. Sunucu sırrın yalnızca hash'ini saklar: Verdiği bir bağlantıyı tanır ama yeniden kuramaz.

Dürüst sınırlar

İptal ileriye dönük etkilidir. Bir Grant'i ya da bağlantıyı iptal etmek gelecekteki erişimi anında keser — ama bir çalışma arkadaşınızın cihazına zaten eşitlediği baytlar geri çağrılamaz. Hiçbir sistem gönderilmiş veriyi geri alamaz; Scellis alabiliyormuş gibi yapmaz. Düzenlemeye tabi belgeler içinse politika, hamiline (bearer) bağlantıları tümüyle yasaklayabilir: yalnızca kimliğe bağlı görüntüleme.

Değişikliği geri önerin#

Okumak, iyileştirmenin giriş kapısıdır. Okuyabildiğiniz her varlığı fork edebilirsiniz; fork'unuz daha iyi olduğunda değişikliği geri önerirsiniz. Sahibi gerçek bir diff inceler — değişikliğin tarifini değil, kendisini — ve üç yönlü bir birleştirmeyle birleştirir. Kabul edilen değişiklik sıradan bir yeni sürüm olarak yerini alır; sahibinin kendi yazdığı bir değişiklikten türce farksızdır. Home yüzeyindeki öneri gelen kutusu incelemeyi görünür tutar — iyi bir değişiklik, birinin bakmayı hatırlamasına asla bağlı kalmaz.

Sahipliğin kendisi de aynı döngüden geçer: Bir varlığı devretmek, tıpkı diğer her değişiklik gibi bir öner-ve-kabul-et işlemidir. Paylaşım grafını bir çıkmaz kopyalar yığını yerine çift yönlü bir yola çeviren, işte bu fork-et-ve-öner hareketidir.