Çok kiracılı SaaS izinleri; org, ekip, rol ve sahiplik kurallarını basitçe açıklayan, ölçeklenebilir kontrol listeleri ve örneklerle güvenli bir rehber.

İzin problemleri genellikle küçük rahatsızlıklarla başlar. Bir destek bileti: "Ben adminim ama faturaları göremiyorum." Başka birisi: "Neden ekip arkadaşım ayarları düzenleyebiliyor?" İnsanlar tıklar, tahmin eder ve bazen erişimi düzeltmekten daha hızlı geldiği için tek bir "sahip" oturumu paylaşır.
Sonra geçici çözümler birikir. Ekipler "Admin 2" veya "Yönetici (silme yok)" gibi roller uydurur. Mühendisler, "eğer kullanıcı Satış'taysa dışa aktar izni ver" gibi tek seferlik kontroller ekler çünkü bugünü çözer. Bir ay sonra kim hangi kuralın kasıtlı, hangisinin tesadüfî olduğunu söyleyemez.
Daha fazla müşteri ekleyince durum daha da kötüleşir. Bir hesaba göre sorun olmayan bir kural ("adminler tüm verileri görebilir") yüzlerce farklı beklentiye sahip org olduğunda bozulur. Bir müşteri departmanlar arasında sıkı ayrım ister. Başkası paylaşılan çalışma alanı ister. Bazıları bir yüklenicinin sadece bir projeye erişmesini ister. Modeliniz net değilse her yeni müşteri yeni bir istisna olur.
Hedef basit: bir dakikada açıklanabilecek, öngörülebilir erişim kuralları. Örneğin: "Org verinin sahibidir. Ekipler insanları gruplar. Roller eylemleri tanımlar. Kaynaklar bir orga, bazen bir ekibe aittir. Paylaşım birkaç varsayılan iz üzerinde gider." Bunu açıkça söyleyemiyorsanız, inşa etmek zor, test etmek zor ve değiştirmek korkutucu olur.
Tutulması gereken söz: daha az rol, daha net sahiplik, daha güvenli varsayılanlar. İşe gerçek işlerle bağlantılı küçük bir rol setiyle başlayın, her kaynak için sahipliği belirgin yapın ve varsayılan erişimi en az düzeye getirin. Sonra paylaşımı kazara değil amaçlı yapmaya izin verin.
Uygulamanız birden fazla müşteriye hizmet veriyorsa kuralları yazmadan önce zihinsel haritayı doğru kurun. Çok-kiracılı SaaS izinlerindeki karışıklığın çoğu, aynı kelimenin ürünün farklı yerlerinde farklı anlamlara kaymasından gelir.
Kiracı sınırı için tek bir anlam seçin ve ona sadık kalın. Birçok ürün "organizasyon"u tenant olarak kullanır: tüm veri bir org içinde yaşar ve paylaşım açıkça oluşturulmadıkça hiçbir şey bu çizgiyi geçmez.
Büyüdükçe net kalan basit bir sözlük:
"Bir kişi, birçok org" normaldir. Bir danışman üç müşteri organisyonuna ait olabilir ve her birinde farklı bir role sahip olabilir. Bu yüzden "kullanıcı" ve "üyelik" ayrı olmalı. Kontroller genellikle kullanıcı değil üyeliğe bağlıdır.
Ekipler, "Destek" veya "Finans" gibi gerçek gruplaşmaları yansıtıyorsa faydalıdır. Ekipler, ikinci bir izin sistemi haline geldiğinde gürültü yaratır. Kullanışlı bir test, ekibi bir özellik kuralı belirtmeden bir cümleyle açıklayıp açıklayamadığınızdır.
Örnek: Maria tek oturum açar, sonra Org A ile Org B arasında geçiş yapar. Org A'da Finans'tadır ve faturaları görüntüleyebilir. Org B'de Görüntüleyici'dir ve sadece projeleri okuyabilir. Aynı kullanıcı, farklı üyelikler, tutarlı kaynak türleri, net sınırlar.
Çok-kiracılı SaaS izinleri, üç şeyi ayırdığınızda anlaşılır kalır:
RBAC (role-based access control) demek: bir kullanıcıya bir rol verirsiniz ve o rol izin verilen eylemleri verir. Rol isimleri statüyü değil sorumluluğu anlatmalı. "Fatura Yöneticisi" nettir. "Power User" genellikle tartışma çıkarır.
İzinleri fiiller gibi düşünün ve ürün genelinde tutarlı tutun:
Sonra aynı fiilin farklı yerlerde kullanılabilmesi için kapsam ekleyin. Böylece 20 tane hafifçe farklı rol oluşturmazsınız.
Yaygın ve okunabilir kapsamlar:
Kendinizi "Proje Düzenleyici" ve "Proje Düzenleyici (Kendi)" gibi roller yaratırken yakalarsanız genellikle sorun rol değil kapsamdır.
Örnek: Bir CRM'de "Satış Temsilcisi"ne fırsatları oluşturma ve düzenleme yetkisi verin, ama kapsamı "kendi öğeleri" ile sınırlayın. "Satış Müdürü" benzer fiillere sahip olsun ama "ekip içi" veya "org-genel" kapsamda. Böylece daha az rol, daha net kurallar ve biri ekip değiştirdiğinde daha az sürpriz olur.
Sağlam bir varsayılan: roller fiilleri verir, sahiplik (veya atama) bu fiillerin nerede çalışacağını sınırlar.
Modeliniz bir müşteri için çalışıp onda onorgda bozuluyorsa muhtemelen "kim görebilir" ile "ne yapabilir" ve "kimin" karıştırılmıştır. Bunları ayrı tutun ki sistem öngörülebilir kalsın.
Ölçeklenen bir kural seti:
Örnek: Sam Org A ve Org B'ye üyedir. Org A'da Üye ve kendi raporlarını oluşturup düzenleyebilir ama faturalamayı değiştiremez. Org B'de Fatura Yöneticisi'dir ve ödeme yöntemlerini güncelleyip faturaları indirebilir, ama üyeliği o alanı içermiyorsa özel projeleri göremez.
Bu büyümeyi iyi anlamda sıkıcı yapar. Yeni bir org eklemek sadece üyelikler ve roller eklemektir. Temel kurallar aynı kalır.
Bir meslektaşın iki dakikada okuyabileceği tek bir sayfa yazın. İzinleri koda bakmadan açıklayabiliyorsanız iyi bir noktadasınız.
Parçaları kasıtlı olarak küçük tutun:
Rol patlamasını önlemek için kapsamı kullanın. Birçok ürünün sadece üç kapsamı yeter: kendi, ekip, org.
| Rol | Görüntüle | Düzenle | Kullanıcı davet et | Faturalama | Kapsam notu |
|---|---|---|---|---|---|
| Sahip | Evet | Evet | Evet | Evet | Org-genel, sahipliği devredebilir |
| Yönetici | Evet | Evet | Evet | Hayır/Evet | Org-genel, sahiplik değişikliği yok |
| Üye | Evet | Sınırlı | Hayır | Hayır | Kendi + atandığı ekip (varsa) |
| Görüntüleyici | Evet | Hayır | Hayır | Hayır | Atanmış kapsamda salt-okuma |
Akıl sağlığı kontrolü: bu sayfayı teknik olmayan bir meslektaşa gösterin ve sorun, "Destek üyesi Satış raporunu düzenleyebilir mi?" Eğer tereddüt ediyorlarsa kapsam veya ekip tanımınız net değil demektir.
İzinleri anlaşılır tutmak için her kaynağın sahibinin kim olduğunu kararlaştırın, sonra paylaşım seçeneklerini sınırlı tutun.
Çoğu kaynağı org-ait yapın. Müşteriler genelde şirket bazında düşünür: faturalar, projeler, kişiler, talepler ve otomasyonlar organizasyona aittir, bireye değil.
Ekipler hâlâ faydalı olabilir, ama bir ekibi yönlendirme ve görünürlük varsayılanları için bir iş akışı etiketi olarak ele alın, gizli güvenlik mantığı olarak değil. Bir ekip etiketi filtreleri, panoları, bildirimleri veya kuyrukları yönlendirebilir; erişim ise roller ve kapsamdan gelmelidir.
Kullanıcı-ait kaynaklar istisna olmalı: taslaklar, özel notlar, kaydedilmiş görünümler, API belirteçleri veya kişisel ayarlar gibi gerçekten kişisel öğeler. Bir kullanıcı ayrıldığında ne olacağına karar verin: sil, devret veya gizli tut.
Okunması kolay küçük bir paylaşım kural seti:
Birisi "Erişim ihtiyacım var" dediğinde hangi seviyede olduğunu sorun: kişisel öğesi mi, ekip işi mi, yoksa tüm org mu? Üçten biri değilse genellikle kapsamlarınızın net olmadığının işaretidir, yeni bir paylaşım modu değil.
Örnek: bir destek talebi org-ait olabilir (yöneticilerin tüm talepleri raporlaması için), Support ekibine etiketlenebilir (doğru kuyruğa gelmesi için) ve Jordan'a atanabilir (sorumluluk için). Atama diğer izinli rollerin görüntülemesini engellememelidir.
İzinler genellikle "insan olayları" sırasında bozulur: birini davet etmek, ekipler arasında taşımak veya erişimi kaldırmak. Bu akışlar modelinizin öngörülebilir kalıp kalmayacağını belirler.
Davet bir üyelik oluşturma isteği olarak ele alınsın, tek başına erişim olarak değil. Davet kabul edilirse hangi org, ekip (isteğe bağlı) ve rol verileceği açıkça belirtilmeli.
Kuralları sıkı tutun:
Geçici erişim de burada yer alır. "Geçici kullanıcı" rolü icat etmek yerine bir rol verişine bir bitiş tarihi ekleyin. Süre dolunca erişim otomatik düşer ve denetim izi temiz kalır.
Birisi bir orgu terk ettiğinde kaynaklarıyla ne yapılacağına tahmin yürüterek karar vermeyin. Kuralınız "kaynaklar orga aittir" ise ona bağlı kalın. Kişi geçmiş için yaratıcı olarak kalabilir ama org sahibi olmaya devam eder.
Kullanıcıya ait kaynaklarınız varsa hassas olanlar (projeler, belgeler, API anahtarları) için kaldırmadan önce devretmeyi zorunlu kılın.
Bir oturum birden fazla orga ait olabilir, ama uygulamada her zaman tek bir "aktif org" olmalı. Bunu UI'da belirgin yapın ve her eylemi ona göre kapsamlayın.
Devre dışı bırakma genelde silmeden daha iyidir. Şimdi erişimi kaldırır ve geçmiş işlemleri denetlenebilir kılar.
Çoğu izin modeli kurallardan daha hızlı büyüdüğü için başarısız olur. Temelleri (tenant sınırı, sahiplik, kapsam) koruyun ve diğer her şeyi detay olarak ele alın.
Rol patlaması klasik tuzaktır. Bir uç durum ortaya çıkar ve yeni bir rol yaratırsınız yerine daha net bir izin veya kapsam oluşturmalısınız. Birkaç ay sonra kimse "Manager Plus"ın ne anlama geldiğini bilmez. Özel durum sık gerekiyorsa onu birinci sınıf izin yapın. Nadirse geçici, süresi dolan bir yetkiyle halledin.
İzin kayması sessiz ama daha kötüdür. Birisi "sadece bir istisna" ekler ve model güncellenmeden unutulur. Bir yıl sonra yazılı kurallar ile gerçek sistem uyuşmaz. Önce modeli güncelleyin, sonra uygulayın.
Ekipleri sahte güvenlik sınırları olarak kullanmak sürekli karışıklık yaratır. Eğer kaynaklar org içinde ekipler arasında paylaşılabiliyorsa bunu açıkça söyleyin. Paylaşım mümkün değilse bunu isimlendirmede değil kodda zorlayın.
Erken yakalanacak kırmızı bayraklar:
Destek bir müşteriye yardımcı olması gerektiğinde, "onlara bir dakika global admin verin" tenant sızıntısına davetiyedir. Bunun yerine belirli org, zaman penceresi ve eylemlerle açık, loglanan erişim tercih edin.
Her istekte önce aktif organizasyonu çözün (alt alan, header, oturum veya rota üzerinden) ve eşleşmeyenleri reddedin.
Org bağlamından sonra kontrolleri tutarlı bir sırayla yapın: önce üyelik (bu orgda mı üye?), sonra rol (burada ne yapmasına izin var?), sonra sahiplik veya paylaşım (bu kayda erişimi var mı?). Sahiplik kontrollerini üyelikten önce yaparsanız var olan şeyler hakkında bilgi sızdırabilirsiniz.
Basit bir dizi uçtan uca testi gerçek hesaplarla çalıştırın, sadece birim testlerle yetinmeyin:
Güçleri değiştiren veya veriyi taşıyan işlemler için temel denetim olayları ekleyin: rol değişiklikleri, üyelik kaldırmaları, dışa aktarmalar, silmeler, ayar güncellemeleri. İlk gün mükemmel olması gerekmez ama "kim ne yaptı, ne zaman?" sorusuna yanıt verebilmeli.
Varsayılanları gözden geçirin. Yeni orglar ve yeni üyeler başarılı olmaları için gereken en az erişimle başlamalı. Destek ve satış için kısa bir dahili izin SSS'si de yardımcı olur; örnekler: "Ekip lideri diğer ekipleri görebilir mi?" ve "Kaldırıldıktan sonra erişime ne olur?"
Küçük, gerçek bir kurulumla başlayın: bir müşteri şirketi (bir org) ve iki ekip, Satış ve Operasyon. Herkes bir kez oturum açar, sonra ait olduğu orgu seçer. Satış müşteri kayıtlarına ve tekliflere ihtiyaç duyar. Operasyon faturalamaya ve iç ayarlara ihtiyaç duyar.
Ekipleri gruplaşma ve iş akışı olarak tutun, ana izin anahtarı yapmayın. Varsayılanları ve yönlendirmeyi etkileyebilirler ama tek kapı olmamalılar.
Küçük bir rol seti seçin ve özellikler geldikçe sabit tutun: Yönetici, Üye, Görüntüleyici. Rol "Bu orgda ne yapabilirsin?" sorusuna cevap verir. Kapsam "Nerede yapabilirsin?" sorusuna.
Bir sahiplik kuralı ekleyin: her kaynağın bir orgu ve bir sahibi (çoğunlukla oluşturucu) olsun. Düzenleme, eğer Yöneticiyseniz veya sahibiyseniz ve rolünüz "kendi düzenle"yi içeriyorsa izinlidir. Görüntüleme, rolünüz o kaynak türü için "görüntüle"yi içeriyorsa izinlidir.
Örnek: bir Satış Üyesi bir teklif oluşturur. Başka bir Satış Üyesi teklifi görebilir ama paylaşılmadıkça veya yeniden atanmadıkça düzenleyemez. Bir Operasyon Görüntüleyicisi yalnızca kurallarınız Ops'un Satış kaynaklarını görmesine izin veriyorsa görebilir.
200 müşteri orgu devreye aldığınızda aynı rolleri ve sahiplik kurallarını yeniden kullanırsınız. Üyelikleri değiştirirsiniz, modeli değil. Destek talepleri "X'e erişim verebilir misiniz?" artık bir kontrol listesine dönüşür: orgu ve kaynağı doğrula, kullanıcının o orgdaki rolünü kontrol et, sahiplik ve paylaşımı kontrol et, sonra rolü değiştir veya kaynağı paylaş. Tek seferlik istisnalardan kaçının ve denetim notu bırakın.
Tek sayfa modelinizi sözleşme gibi ele alın. Her API çağrısında ve her UI ekranında uygulayabileceğiniz kuralları hayata geçirin; aksi halde izinler "duruma bağlı"ya kayar.
Küçük başlayın: birkaç rol, net kapsamlar ve basit sahiplik. Yeni bir istek geldiğinde ("Editor-Yönetici rolü ekleyebilir miyiz?"), önce sahipliği veya kapsamı sıkılaştırın. Yeni roller nadir olmalı.
Eklediğiniz her yeni kaynak için temelleri tutarlı yapın:
org_id saklasın (ve ekip uygunsa team_id)Kenar durumları cilalamadan önce gerçek akışları test edin: davetler, org değiştirme, admin sayfaları ve biri ortadayken erişimi kaybettiğinde ne olduğuna bakın.
Eğer sohbet tabanlı bir uygulama oluşturucuyla çalışıyorsanız, izin modelini önce düz dilde yazmak ve ürün spesifikasyonunun yanında tutmak işe yarar. On Koder.ai (koder.ai), Planning Mode artı anlık görüntüler ve geri alma, bu senaryoları denemek ve kuralların web, backend ve mobilde aynı davrandığından emin olmak için pratik bir yoldur.