{"id":34749,"date":"2025-11-21T15:01:33","date_gmt":"2025-11-21T12:01:33","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/"},"modified":"2025-11-21T15:01:33","modified_gmt":"2025-11-21T12:01:33","slug":"multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/","title":{"rendered":"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme"},"content":{"rendered":"<p><body><\/p>\n<p>Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?<\/p>\n<p>G\u00fcn\u00fcm\u00fcz i\u015f d\u00fcnyas\u0131nda, yapay zeka tabanl\u0131 \u00e7\u00f6z\u00fcmler verimlili\u011fi art\u0131rman\u0131n ve rekabet avantaj\u0131 sa\u011flaman\u0131n anahtar\u0131 haline gelmi\u015ftir. \u00d6zellikle RAG (Retrieval-Augmented Generation) mimarileri, b\u00fcy\u00fck dil modellerinin (LLM) g\u00fcncel ve kurum i\u00e7i verilerle zenginle\u015ftirilerek daha do\u011fru ve ba\u011flamsal yan\u0131tlar \u00fcretmesini sa\u011flamaktad\u0131r. Bir m\u00fc\u015fteri destek sistemi d\u00fc\u015f\u00fcn\u00fcn; farkl\u0131 \u015firketlerin temsilcileri, kendi \u015firketlerinin i\u00e7 politikalar\u0131, \u00fcr\u00fcn bilgileri ve m\u00fc\u015fteri kay\u0131tlar\u0131 hakk\u0131nda an\u0131nda do\u011fru bilgiye ula\u015fmak ister. Ancak bu noktada kritik bir soru ortaya \u00e7\u0131kar: Bir \u015firket temsilcisinin ba\u015fka bir \u015firketin hassas verilerine eri\u015fimi nas\u0131l engellenecek? \u0130\u015fte bu, \u00e7ok kirac\u0131l\u0131 RAG sistemlerinin en b\u00fcy\u00fck meydan okumalar\u0131ndan biridir ve bu sorunun cevab\u0131, g\u00fc\u00e7l\u00fc bir yetkilendirme mekanizmas\u0131nda yatmaktad\u0131r. Bu gibi senaryolarda, veri g\u00fcvenli\u011fini sa\u011flamak sadece bir tercih de\u011fil, yasal uyumluluk (KVKK, GDPR gibi) ve m\u00fc\u015fteri g\u00fcveni a\u00e7\u0131s\u0131ndan mutlak bir zorunluluktur.<\/p>\n<p>\u00d6l\u00e7eklenebilirlik, modern yaz\u0131l\u0131m sistemlerinin temel ta\u015flar\u0131ndan biridir. Bir RAG uygulamas\u0131n\u0131, ba\u015flang\u0131\u00e7ta k\u00fc\u00e7\u00fck bir kullan\u0131c\u0131 grubu i\u00e7in tasarlay\u0131p daha sonra y\u00fczlerce veya binlerce kirac\u0131ya hizmet verecek \u015fekilde b\u00fcy\u00fctmek istedi\u011finizde, altyap\u0131n\u0131z\u0131n bu y\u00fck\u00fc kald\u0131rabilmesi gerekir. Her kirac\u0131 i\u00e7in ayr\u0131 bir RAG altyap\u0131s\u0131 kurmak, maliyetli ve y\u00f6netimi zor bir \u00e7\u00f6z\u00fcm olacakt\u0131r. Bu nedenle, \u00e7ok kirac\u0131l\u0131 bir mimari, kaynaklar\u0131 verimli kullanarak maliyetleri d\u00fc\u015f\u00fcrmenin ve y\u00f6netimi kolayla\u015ft\u0131rman\u0131n en etkili yoludur. Ancak bu verimlilik aray\u0131\u015f\u0131, g\u00fcvenlikten \u00f6d\u00fcn vermemeyi gerektirir. Her kirac\u0131n\u0131n verisinin di\u011ferlerinden tamamen izole edilmesi, sorgu performans\u0131n\u0131n d\u00fc\u015fmemesi ve yetkilendirme kararlar\u0131n\u0131n milisaniyeler i\u00e7inde al\u0131nmas\u0131, tasar\u0131m s\u00fcrecinin temel \u00f6ncelikleridir. Bu zorlu dengeyi sa\u011flamak i\u00e7in Motia gibi RAG geli\u015ftirmeyi kolayla\u015ft\u0131ran bir \u00e7er\u00e7eve ile SpiceDB gibi ince taneli yetkilendirme \u00e7\u00f6z\u00fcmlerini bir araya getirmek, hem geli\u015ftirici verimlili\u011fini art\u0131racak hem de nihai \u00fcr\u00fcn\u00fcn sa\u011flaml\u0131\u011f\u0131n\u0131 garanti edecektir. Gelece\u011fin yapay zeka uygulamalar\u0131, sadece ak\u0131ll\u0131 olmakla kalmayacak, ayn\u0131 zamanda g\u00fcvenli ve \u00f6l\u00e7eklenebilir de olmak zorunda.<\/p>\n<h2>Temel Kavramlar Nelerdir? RAG, \u00c7ok Kirac\u0131l\u0131l\u0131k ve \u0130nce Taneli Yetkilendirme<\/h2>\n<p>Bu karma\u015f\u0131k konuyu anlamak i\u00e7in \u00f6ncelikle temel yap\u0131 ta\u015flar\u0131n\u0131 netle\u015ftirmemiz gerekiyor. RAG, \u00e7ok kirac\u0131l\u0131l\u0131k ve ince taneli yetkilendirme, birbiriyle s\u0131k\u0131ca ba\u011flant\u0131l\u0131 \u00fc\u00e7 kritik kavramd\u0131r ve her birini ayr\u0131 ayr\u0131 ele almak, entegre \u00e7\u00f6z\u00fcm\u00fcm\u00fcz\u00fcn neden bu kadar g\u00fc\u00e7l\u00fc oldu\u011funu anlamam\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<ul>\n<li>\n            <strong>RAG (Retrieval-Augmented Generation) Nedir?<\/strong><\/p>\n<p>RAG, b\u00fcy\u00fck dil modellerinin (LLM&#8217;ler) bilgi olu\u015fturma yeteneklerini, harici bir bilgi taban\u0131ndan (\u00f6rne\u011fin, belgeler, veritabanlar\u0131, web sayfalar\u0131) ilgili bilgiyi alma (retrieval) yetene\u011fiyle birle\u015ftiren bir yapay zeka mimarisidir. Geleneksel LLM&#8217;ler, e\u011fitim verilerinde \u00f6\u011frendikleri bilgilerle s\u0131n\u0131rl\u0131d\u0131r ve &#8220;hal\u00fcsinasyon&#8221; olarak adland\u0131r\u0131lan yanl\u0131\u015f veya uydurma bilgiler \u00fcretebilirler. RAG, bu sorunu \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bir kullan\u0131c\u0131 sorgusu geldi\u011finde, sistem \u00f6nce bir vekt\u00f6r veritaban\u0131 veya arama motoru arac\u0131l\u0131\u011f\u0131yla ilgili belgeleri veya metin par\u00e7ac\u0131klar\u0131n\u0131 bulur. Daha sonra bu al\u0131nan bilgiler (context), orijinal sorgu ile birlikte LLM&#8217;e sunulur. B\u00f6ylece LLM, g\u00fcncel, do\u011fru ve spesifik verilere dayanarak yan\u0131t \u00fcretir. Bu yakla\u015f\u0131m, LLM&#8217;lerin do\u011frulu\u011funu, g\u00fcncelli\u011fini ve \u015feffafl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r, \u00f6zellikle kurumsal ortamlarda kritik bir avantaj sa\u011flar. Motia, bu RAG pipeline&#8217;\u0131n\u0131 olu\u015fturmay\u0131 ve y\u00f6netmeyi kolayla\u015ft\u0131ran bir \u00e7er\u00e7eve olarak \u00f6ne \u00e7\u0131kar.<\/p>\n<\/li>\n<li>\n            <strong>\u00c7ok Kirac\u0131l\u0131l\u0131k (Multi-Tenancy) Kavram\u0131 ve Zorluklar\u0131 Nelerdir?<\/strong><\/p>\n<p>\u00c7ok kirac\u0131l\u0131l\u0131k, bir yaz\u0131l\u0131m uygulamas\u0131n\u0131n ve altyap\u0131s\u0131n\u0131n birden fazla m\u00fc\u015fteriye veya &#8220;kirac\u0131ya&#8221; hizmet verecek \u015fekilde tasarland\u0131\u011f\u0131 bir yaz\u0131l\u0131m mimarisidir. Her kirac\u0131, uygulamay\u0131 kendi \u00f6zelle\u015ftirilmi\u015f ve izole edilmi\u015f bir \u00f6rne\u011fi gibi g\u00f6r\u00fcr, ancak asl\u0131nda t\u00fcm kirac\u0131lar ayn\u0131 temel kodu ve genellikle ayn\u0131 altyap\u0131y\u0131 payla\u015f\u0131r. Bunun en b\u00fcy\u00fck avantajlar\u0131 maliyet verimlili\u011fi (kaynak payla\u015f\u0131m\u0131), kolay y\u00f6netim ve daha h\u0131zl\u0131 da\u011f\u0131t\u0131md\u0131r. \u00d6rne\u011fin, bir SaaS \u015firketinin \u00fcr\u00fcn\u00fc, y\u00fczlerce farkl\u0131 \u015firkete ayn\u0131 uygulama \u00fczerinden hizmet verebilir. Ancak \u00e7ok kirac\u0131l\u0131 mimarinin \u00f6nemli zorluklar\u0131 da vard\u0131r: Veri izolasyonu, her kirac\u0131n\u0131n verisinin di\u011ferlerinden tamamen ayr\u0131 tutulmas\u0131 hayati \u00f6nem ta\u015f\u0131r. G\u00fcvenlik, bir kirac\u0131n\u0131n verilerinin yanl\u0131\u015fl\u0131kla veya k\u00f6t\u00fc niyetle di\u011fer kirac\u0131lara if\u015fa edilmemesi gerekir. Performans, bir kirac\u0131n\u0131n y\u00fcksek y\u00fck\u00fcn\u00fcn di\u011fer kirac\u0131lar\u0131n performans\u0131n\u0131 etkilememesi sa\u011flanmal\u0131d\u0131r. Bu zorluklar, \u00f6zellikle hassas verilerle \u00e7al\u0131\u015fan RAG sistemlerinde, g\u00fc\u00e7l\u00fc bir yetkilendirme ve eri\u015fim kontrol\u00fc mekanizmas\u0131n\u0131 zorunlu k\u0131lar.<\/p>\n<\/li>\n<li>\n            <strong>\u0130nce Taneli Yetkilendirme (Fine-Grained Authorization) Ne Anlama Geliyor?<\/strong><\/p>\n<p>Yetkilendirme, bir kullan\u0131c\u0131n\u0131n veya sistemin belirli bir kayna\u011fa (\u00f6rne\u011fin, bir belge, bir \u00f6zellik, bir API u\u00e7 noktas\u0131) eri\u015fip eri\u015femeyece\u011fini belirleme s\u00fcrecidir. Geleneksel olarak, yetkilendirme genellikle rol tabanl\u0131 (RBAC &#8211; Role-Based Access Control) veya ACL (Access Control List) gibi daha geni\u015f seviyelerde uygulan\u0131r. RBAC&#8217;ta, kullan\u0131c\u0131lara &#8220;y\u00f6netici&#8221;, &#8220;edit\u00f6r&#8221; veya &#8220;okuyucu&#8221; gibi roller atan\u0131r ve bu roller belirli izin setleriyle ili\u015fkilendirilir. Ancak ince taneli yetkilendirme, bu yakla\u015f\u0131m\u0131 bir ad\u0131m \u00f6teye ta\u015f\u0131r. Kaynaklara eri\u015fimi \u00e7ok daha detayl\u0131 bir seviyede kontrol etmeyi sa\u011flar. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n sadece belirli bir projenin i\u00e7indeki belirli bir belgenin &#8220;sadece okunabilir&#8221; kopyas\u0131na eri\u015fimi olmas\u0131, ama o belgenin &#8220;d\u00fczenleme&#8221; yetkisinin olmamas\u0131 ince taneli yetkilendirmedir. Bir ba\u015fka \u00f6rnek: Bir muhasebe departman\u0131ndaki bir kullan\u0131c\u0131n\u0131n sadece kendi b\u00f6lgesindeki m\u00fc\u015fterilerin finansal raporlar\u0131na eri\u015fimi olmas\u0131, di\u011fer b\u00f6lgelerdeki raporlara olmamas\u0131. Bu seviyede bir kontrol, \u00f6zellikle karma\u015f\u0131k ve \u00e7ok kirac\u0131l\u0131 ortamlarda veri g\u00fcvenli\u011fini ve uyumlulu\u011fu sa\u011flamak i\u00e7in vazge\u00e7ilmezdir. \u0130\u015fte SpiceDB, bu karma\u015f\u0131k ince taneli yetkilendirme modellerini h\u0131zl\u0131 ve \u00f6l\u00e7eklenebilir bir \u015fekilde y\u00f6netmek i\u00e7in tasarlanm\u0131\u015f bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<\/li>\n<\/ul>\n<aside class=\"expert-tip\">\n        Uzman \u0130pucu: Temel kavramlar\u0131 iyi anlamak, karma\u015f\u0131k sistemleri tasarlarken yanl\u0131\u015f varsay\u0131mlardan ka\u00e7\u0131nman\u0131z\u0131 sa\u011flar. \u00d6zellikle RAG&#8217;in esnekli\u011fi ile ince taneli yetkilendirmenin kat\u0131l\u0131\u011f\u0131 aras\u0131ndaki dengeyi kurmak, ba\u015far\u0131l\u0131 bir proje i\u00e7in kritiktir.<br \/>\n    <\/aside>\n<h2>Motia ve SpiceDB Neden \u0130deal Bir \u0130kili?<\/h2>\n<p>Modern bir \u00e7ok kirac\u0131l\u0131 RAG sisteminin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ve g\u00fcvenlik gereksinimlerini kar\u015f\u0131lamak i\u00e7in do\u011fru ara\u00e7lar\u0131 se\u00e7mek, projenin ba\u015far\u0131s\u0131 i\u00e7in hayati \u00f6neme sahiptir. Motia ve SpiceDB&#8217;nin birlikte ele al\u0131nd\u0131\u011f\u0131nda neden bu kadar g\u00fc\u00e7l\u00fc bir ikili olu\u015fturdu\u011funu anlamak, mimarimizin temelini atacakt\u0131r.<\/p>\n<p><strong>Motia: RAG Uygulamalar\u0131nda H\u0131z ve Esneklik<\/strong><\/p>\n<p>Motia, yapay zeka uygulamalar\u0131, \u00f6zellikle de RAG tabanl\u0131 \u00e7\u00f6z\u00fcmler geli\u015ftirmek i\u00e7in tasarlanm\u0131\u015f bir framework&#8217;t\u00fcr. Temel amac\u0131, geli\u015ftiricilerin b\u00fcy\u00fck dil modelleri ve harici veri kaynaklar\u0131 aras\u0131ndaki entegrasyonu kolayla\u015ft\u0131rmakt\u0131r. Bir RAG pipeline&#8217;\u0131 kurmak, genellikle karma\u015f\u0131k ad\u0131mlar i\u00e7erir: verilerin al\u0131m\u0131 (ingestion), vekt\u00f6rle\u015ftirilmesi, vekt\u00f6r veritaban\u0131na kaydedilmesi, kullan\u0131c\u0131 sorgular\u0131n\u0131n i\u015flenmesi, ilgili belgelerin al\u0131nmas\u0131 (retrieval) ve son olarak LLM&#8217;in bu bilgilerle beslenerek yan\u0131t \u00fcretmesi. Motia, bu ad\u0131mlar\u0131n \u00e7o\u011funu soyutlayarak veya kolayla\u015ft\u0131rarak geli\u015ftiricilerin as\u0131l i\u015f mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131r. \u00d6rne\u011fin, farkl\u0131 vekt\u00f6r veritabanlar\u0131 veya LLM sa\u011flay\u0131c\u0131lar\u0131 aras\u0131nda ge\u00e7i\u015f yapmay\u0131 basitle\u015ftirir, b\u00f6ylece teknoloji se\u00e7iminde esneklik sunar. Motia&#8217;n\u0131n mod\u00fcler yap\u0131s\u0131, RAG ak\u0131\u015f\u0131n\u0131n \u00f6zelle\u015ftirilmesine ve \u00e7e\u015fitli entegrasyonlar\u0131n kolayca yap\u0131lmas\u0131na imkan verir. Bu da onu, \u00e7ok kirac\u0131l\u0131 bir yap\u0131da her kirac\u0131 i\u00e7in \u00f6zelle\u015ftirilmi\u015f RAG deneyimleri sunmak isteyen geli\u015ftiriciler i\u00e7in cazip k\u0131lar.<\/p>\n<p><strong>SpiceDB: Yetkilendirme Kararlar\u0131nda G\u00fcvenilirlik ve \u00d6l\u00e7eklenebilirlik<\/strong><\/p>\n<p>SpiceDB, Google&#8217;\u0131n dahili yetkilendirme sistemi Zanzibar&#8217;dan ilham alan a\u00e7\u0131k kaynakl\u0131, y\u00fcksek performansl\u0131 bir yetkilendirme veritaban\u0131d\u0131r. Geleneksel yetkilendirme sistemlerinden farkl\u0131 olarak, SpiceDB ili\u015fkisel bir model kullan\u0131r. Bu model, &#8220;kullan\u0131c\u0131, bir belgeyi okuyabilir&#8221; veya &#8220;grup X&#8217;in t\u00fcm \u00fcyeleri, bir klas\u00f6rdeki t\u00fcm belgelere eri\u015febilir&#8221; gibi karma\u015f\u0131k yetkilendirme ili\u015fkilerini tan\u0131mlaman\u0131za olanak tan\u0131r. En \u00f6nemlisi, bu ili\u015fkileri milisaniyeler i\u00e7inde sorgulayabilir ve tutarl\u0131 yetkilendirme kararlar\u0131 verebilir. SpiceDB&#8217;nin temel g\u00fcc\u00fc, yetkilendirme modelinizi bir \u015fema (schema) olarak tan\u0131mlaman\u0131za olanak tan\u0131mas\u0131d\u0131r. Bu \u015fema, sisteminizdeki kaynaklar (belge, kirac\u0131, klas\u00f6r vb.) ve bu kaynaklar \u00fczerindeki izinler (okuma, yazma, d\u00fczenleme vb.) aras\u0131ndaki ili\u015fkileri a\u00e7\u0131k\u00e7a belirtir. Bu sayede, &#8220;hangi kullan\u0131c\u0131n\u0131n hangi belgeye hangi izinle eri\u015fimi var?&#8221; gibi sorulara h\u0131zl\u0131 ve do\u011fru yan\u0131tlar alabilirsiniz. \u00d6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan, SpiceDB&#8217;nin mimarisi, y\u00fcksek y\u00fck alt\u0131nda bile d\u00fc\u015f\u00fck gecikme s\u00fcresi ve y\u00fcksek verimlilik sa\u011flayacak \u015fekilde tasarlanm\u0131\u015ft\u0131r. Bu da onu, binlerce kirac\u0131n\u0131n milyonlarca belgeye eri\u015fim yetkilerini y\u00f6netmesi gereken \u00e7ok kirac\u0131l\u0131 RAG sistemleri i\u00e7in ideal bir \u00e7\u00f6z\u00fcm haline getirir.<\/p>\n<p><strong>Birlikteki G\u00fc\u00e7leri: Motia ve SpiceDB Synergy<\/strong><\/p>\n<p>Motia ve SpiceDB, birbirlerini m\u00fckemmel bir \u015fekilde tamamlarlar. Motia, RAG s\u00fcrecinin mekanik k\u0131s\u0131mlar\u0131n\u0131 soyutlayarak ve kolayla\u015ft\u0131rarak geli\u015ftiricilerin i\u00e7eri\u011fe odaklanmas\u0131n\u0131 sa\u011flarken, SpiceDB bu i\u00e7eri\u011fe kimin eri\u015febilece\u011fini belirleyen g\u00fc\u00e7l\u00fc ve esnek bir omurga sunar. \u015e\u00f6yle bir senaryo d\u00fc\u015f\u00fcnelim: Bir \u015firket (kirac\u0131) kendi i\u00e7 belgelerini Motia tabanl\u0131 bir RAG sistemine y\u00fckler. Bu belgeler, farkl\u0131 departmanlara veya projelere ait olabilir ve farkl\u0131 hassasiyet seviyelerine sahip olabilir. \u00d6rne\u011fin, &#8220;Finans Departman\u0131&#8221;ndaki &#8220;Ay\u015fe&#8221; sadece kendi departman\u0131n\u0131n &#8220;B\u00fct\u00e7e Raporlar\u0131&#8221;na eri\u015febilirken, &#8220;\u0130K Departman\u0131&#8221;ndaki &#8220;Fatma&#8221; sadece &#8220;\u00c7al\u0131\u015fan El Kitab\u0131&#8221;n\u0131 g\u00f6r\u00fcnt\u00fcleyebilir. Motia, Ay\u015fe&#8217;nin &#8220;B\u00fct\u00e7e Raporlar\u0131&#8221; hakk\u0131nda sordu\u011fu bir soruyu i\u015flerken, SpiceDB&#8217;ye ba\u015fvurarak Ay\u015fe&#8217;nin bu raporlara ger\u00e7ekten eri\u015fim yetkisi olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer yetki varsa, Motia sadece bu yetkili belgeler aras\u0131ndan bilgi \u00e7eker ve LLM&#8217;e sunar. Bu entegrasyon, bir yandan kullan\u0131c\u0131ya sorunsuz ve do\u011fru bir bilgi eri\u015fim deneyimi sunarken, di\u011fer yandan kirac\u0131lar aras\u0131 veri izolasyonunu ve ince taneli eri\u015fim kontrol\u00fcn\u00fc garantiler. Bu sayede, hem geli\u015ftirme s\u00fcreci h\u0131zlan\u0131r hem de nihai uygulaman\u0131n g\u00fcvenli\u011fi ve \u00f6l\u00e7eklenebilirli\u011fi sa\u011flan\u0131r.<\/p>\n<h2>Multi-Tenant RAG Sistemi Nas\u0131l Tasarlan\u0131r? Mimari Yakla\u015f\u0131m<\/h2>\n<p>\u00c7ok kirac\u0131l\u0131 bir RAG sistemini Motia ve SpiceDB ile tasarlamak, hem esnekli\u011fi hem de g\u00fcvenli\u011fi g\u00f6z \u00f6n\u00fcnde bulunduran katmanl\u0131 bir yakla\u015f\u0131ma ihtiya\u00e7 duyar. A\u015fa\u011f\u0131da, temel bile\u015fenleri ve veri ak\u0131\u015f\u0131n\u0131 a\u00e7\u0131klayan bir mimari tasla\u011f\u0131 bulunmaktad\u0131r.<\/p>\n<h3>Sistem Bile\u015fenleri: Yap\u0131 Ta\u015flar\u0131 Nelerdir?<\/h3>\n<ol>\n<li>\n            <strong>API Gateway\/Y\u00fck Dengeleyici:<\/strong> T\u00fcm gelen kullan\u0131c\u0131 isteklerini al\u0131r, kimlik do\u011frulamas\u0131n\u0131 (authentication) yapar ve iste\u011fi uygun servislere y\u00f6nlendirir. Kirac\u0131 ID&#8217;si ve kullan\u0131c\u0131 ID&#8217;si gibi bilgileri istek ba\u015fl\u0131klar\u0131na ekleyerek a\u015fa\u011f\u0131 ak\u0131\u015f servislerine iletmek burada kritik bir ad\u0131md\u0131r.\n        <\/li>\n<li>\n            <strong>Motia RAG Servisi:<\/strong> Uygulaman\u0131n ana beynidir. Kullan\u0131c\u0131 sorgular\u0131n\u0131 i\u015fler, ilgili verileri almak i\u00e7in vekt\u00f6r veritaban\u0131na ba\u011flan\u0131r ve bu verileri kullanarak LLM&#8217;den yan\u0131t \u00fcretir. Bu serviste, SpiceDB ile entegrasyon sayesinde yetkilendirme kontrolleri ger\u00e7ekle\u015ftirilir.\n        <\/li>\n<li>\n            <strong>Vekt\u00f6r Veritaban\u0131:<\/strong> Belgelerin veya metin par\u00e7ac\u0131klar\u0131n\u0131n say\u0131sal vekt\u00f6r g\u00f6sterimlerini (embedding&#8217;ler) saklar. Kullan\u0131c\u0131 sorgusunun vekt\u00f6r\u00fc ile bu veritaban\u0131ndaki vekt\u00f6rler kar\u015f\u0131la\u015ft\u0131r\u0131larak en alakal\u0131 belgeler bulunur. Her kirac\u0131n\u0131n verisi i\u00e7in ya ayr\u0131 bir indeks ya da metaveri filtrelemesi ile izolasyon sa\u011flanmal\u0131d\u0131r. Pop\u00fcler vekt\u00f6r veritabanlar\u0131 aras\u0131nda Pinecone, Weaviate, Milvus veya Faiss bulunur.\n        <\/li>\n<li>\n            <strong>SpiceDB Yetkilendirme Servisi:<\/strong> \u0130nce taneli yetkilendirme kararlar\u0131n\u0131 verir. Sistemin hangi kullan\u0131c\u0131n\u0131n hangi kayna\u011fa eri\u015febilece\u011fine dair t\u00fcm ili\u015fkisel verileri saklar ve sorgulara h\u0131zl\u0131 yan\u0131tlar verir. Motia RAG servisi, bu servise ba\u015fvurarak yetki kontrollerini yapar.\n        <\/li>\n<li>\n            <strong>Veri Kayna\u011f\u0131 (Dok\u00fcman Deposu):<\/strong> Orijinal belgelerin (PDF, Word, metin dosyalar\u0131 vb.) depoland\u0131\u011f\u0131 yerdir. Bu belgeler, vekt\u00f6rle\u015ftirme i\u00e7in kullan\u0131l\u0131r ve RAG s\u00fcrecinde LLM&#8217;e sunulmak \u00fczere al\u0131nabilir. Veri izolasyonu burada da sa\u011flanmal\u0131d\u0131r (\u00f6rne\u011fin, kirac\u0131 bazl\u0131 klas\u00f6r yap\u0131s\u0131 veya objeler aras\u0131 yetkilendirme).\n        <\/li>\n<li>\n            <strong>LLM (B\u00fcy\u00fck Dil Modeli):<\/strong> Al\u0131nan ba\u011flam (context) ile birlikte kullan\u0131c\u0131 sorgusunu al\u0131r ve nihai yan\u0131t\u0131 \u00fcretir. Bu genellikle bir \u00fc\u00e7\u00fcnc\u00fc taraf API (OpenAI, Anthropic) veya \u015firket i\u00e7i da\u011f\u0131t\u0131lan bir model olabilir.\n        <\/li>\n<\/ol>\n<h3>Veri \u0130zolasyonu Stratejileri: Kirac\u0131 Verilerini Korumak<\/h3>\n<p>\u00c7ok kirac\u0131l\u0131 bir yap\u0131da veri izolasyonu, g\u00fcvenli\u011fin temelini olu\u015fturur. \u0130\u015fte yayg\u0131n stratejiler:<\/p>\n<ul>\n<li>\n            <strong>Vekt\u00f6r Veritaban\u0131nda Kirac\u0131 Bazl\u0131 \u0130ndeksleme:<\/strong> Her kirac\u0131 i\u00e7in vekt\u00f6r veritaban\u0131nda ayr\u0131 bir indeks veya namespace olu\u015fturmak, en g\u00fc\u00e7l\u00fc izolasyon y\u00f6ntemidir. Bu, bir kirac\u0131n\u0131n sorgular\u0131n\u0131n yanl\u0131\u015fl\u0131kla ba\u015fka bir kirac\u0131n\u0131n verilerine eri\u015fmesini teknik olarak imkans\u0131z hale getirir. Ancak y\u00f6netim ve maliyet a\u00e7\u0131s\u0131ndan daha pahal\u0131 olabilir.\n        <\/li>\n<li>\n            <strong>Metaveri Filtrelemesi (Row-Level Security):<\/strong> Daha esnek bir yakla\u015f\u0131m, t\u00fcm kirac\u0131lar\u0131n verilerini ayn\u0131 vekt\u00f6r veritaban\u0131 indeksinde tutmak ancak her vekt\u00f6re bir &#8216;tenant_id&#8217; metaverisi eklemektir. Sorgulama s\u0131ras\u0131nda, Motia RAG servisi, kullan\u0131c\u0131n\u0131n kirac\u0131 ID&#8217;sini (ve SpiceDB&#8217;den gelen yetki bilgilerini) kullanarak sadece ilgili &#8216;tenant_id&#8217;ye sahip belgelerin getirilmesini sa\u011flayacak filtreler uygular. Bu y\u00f6ntem, daha az y\u00f6netim y\u00fck\u00fc ve daha iyi kaynak kullan\u0131m\u0131 sunar, ancak filtreleme mant\u0131\u011f\u0131n\u0131n do\u011fru uygulanmas\u0131 kritik \u00f6neme sahiptir.\n        <\/li>\n<li>\n            <strong>Fiziksel Veri Depolamas\u0131nda \u0130zolasyon:<\/strong> Orijinal belgelerin sakland\u0131\u011f\u0131 depolama alan\u0131nda (\u00f6rne\u011fin, S3 bucket&#8217;lar\u0131 veya dosya sistemleri), her kirac\u0131 i\u00e7in ayr\u0131 bir dizin veya depolama alan\u0131 kullanmak, belgelerin fiziksel izolasyonunu sa\u011flar.\n        <\/li>\n<\/ul>\n<h3>Yetkilendirme Ak\u0131\u015f\u0131: Bir \u0130stek Nas\u0131l \u0130\u015flenir?<\/h3>\n<p>\u015eimdi bir kullan\u0131c\u0131n\u0131n RAG sistemine bir sorgu g\u00f6nderdi\u011fi andan itibaren yetkilendirme s\u00fcrecinin nas\u0131l i\u015fledi\u011fine bakal\u0131m:<\/p>\n<ol>\n<li>\n            <strong>Kullan\u0131c\u0131 Sorgusu ve Kimlik Do\u011frulama:<\/strong> Kullan\u0131c\u0131, bir web aray\u00fcz\u00fc veya API arac\u0131l\u0131\u011f\u0131yla Motia RAG servisine bir sorgu g\u00f6nderir. \u0130stek API Gateway&#8217;e ula\u015f\u0131r. Burada kullan\u0131c\u0131n\u0131n kimli\u011fi (<code>user_id<\/code>) ve kirac\u0131 kimli\u011fi (<code>tenant_id<\/code>) do\u011frulan\u0131r (\u00f6rne\u011fin, JWT token ile) ve istek ba\u015fl\u0131klar\u0131na eklenerek Motia RAG servisine iletilir.\n        <\/li>\n<li>\n            <strong>Motia RAG Servisi Taraf\u0131ndan \u0130stek \u0130\u015fleme:<\/strong> Motia servisi sorguyu al\u0131r. RAG pipeline&#8217;\u0131n\u0131n bir par\u00e7as\u0131 olarak, verileri vekt\u00f6r veritaban\u0131ndan \u00e7ekmeden \u00f6nce yetkilendirme kontrol\u00fc yapmas\u0131 gerekti\u011fini bilir.\n        <\/li>\n<li>\n            <strong>SpiceDB&#8217;ye Yetki Sorgusu:<\/strong> Motia servisi, kullan\u0131c\u0131n\u0131n (<code>user_id<\/code>) belirtilen kirac\u0131 (<code>tenant_id<\/code>) i\u00e7indeki belgelere eri\u015fim yetkisinin olup olmad\u0131\u011f\u0131n\u0131 veya daha spesifik olarak, hangi belgelere eri\u015febilece\u011fini \u00f6\u011frenmek i\u00e7in SpiceDB&#8217;ye bir sorgu g\u00f6nderir. Bu sorgu &#8220;<code>user:alice, tenant:companyA'n\u0131n document:X \u00fczerinde 'view' izni var m\u0131?<\/code>&#8221; veya &#8220;<code>user:alice, tenant:companyA'n\u0131n 'view' iznine sahip oldu\u011fu t\u00fcm document'lar\u0131 listele<\/code>&#8221; \u015feklinde olabilir.\n        <\/li>\n<li>\n            <strong>Yetki Karar\u0131 ve Belge Alma:<\/strong> SpiceDB, kendi \u015femas\u0131na ve ili\u015fkisel verilerine dayanarak yetki karar\u0131n\u0131 saniyeler i\u00e7inde verir. E\u011fer kullan\u0131c\u0131 yetkili ise, SpiceDB ilgili belge ID&#8217;lerini veya bir onay sinyalini Motia servisine d\u00f6ner.\n        <\/li>\n<li>\n            <strong>Filtreli Vekt\u00f6r Veritaban\u0131 Sorgusu:<\/strong> Motia servisi, SpiceDB&#8217;den ald\u0131\u011f\u0131 yetkilendirilmi\u015f belge ID&#8217;lerini kullanarak vekt\u00f6r veritaban\u0131na bir sorgu g\u00f6nderir. Bu sorgu, kullan\u0131c\u0131n\u0131n orijinal metinsel sorgusu ile birlikte, sadece yetkili oldu\u011fu belgelerle e\u015fle\u015fen vekt\u00f6rleri aramak \u00fczere filtrelenir. Bu ad\u0131m, veri s\u0131z\u0131nt\u0131s\u0131n\u0131 engellemede kilit rol oynar.\n        <\/li>\n<li>\n            <strong>LLM&#8217;den Yan\u0131t \u00dcretimi:<\/strong> Vekt\u00f6r veritaban\u0131ndan al\u0131nan yetkili ve ilgili belgeler, orijinal kullan\u0131c\u0131 sorgusuyla birlikte LLM&#8217;e g\u00f6nderilir. LLM, bu ba\u011flam\u0131 kullanarak do\u011fru ve g\u00fcvenli bir yan\u0131t olu\u015fturur.\n        <\/li>\n<li>\n            <strong>Yan\u0131t\u0131n Kullan\u0131c\u0131ya \u0130letilmesi:<\/strong> LLM&#8217;den gelen yan\u0131t Motia servisi arac\u0131l\u0131\u011f\u0131yla API Gateway&#8217;e ve oradan da kullan\u0131c\u0131ya iletilir.\n        <\/li>\n<\/ol>\n<p>Bu mimari yakla\u015f\u0131m, hem Motia&#8217;n\u0131n RAG yeteneklerinden faydalan\u0131rken hem de SpiceDB&#8217;nin g\u00fc\u00e7l\u00fc ince taneli yetkilendirme mekanizmas\u0131yla veri g\u00fcvenli\u011fini en \u00fcst d\u00fczeye \u00e7\u0131karmay\u0131 ama\u00e7lar. Her bile\u015fenin rol\u00fc ve etkile\u015fimi, \u00f6l\u00e7eklenebilir ve g\u00fcvenli bir yapay zeka uygulamas\u0131n\u0131n temelini olu\u015fturur.<\/p>\n<h2>SpiceDB \u015eemas\u0131 Nas\u0131l Olu\u015fturulur? \u0130nce Taneli Yetkilendirme Modelleri<\/h2>\n<p>SpiceDB&#8217;nin kalbi, yetkilendirme modelinizi tan\u0131mlad\u0131\u011f\u0131n\u0131z \u015femalard\u0131r. Bu \u015femalar, sisteminizdeki objeleri (kaynaklar), kullan\u0131c\u0131lar\u0131 ve bunlar aras\u0131ndaki izin ili\u015fkilerini belirler. \u0130nce taneli yetkilendirme i\u00e7in g\u00fc\u00e7l\u00fc bir \u015fema olu\u015fturmak, do\u011fru eri\u015fim kontrol\u00fcn\u00fc sa\u011flaman\u0131n ilk ve en \u00f6nemli ad\u0131m\u0131d\u0131r.<\/p>\n<h3>SpiceDB&#8217;nin Temel Objeleri: <code>definition<\/code> ve <code>relation<\/code><\/h3>\n<ul>\n<li>\n            <strong><code>definition<\/code>:<\/strong> Bir kaynak t\u00fcr\u00fcn\u00fc veya bir kullan\u0131c\u0131 t\u00fcr\u00fcn\u00fc temsil eder. \u00d6rne\u011fin, bir &#8220;kullan\u0131c\u0131&#8221;, bir &#8220;kirac\u0131&#8221; veya bir &#8220;belge&#8221; birer <code>definition<\/code> olabilir. Her <code>definition<\/code>, kendi i\u00e7inde ili\u015fkileri ve izinleri tan\u0131mlar.\n        <\/li>\n<li>\n            <strong><code>relation<\/code>:<\/strong> \u0130ki <code>definition<\/code> aras\u0131ndaki bir ili\u015fkiyi ifade eder. \u00d6rne\u011fin, <code>tenant<\/code> tan\u0131m\u0131n\u0131n i\u00e7inde bir <code>member<\/code> ili\u015fkisi, bu kirac\u0131n\u0131n hangi kullan\u0131c\u0131lara sahip oldu\u011funu belirtir. Veya <code>document<\/code> tan\u0131m\u0131n\u0131n i\u00e7inde <code>owner<\/code> ili\u015fkisi, belgenin sahibini g\u00f6sterir. \u0130li\u015fkiler, yetki kararlar\u0131n\u0131 almak i\u00e7in kullan\u0131l\u0131r.\n        <\/li>\n<li>\n            <strong><code>permission<\/code>:<\/strong> Bir <code>definition<\/code> \u00fczerinde yap\u0131labilecek mant\u0131ksal bir eylemi temsil eder. \u00d6rne\u011fin, bir <code>document<\/code> \u00fczerinde &#8220;view&#8221; (g\u00f6r\u00fcnt\u00fcleme) izni veya bir <code>tenant<\/code> \u00fczerinde &#8220;admin&#8221; (y\u00f6netici) izni. \u0130zinler, bir veya daha fazla <code>relation<\/code>&#8216;\u0131n birle\u015fiminden (<code>union<\/code>), kesi\u015fiminden (<code>intersection<\/code>) veya hari\u00e7 tutulmas\u0131ndan (<code>exclusion<\/code>) t\u00fcretilebilir.<\/li>\n<\/ul>\n<h3>\u00d6rnek Bir Yetkilendirme \u015eemas\u0131: \u00c7ok Kirac\u0131l\u0131 RAG \u0130\u00e7in<\/h3>\n<p>\u015eimdi, Motia tabanl\u0131 \u00e7ok kirac\u0131l\u0131 RAG sistemimiz i\u00e7in basit ama g\u00fc\u00e7l\u00fc bir SpiceDB \u015femas\u0131 olu\u015ftural\u0131m. Bu \u015fema, kullan\u0131c\u0131lar\u0131n kirac\u0131lara, belgelerin kirac\u0131lara ve kullan\u0131c\u0131lara nas\u0131l ba\u011fl\u0131 oldu\u011funu tan\u0131mlayacak.<\/p>\n<pre><code>\ndefinition user {}\n\ndefinition tenant {\n    \/\/ 'member' ili\u015fkisi, bu kirac\u0131n\u0131n hangi kullan\u0131c\u0131lara sahip oldu\u011funu belirtir.\n    \/\/ Bir 'user' do\u011frudan 'member' olabilir veya bir gruptan gelebilir.\n    relation member: user | user:... # user, user:group#member\n\n    \/\/ 'document' ili\u015fkisi, bu kirac\u0131ya ait belgeleri belirtir.\n    \/\/ Genellikle bir belge, bir kirac\u0131ya ba\u011fl\u0131d\u0131r.\n    relation document: document\n\n    \/\/ 'view_all_documents' izni, bu kirac\u0131n\u0131n t\u00fcm belgelerini g\u00f6rebilme yetkisini tan\u0131mlar.\n    \/\/ Bu izin, kirac\u0131n\u0131n 'member'\u0131 olan herkese otomatik olarak verilebilir.\n    permission view_all_documents = member\n}\n\ndefinition document {\n    \/\/ 'owner' ili\u015fkisi, belgenin sahibini belirtir.\n    relation owner: user\n\n    \/\/ 'parent_tenant' ili\u015fkisi, bu belgenin hangi kirac\u0131ya ait oldu\u011funu belirtir.\n    \/\/ Bu, \u00e7ok kirac\u0131l\u0131 yap\u0131 i\u00e7in kritik bir ba\u011flant\u0131d\u0131r.\n    relation parent_tenant: tenant\n\n    \/\/ 'viewer' ili\u015fkisi, do\u011frudan bu belgeye eri\u015fim yetkisi olan kullan\u0131c\u0131lar\u0131 belirtir.\n    relation viewer: user\n\n    \/\/ 'view' izni, bir belgenin g\u00f6r\u00fcnt\u00fclenebilir olup olmad\u0131\u011f\u0131n\u0131 belirler.\n    \/\/ Bu izin, birden fazla ko\u015fulun birle\u015fimi olabilir:\n    \/\/ 1. Belgenin sahibi olmak ('owner').\n    \/\/ 2. Do\u011frudan 'viewer' olarak atanm\u0131\u015f olmak.\n    \/\/ 3. Belgenin ait oldu\u011fu kirac\u0131n\u0131n t\u00fcm belgelerini g\u00f6r\u00fcnt\u00fcleme yetkisine sahip olmak ('parent_tenant->view_all_documents').\n    \/\/ 'parent_tenant->view_all_documents' ifadesi, 'document' objesinin 'parent_tenant' ili\u015fkisi \u00fczerinden\n    \/\/ 'tenant' objesine ba\u011flan\u0131p, o 'tenant' objesi \u00fczerindeki 'view_all_documents' iznini kontrol etmesi anlam\u0131na gelir.\n    permission view = owner or viewer or parent_tenant->view_all_documents\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u015fema ile \u015funlar\u0131 yapabiliriz:<\/p>\n<ul>\n<li>Bir kullan\u0131c\u0131y\u0131 bir kirac\u0131n\u0131n \u00fcyesi (<code>tenant:companyA#member@user:alice<\/code>) yapabiliriz.<\/li>\n<li>Bir belgeyi belirli bir kirac\u0131ya atayabiliriz (<code>document:doc123#parent_tenant@tenant:companyA<\/code>).<\/li>\n<li>Belirli bir kullan\u0131c\u0131y\u0131 belirli bir belgenin g\u00f6r\u00fcnt\u00fcleyicisi yapabiliriz (<code>document:doc123#viewer@user:bob<\/code>).<\/li>\n<\/ul>\n<p>Daha sonra Motia RAG servisi, bir kullan\u0131c\u0131n\u0131n bir belgeye eri\u015fip eri\u015femedi\u011fini kontrol etmek i\u00e7in SpiceDB'ye \"<code>check<\/code>\" sorgusu g\u00f6nderebilir: \"<code>user:alice<\/code>'\u0131n <code>document:doc123<\/code> \u00fczerinde <code>view<\/code> izni var m\u0131?\" SpiceDB, \u015femadaki tan\u0131mlamalar ve var olan ili\u015fkiler \u00fczerinden bu soruyu h\u0131zl\u0131ca yan\u0131tlar.<\/p>\n<h3>ACL ve RBAC Modellerinin SpiceDB ile \u0130fadesi<\/h3>\n<p>SpiceDB, hem ACL (Access Control List) hem de RBAC (Role-Based Access Control) modellerini kolayca ifade etmenizi sa\u011flar:<\/p>\n<ul>\n<li>\n            <strong>ACL Yakla\u015f\u0131m\u0131:<\/strong> Her belge i\u00e7in do\u011frudan kimlerin g\u00f6r\u00fcnt\u00fcleyici olaca\u011f\u0131n\u0131 belirtebiliriz. Yukar\u0131daki \u015femadaki <code>document#viewer: user<\/code> ili\u015fkisi buna bir \u00f6rnektir. Do\u011frudan <code>document:X#viewer@user:Y<\/code> \u015feklinde ili\u015fkiler ekleyerek spesifik belgelere bireysel eri\u015fim tan\u0131mlayabilirsiniz.\n        <\/li>\n<li>\n            <strong>RBAC Yakla\u015f\u0131m\u0131:<\/strong> Kirac\u0131ya \"member\" veya \"admin\" gibi roller tan\u0131mlayabiliriz. Yukar\u0131daki \u015femada <code>tenant#member: user<\/code> bir rol\u00fc temsil eder. Bu rol, <code>tenant#view_all_documents<\/code> gibi bir izni otomatik olarak ta\u015f\u0131r. Daha karma\u015f\u0131k senaryolarda, \"group\" veya \"role\" ad\u0131nda yeni <code>definition<\/code>'lar olu\u015fturarak ve bunlar\u0131 kullan\u0131c\u0131larla veya di\u011fer kaynaklarla ili\u015fkilendirerek tam te\u015fekk\u00fcll\u00fc RBAC modelleri kurabiliriz. \u00d6rne\u011fin, bir \"admin\" grubunun t\u00fcm kirac\u0131lar\u0131n t\u00fcm belgelerini g\u00f6r\u00fcnt\u00fcleme iznine sahip olmas\u0131n\u0131 tan\u0131mlayabiliriz.\n        <\/li>\n<\/ul>\n<p>SpiceDB'nin esnekli\u011fi, i\u015f gereksinimlerinize en uygun yetkilendirme modelini se\u00e7menize ve bunu \u015femada a\u00e7\u0131k\u00e7a ifade etmenize olanak tan\u0131r. \u015eema, sisteminizin yetkilendirme mant\u0131\u011f\u0131n\u0131 merkezi ve denetlenebilir bir yerde tutar, bu da bak\u0131m ve geli\u015ftirme s\u00fcre\u00e7lerini basitle\u015ftirir. \u015eeman\u0131z\u0131 s\u00fcrekli olarak g\u00f6zden ge\u00e7irmek ve geli\u015ftirmek, uygulaman\u0131z\u0131n g\u00fcvenlik duru\u015funu g\u00fc\u00e7lendirecektir.<\/p>\n<h2>Motia ile RAG Ak\u0131\u015f\u0131na Yetkilendirme Nas\u0131l Entegre Edilir? Uygulamal\u0131 Ad\u0131mlar<\/h2>\n<p>\u015eimdiye kadar temel kavramlar\u0131 ve mimariyi ele ald\u0131k. Art\u0131k Motia tabanl\u0131 RAG pipeline'\u0131m\u0131za SpiceDB ile ince taneli yetkilendirmeyi pratik olarak nas\u0131l entegre edece\u011fimizi inceleyelim. Bu b\u00f6l\u00fcm, kod \u00f6rnekleriyle birlikte ad\u0131m ad\u0131m bir yakla\u015f\u0131m sunacakt\u0131r.<\/p>\n<h3>Ad\u0131m 1: Motia RAG Pipeline'\u0131 Olu\u015fturma ve Haz\u0131rl\u0131k<\/h3>\n<p>\u00d6ncelikle, Motia'n\u0131n temel bir RAG pipeline'\u0131n\u0131 kurmu\u015f olman\u0131z gerekir. Bu, genellikle bir vekt\u00f6r veritaban\u0131 (\u00f6rne\u011fin, Chroma, Pinecone) ve bir LLM (\u00f6rne\u011fin, OpenAI GPT modelleri) ile entegrasyonu i\u00e7erir. Motia, bu s\u00fcreci basitle\u015ftiren soyutlamalar sunar. Diyelim ki, belgeleri zaten vekt\u00f6rle\u015ftirip vekt\u00f6r veritaban\u0131na kaydettiniz.<\/p>\n<p>Yetkilendirme i\u00e7in, kullan\u0131c\u0131n\u0131n kimli\u011fini (<code>user_id<\/code>) ve hangi kirac\u0131ya ait oldu\u011funu (<code>tenant_id<\/code>) her istekte alman\u0131z hayati \u00f6nem ta\u015f\u0131r. Bu bilgiler genellikle API Gateway'de kimlik do\u011frulama s\u00fcrecinden sonra JWT token gibi bir mekanizma ile elde edilir ve RAG servisine ba\u015fl\u0131klar veya sorgu parametreleri olarak iletilir.<\/p>\n<aside class=\"expert-tip\">\n        Uzman \u0130pucu: Kirac\u0131 ID'si ve Kullan\u0131c\u0131 ID'si gibi bilgileri API Gateway seviyesinde do\u011frulay\u0131p sanitize etmek, a\u015fa\u011f\u0131 ak\u0131\u015f servislerinizin daha g\u00fcvenli olmas\u0131n\u0131 sa\u011flar. G\u00fcvenilir olmayan kaynaklardan gelen verileri do\u011frudan kullanmaktan ka\u00e7\u0131n\u0131n.<br \/>\n    <\/aside>\n<h3>Ad\u0131m 2: SpiceDB \u0130stemcisini Entegre Etme<\/h3>\n<p>Motia servisi i\u00e7inde SpiceDB ile ileti\u015fim kurmak i\u00e7in SpiceDB istemcisini kullanman\u0131z gerekecek. Python i\u00e7in <code>grpcio<\/code> ve <code>authzed<\/code> k\u00fct\u00fcphanelerini y\u00fcklemeniz gerekir:<\/p>\n<pre><code>\npip install grpcio grpcio-tools authzed\n    <\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, Motia servisi uygulaman\u0131zda SpiceDB istemcisini ba\u015flat\u0131n:<\/p>\n<pre><code>\n    from motia import RAGPipeline\n    from spicedb.api import Client as SpiceDBClient\n    from spicedb.errors import PermissionDeniedError # Yetkilendirme reddedildi\u011finde kullanmak i\u00e7in\n\n    # SpiceDB istemcisini global veya dependency injection ile ba\u015flat\u0131n\n    # 'grpc.authzed.com:443' yerine kendi SpiceDB sunucunuzun adresini yaz\u0131n.\n    # 'your_spicedb_token' yerine Authzed.com'dan ald\u0131\u011f\u0131n\u0131z veya kendi sunucunuzdan olu\u015fturdu\u011funuz API token'\u0131 koyun.\n    try:\n        spicedb_client = SpiceDBClient(\"grpc.authzed.com:443\", \"your_spicedb_token\")\n        # Bir deneme check ile ba\u011flant\u0131y\u0131 kontrol edin (iste\u011fe ba\u011fl\u0131)\n        # from spicedb.v1 import CheckPermissionRequest\n        # request = CheckPermissionRequest(resource={\"object_type\": \"tenant\", \"object_id\": \"any_tenant\"},\n        #                                  permission=\"view_all_documents\",\n        #                                  subject={\"object_type\": \"user\", \"object_id\": \"test_user\"})\n        # response = spicedb_client.check_permission(request)\n        # print(f\"SpiceDB ba\u011flant\u0131 testi ba\u015far\u0131l\u0131: {response.permissionship}\")\n    except Exception as e:\n        print(f\"SpiceDB ba\u011flant\u0131 hatas\u0131: {e}\")\n        spicedb_client = None # Hata durumunda istemciyi None yapabiliriz veya uygulamay\u0131 sonland\u0131rabiliriz.\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kod blo\u011fu, uygulaman\u0131z\u0131n ba\u015flang\u0131c\u0131nda SpiceDB istemcisini nas\u0131l yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 g\u00f6sterir. Hata y\u00f6netimi, \u00fcretim ortamlar\u0131nda b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<h3>Ad\u0131m 3: Motia RAG Pipeline'\u0131na Yetkilendirme Mant\u0131\u011f\u0131n\u0131 Enjekte Etme<\/h3>\n<p>Motia'n\u0131n <code>RAGPipeline<\/code> s\u0131n\u0131f\u0131n\u0131 geni\u015fleterek veya pipeline'\u0131n belirli ad\u0131mlar\u0131n\u0131 (\u00f6zellikle <code>retrieve<\/code> ad\u0131m\u0131n\u0131) \u00f6zelle\u015ftirerek yetkilendirme mant\u0131\u011f\u0131n\u0131 entegre edebiliriz. Amac\u0131m\u0131z, vekt\u00f6r veritaban\u0131ndan belgeleri \u00e7ekmeden \u00f6nce kullan\u0131c\u0131n\u0131n yetkilerini kontrol etmek ve yaln\u0131zca yetkili belgelere ili\u015fkin filtreleri uygulamakt\u0131r.<\/p>\n<pre><code>\n    from motia import RAGPipeline, Document\n    from spicedb.api import Client as SpiceDBClient\n    from spicedb.errors import PermissionDeniedError\n    from spicedb.v1 import CheckPermissionRequest, LookupResourcesRequest, ObjectReference\n\n    # SpiceDB istemcisini global olarak veya s\u0131n\u0131f yap\u0131c\u0131da al\u0131n\n    # \u00d6rnekte basitlik ad\u0131na do\u011frudan kullan\u0131yoruz\n    # Ger\u00e7ek uygulamada dependency injection kullan\u0131lmas\u0131 \u00f6nerilir.\n    _spicedb_client = SpiceDBClient(\"grpc.authzed.com:443\", \"YOUR_SPICEDB_TOKEN\")\n\n    class AuthorizedRAG(RAGPipeline):\n        def __init__(self, *args, **kwargs):\n            super().__init__(*args, **kwargs)\n            self.spicedb_client = _spicedb_client # D\u0131\u015far\u0131dan al\u0131nan istemciyi kullan\n\n        def retrieve(self, query: str, user_id: str, tenant_id: str, **kwargs) -> list[Document]:\n            # Kullan\u0131c\u0131n\u0131n hangi belgelere eri\u015febilece\u011fini SpiceDB'den sorgula\n            authorized_document_ids = self._get_authorized_documents(user_id, tenant_id)\n\n            if not authorized_document_ids:\n                # Kullan\u0131c\u0131n\u0131n eri\u015febilece\u011fi belge yoksa yetki reddi hatas\u0131 f\u0131rlat\n                raise PermissionDeniedError(f\"Kullan\u0131c\u0131 {user_id}'in kirac\u0131 {tenant_id} i\u00e7inde eri\u015febilece\u011fi belge bulunamad\u0131.\")\n\n            print(f\"DEBUG: Kullan\u0131c\u0131 {user_id} i\u00e7in yetkilendirilen belge ID'leri: {authorized_document_ids}\")\n\n            # Vekt\u00f6r veritaban\u0131ndan sadece yetkili belgeler aras\u0131nda arama yap\n            # Bu k\u0131s\u0131m Motia'n\u0131n dahili filtreleme mekanizmalar\u0131yla entegre edilmelidir.\n            # \u00d6rne\u011fin, vekt\u00f6r veritaban\u0131 sorgusuna metaveri filtresi ekleyerek:\n            # Belgelerin 'document_id' metaverisi, yetkili ID'ler listesinde olmal\u0131d\u0131r.\n            # Motia'n\u0131n retrieve metodu genellikle bir 'filters' arg\u00fcman\u0131 kabul eder.\n            # A\u015fa\u011f\u0131daki sat\u0131r, bu filtrenin nas\u0131l eklenebilece\u011fine dair bir \u00f6rnek.\n            \n            # Not: Motia'n\u0131n kendi retrieve metodunu \u00e7a\u011f\u0131r\u0131rken, \n            # buradaki 'filters' arg\u00fcman\u0131n\u0131n vekt\u00f6r veritaban\u0131n\u0131z taraf\u0131ndan desteklendi\u011finden emin olun.\n            # \u00d6rne\u011fin, ChromaDB'de 'where' veya Pinecone'da 'filter' gibi isimler alabilir.\n            # E\u011fer Motia do\u011frudan bu filtreyi desteklemiyorsa, retrieval \u00f6ncesi belge ID'lerini\n            # manuel olarak filtreleyebilir veya vekt\u00f6r veritaban\u0131 istemcinizi do\u011frudan \u00e7a\u011f\u0131rabilirsiniz.\n            \n            # \u00d6rnek: Motia'n\u0131n dahili retrieve metodunu kullan\u0131rken filtreleme\n            documents = super().retrieve(query, filters={\"document_id\": {\"$in\": authorized_document_ids}})\n            \n            # Gerekirse, al\u0131nan belgeler \u00fczerinde son bir yetkilendirme kontrol\u00fc daha yapabilirsiniz.\n            # Bu, e\u011fer vekt\u00f6r veritaban\u0131 filtrelemeyi tam olarak yapam\u0131yorsa ek bir g\u00fcvenlik katman\u0131 sa\u011flar.\n            final_authorized_docs = [doc for doc in documents if doc.metadata.get(\"document_id\") in authorized_document_ids]\n            \n            return final_authorized_docs\n\n        def _get_authorized_documents(self, user_id: str, tenant_id: str) -> list[str]:\n            # SpiceDB'ye sorgu yap: 'user:user_id' bu 'document' \u00fczerinde 'view' iznine sahip mi?\n            # Belirli bir kirac\u0131ya ait t\u00fcm belgeler i\u00e7in sorgulama yapmak genellikle 'LookupResources' API'si ile yap\u0131l\u0131r.\n            \n            print(f\"DEBUG: SpiceDB'den user:{user_id} i\u00e7in tenant:{tenant_id} i\u00e7indeki 'document' objeleri \u00fczerinde 'view' izni aran\u0131yor.\")\n            \n            try:\n                # 'LookupResources' ile belirli bir konu (user) i\u00e7in belirli bir izin (view) ile eri\u015febilece\u011fi\n                # belirli bir kaynak tipindeki (document) t\u00fcm kaynaklar\u0131 listele.\n                # parent_tenant ili\u015fkisi \u00fczerinden tenant_id'yi de filtreleyebiliriz.\n                lookup_request = LookupResourcesRequest(\n                    resource_object_type=\"document\",\n                    permission=\"view\",\n                    subject=ObjectReference(object_type=\"user\", object_id=user_id),\n                    # Kontext olarak kirac\u0131 ID'sini vermek, lookup sonu\u00e7lar\u0131n\u0131 kirac\u0131ya g\u00f6re filtreleyebilir.\n                    # Bu, SpiceDB \u015femas\u0131na ve ili\u015fki tan\u0131mlamalar\u0131na ba\u011fl\u0131d\u0131r.\n                    context_raw={\n                        \"tenant_id\": {\"stringValue\": tenant_id}\n                    }\n                )\n                \n                response = self.spicedb_client.lookup_resources(lookup_request)\n                \n                authorized_ids = [r.resource_object_id for r in response.resources]\n                return authorized_ids\n                \n            except Exception as e:\n                print(f\"SpiceDB lookup hatas\u0131: {e}\")\n                return []\n\n    # Bu authorized_rag_pipeline'\u0131 Motia'n\u0131n normal pipeline'\u0131 gibi kullan\u0131n.\n    # \u00d6rnek kullan\u0131m:\n    # from motia.vector_stores import ChromaVectorStore\n    # from motia.llms import OpenAIModel\n\n    # # Vekt\u00f6r deposu ve LLM'i ba\u015flat\n    # vector_store = ChromaVectorStore(collection_name=\"my_documents\") # \u00d6rnek\n    # llm = OpenAIModel(model_name=\"gpt-4\") # \u00d6rnek\n\n    # # Yetkili RAG pipeline'\u0131n\u0131 olu\u015ftur\n    # authorized_rag_pipeline = AuthorizedRAG(vector_store=vector_store, llm=llm)\n\n    # try:\n    #     response = authorized_rag_pipeline.query(\n    #         \"\u015eirket politikalar\u0131 nelerdir?\",\n    #         user_id=\"alice\",\n    #         tenant_id=\"companyA\"\n    #     )\n    #     print(\"Yan\u0131t:\", response.answer)\n    # except PermissionDeniedError as e:\n    #     print(\"Eri\u015fim Reddedildi:\", e)\n    # except Exception as e:\n    #     print(\"Bir hata olu\u015ftu:\", e)\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kodda, <code>AuthorizedRAG<\/code> s\u0131n\u0131f\u0131, Motia'n\u0131n <code>RAGPipeline<\/code>'\u0131n\u0131 geni\u015fletir. Anahtar de\u011fi\u015fiklik, <code>retrieve<\/code> metodunda yap\u0131lm\u0131\u015ft\u0131r. Bu metod, vekt\u00f6r veritaban\u0131ndan belge almadan \u00f6nce <code>_get_authorized_documents<\/code> yard\u0131mc\u0131 metodunu \u00e7a\u011f\u0131r\u0131r. Bu yard\u0131mc\u0131 metod, SpiceDB'nin <code>lookup_resources<\/code> API'sini kullanarak belirli bir kullan\u0131c\u0131n\u0131n ve kirac\u0131n\u0131n eri\u015fim yetkisine sahip oldu\u011fu t\u00fcm belge ID'lerini listeler. Daha sonra, Motia'n\u0131n orijinal <code>retrieve<\/code> metodu \u00e7a\u011fr\u0131l\u0131rken bu belge ID'leri bir filtre olarak kullan\u0131l\u0131r. Bu sayede, RAG sistemi sadece kullan\u0131c\u0131n\u0131n g\u00f6rmeye yetkili oldu\u011fu belgeler \u00fczerinden bilgi \u00e7ekip yan\u0131t \u00fcretecektir.<\/p>\n<h3>Ad\u0131m 4: Veri Al\u0131m\u0131 (Ingestion) ve \u0130li\u015fkilerin Y\u00f6netimi<\/h3>\n<p>Belgeleri Motia'ya y\u00fcklerken, her belge i\u00e7in ilgili <code>tenant_id<\/code> ve di\u011fer metaverileri (\u00f6rne\u011fin, <code>document_id<\/code>) saklamak \u00f6nemlidir. Ayn\u0131 zamanda, bu belgeler ve kullan\u0131c\u0131lar aras\u0131ndaki yetkilendirme ili\u015fkilerini SpiceDB'ye yazman\u0131z gerekir. \u00d6rne\u011fin, yeni bir belge eklendi\u011finde:<\/p>\n<ul>\n<li><code>document:new_doc_id#parent_tenant@tenant:companyA<\/code> ili\u015fkisini ekleyin.<\/li>\n<li>Gerekirse, belirli kullan\u0131c\u0131lar i\u00e7in <code>document:new_doc_id#viewer@user:alice<\/code> ili\u015fkisini ekleyin.<\/li>\n<li>Motia'n\u0131n vekt\u00f6rle\u015ftirme s\u00fcrecinde, <code>document_id<\/code> ve <code>tenant_id<\/code> gibi bilgileri vekt\u00f6rlerin metaverilerine ekleyin. Bu, daha sonra filtreleme i\u00e7in kullan\u0131lacakt\u0131r.<\/li>\n<\/ul>\n<p>Bu ad\u0131mlar, \u00e7ok kirac\u0131l\u0131 RAG uygulaman\u0131zda hem g\u00fcvenli\u011fi hem de \u00f6l\u00e7eklenebilirli\u011fi sa\u011flarken, geli\u015ftirici deneyimini de basitle\u015ftirecektir. Motia, RAG s\u00fcrecinin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 y\u00f6netirken, SpiceDB de yetkilendirme karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 \u00fcstlenir.<\/p>\n<h2>\u0130leri D\u00fczey Optimizasyonlar ve En \u0130yi Uygulamalar<\/h2>\n<p>Bir \u00e7ok kirac\u0131l\u0131 RAG sistemini Motia ve SpiceDB ile kurduktan sonra, performans\u0131 art\u0131rmak, g\u00fcvenli\u011fi peki\u015ftirmek ve bak\u0131m kolayl\u0131\u011f\u0131 sa\u011flamak i\u00e7in baz\u0131 ileri d\u00fczey teknikleri ve en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak faydal\u0131 olacakt\u0131r.<\/p>\n<h3>Performans Optimizasyonu: Caching ve Sorgu Stratejileri<\/h3>\n<ul>\n<li>\n            <strong>SpiceDB Cache:<\/strong> SpiceDB, yetkilendirme kararlar\u0131n\u0131 h\u0131zl\u0131 bir \u015fekilde vermek \u00fczere tasarlanm\u0131\u015ft\u0131r, ancak y\u00fcksek frekansl\u0131 sorgular i\u00e7in istemci taraf\u0131nda veya bir ara katmanda caching kullanmak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bir kullan\u0131c\u0131n\u0131n belirli bir belgeye eri\u015fim izni gibi s\u0131k sorgulanan kararlar, k\u0131sa \u00f6m\u00fcrl\u00fc bir cache'te tutulabilir. Authzed'in sa\u011flad\u0131\u011f\u0131 veya kendi geli\u015ftirdi\u011finiz cache katmanlar\u0131n\u0131 kullanabilirsiniz. \u00d6zellikle <code>CheckPermission<\/code> \u00e7a\u011fr\u0131lar\u0131 cache'lemek i\u00e7in iyi adaylard\u0131r.\n        <\/li>\n<li>\n            <strong>RAG Cache:<\/strong> S\u0131k sorulan kullan\u0131c\u0131 sorgular\u0131 ve bunlar\u0131n RAG taraf\u0131ndan \u00fcretilen yan\u0131tlar\u0131 da cache'lenebilir. Bu, hem LLM maliyetlerini d\u00fc\u015f\u00fcr\u00fcr hem de yan\u0131t s\u00fcrelerini k\u0131salt\u0131r. Kirac\u0131ya \u00f6zel cache anahtarlar\u0131 kullan\u0131larak izolasyon sa\u011flanmal\u0131d\u0131r.\n        <\/li>\n<li>\n            <strong>Optimize Edilmi\u015f SpiceDB \u015eemas\u0131:<\/strong> \u015eeman\u0131z\u0131 m\u00fcmk\u00fcn oldu\u011funca verimli tasarlay\u0131n. Gereksiz veya \u00e7ok geni\u015f ili\u015fkilerden ka\u00e7\u0131n\u0131n. \u00d6zellikle <code>LookupResources<\/code> gibi i\u015flemler, iyi tan\u0131mlanm\u0131\u015f ili\u015fkilerle daha h\u0131zl\u0131 \u00e7al\u0131\u015f\u0131r. \u0130li\u015fki d\u00f6ng\u00fclerinden veya \u00e7ok derin i\u00e7 i\u00e7e ge\u00e7mi\u015f ili\u015fkilerden ka\u00e7\u0131nmak performans\u0131 art\u0131rabilir.\n        <\/li>\n<li>\n            <strong>Vekt\u00f6r Veritaban\u0131 Optimizasyonu:<\/strong> Vekt\u00f6r veritaban\u0131n\u0131z\u0131n indeksleme stratejilerini ve donan\u0131m kaynaklar\u0131n\u0131 optimize edin. Metaveri filtrelemelerinin h\u0131zl\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. B\u00fcy\u00fck kirac\u0131lar i\u00e7in ayr\u0131 indeksler kullanmak veya sharding stratejileri uygulamak d\u00fc\u015f\u00fcn\u00fclebilir.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik Denetimleri ve Loglama<\/h3>\n<ul>\n<li>\n            <strong>Kapsaml\u0131 Loglama:<\/strong> T\u00fcm yetkilendirme kararlar\u0131n\u0131 (ba\u015far\u0131l\u0131 ve ba\u015far\u0131s\u0131z), Motia RAG servisindeki anahtar i\u015flemleri ve SpiceDB sorgular\u0131n\u0131 loglay\u0131n. Bu loglar, g\u00fcvenlik denetimleri, hata ay\u0131klama ve potansiyel g\u00fcvenlik ihlallerini tespit etmek i\u00e7in hayati \u00f6neme sahiptir.\n        <\/li>\n<li>\n            <strong>Eri\u015fim Denetimi:<\/strong> SpiceDB'nin Audit Log \u00f6zelliklerini kullan\u0131n. Bu loglar, kimin hangi yetkilendirme karar\u0131n\u0131 ne zaman sorgulad\u0131\u011f\u0131n\u0131 g\u00f6stererek \u015feffafl\u0131k sa\u011flar.\n        <\/li>\n<li>\n            <strong>G\u00fcvenlik Taramalar\u0131 ve Testleri:<\/strong> D\u00fczenli olarak g\u00fcvenlik a\u00e7\u0131\u011f\u0131 taramalar\u0131 (Vulnerability Scans) ve s\u0131zma testleri (Penetration Tests) yap\u0131n. \u00c7ok kirac\u0131l\u0131 bir sistemde, kirac\u0131lar aras\u0131 izolasyonun do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test etmek kritik \u00f6neme sahiptir.\n        <\/li>\n<li>\n            <strong>En Az Yetki Prensibi:<\/strong> Kullan\u0131c\u0131lara ve sistem servislerine yaln\u0131zca g\u00f6revlerini yerine getirmek i\u00e7in kesinlikle ihtiya\u00e7 duyduklar\u0131 minimum yetkileri verin. Bu prensip, olas\u0131 g\u00fcvenlik ihlallerinin etkisini s\u0131n\u0131rlar.<\/li>\n<\/ul>\n<h3>Hata Y\u00f6netimi ve Geri D\u00f6n\u00fc\u015f Stratejileri<\/h3>\n<ul>\n<li>\n            <strong>Yetkilendirme Hatalar\u0131n\u0131n Y\u00f6netimi:<\/strong> SpiceDB'den gelen <code>PermissionDeniedError<\/code> gibi hatalar\u0131 d\u00fczg\u00fcn bir \u015fekilde ele al\u0131n. Kullan\u0131c\u0131ya a\u00e7\u0131k ve bilgilendirici mesajlar g\u00f6sterin (ancak hassas i\u00e7 sistem bilgilerini if\u015fa etmeyin). G\u00fcvenlik a\u00e7\u0131s\u0131ndan, yetki hatas\u0131nda \"bulunamad\u0131\" yerine \"eri\u015fim izniniz yok\" gibi daha net ifadeler kullanmak \u00f6nemlidir.\n        <\/li>\n<li>\n            <strong>SpiceDB Eri\u015filebilirlik Sorunlar\u0131:<\/strong> SpiceDB servisine ula\u015f\u0131lamazsa ne olaca\u011f\u0131n\u0131 planlay\u0131n. Sisteminiz, yetkilendirme servisinin ge\u00e7ici olarak kullan\u0131lamad\u0131\u011f\u0131 durumlarda varsay\u0131lan bir g\u00fcvenli modda \u00e7al\u0131\u015fmal\u0131 veya kullan\u0131c\u0131lara uygun bir hata mesaj\u0131 sunmal\u0131d\u0131r. Bir \"fail-safe\" mekanizmas\u0131 d\u00fc\u015f\u00fcn\u00fcn.\n        <\/li>\n<li>\n            <strong>Geri D\u00f6n\u00fc\u015f Mekanizmalar\u0131:<\/strong> Nadiren de olsa bir yetkilendirme karar\u0131n\u0131n yanl\u0131\u015f olma ihtimaline kar\u015f\u0131 bir geri d\u00f6n\u00fc\u015f veya manuel denetim mekanizmas\u0131 d\u00fc\u015f\u00fcn\u00fclebilir.<\/li>\n<\/ul>\n<h3>Mobil Uyumluluk \u0130\u00e7in HTML ve CSS \u0130pu\u00e7lar\u0131<\/h3>\n<p>Yapay zeka uygulamalar\u0131 genellikle \u00e7e\u015fitli cihazlardan eri\u015filir. Mobil uyumlu bir kullan\u0131c\u0131 deneyimi sunmak i\u00e7in HTML ve CSS taraf\u0131nda a\u015fa\u011f\u0131daki noktalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurabilirsiniz:<\/p>\n<ul>\n<li>\n            <strong>Duyarl\u0131 Tasar\u0131m (Responsive Design):<\/strong> Esnek bir grid sistemi ve g\u00f6receli birimler (<code>%<\/code>, <code>em<\/code>, <code>rem<\/code>, <code>vw<\/code>, <code>vh<\/code>) kullanarak uygulaman\u0131z\u0131n farkl\u0131 ekran boyutlar\u0131na uyum sa\u011flamas\u0131n\u0131 sa\u011flay\u0131n.\n        <\/li>\n<li>\n            <strong>Meta Viewport Etiketi:<\/strong> Her zaman HTML <code><head><\/code> b\u00f6l\u00fcm\u00fcn\u00fcze a\u015fa\u011f\u0131daki etiketi ekleyin:<\/p>\n<pre><code>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n            <\/pre>\n<p><\/code><br \/>\n            Bu, taray\u0131c\u0131ya sayfan\u0131n cihaz\u0131n geni\u015fli\u011fine g\u00f6re \u00f6l\u00e7eklenmesini s\u00f6yler.\n        <\/li>\n<li>\n            <strong>Media Queries:<\/strong> Belirli ekran boyutlar\u0131 i\u00e7in farkl\u0131 stil kurallar\u0131 tan\u0131mlamak i\u00e7in CSS media query'lerini kullan\u0131n. \u0130\u015fte bir \u00f6rnek:<\/p>\n<pre><code>\n<style>\n\/* Genel masa\u00fcst\u00fc stilleri *\/\nbody {\n    font-family: Arial, sans-serif;\n    line-height: 1.6;\n    margin: 0 auto;\n    max-width: 1200px;\n    padding: 20px;\n}\nh2 {\n    font-size: 2.2em;\n    color: #2c3e50;\n}\nh3 {\n    font-size: 1.7em;\n    color: #34495e;\n}\npre {\n    background-color: #ecf0f1;\n    border-left: 5px solid #3498db;\n    padding: 15px;\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu ekler *\/\n    white-space: pre-wrap; \/* Uzun kod sat\u0131rlar\u0131n\u0131 sarar *\/\n    word-wrap: break-word; \/* Sat\u0131r sonu ekler *\/\n}\ntable {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 20px;\n}\ntable th, table td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left;\n}\n.expert-tip {\n    background-color: #e8f5e9;\n    border-left: 5px solid #4caf50;\n    padding: 15px;\n    margin-bottom: 20px;\n    color: #2e7d32;\n    font-style: italic;\n}\n\n\/* Mobil cihazlar i\u00e7in stil tan\u0131mlamalar\u0131 (768px ve alt\u0131) *\/\n@media (max-width: 768px) {\n    body {\n        font-size: 15px;\n        padding: 15px;\n    }\n    h2 {\n        font-size: 1.6em;\n    }\n    h3 {\n        font-size: 1.3em;\n    }\n    pre {\n        font-size: 0.9em;\n        padding: 10px;\n    }\n    table {\n        \/* K\u00fc\u00e7\u00fck ekranlarda tablolar\u0131n kayd\u0131r\u0131labilir olmas\u0131n\u0131 sa\u011flar *\/\n        display: block;\n        overflow-x: auto;\n        white-space: nowrap;\n    }\n    table thead, table tbody, table th, table td, table tr {\n        display: block; \/* Her sat\u0131r\u0131 ve h\u00fccreyi blok eleman\u0131 yapar *\/\n    }\n    table tr {\n        margin-bottom: 10px;\n        border: 1px solid #ddd;\n    }\n    table td {\n        border: none;\n        border-bottom: 1px solid #eee;\n        position: relative;\n        padding-left: 50%; \/* Ba\u015fl\u0131k i\u00e7in yer a\u00e7ar *\/\n        text-align: right;\n    }\n    table td::before {\n        \/* Ba\u015fl\u0131klar\u0131 mobil g\u00f6r\u00fcn\u00fcmde h\u00fccrelere ekler *\/\n        position: absolute;\n        left: 6px;\n        width: 45%;\n        padding-right: 10px;\n        white-space: nowrap;\n        text-align: left;\n        font-weight: bold;\n    }\n    \/* \u0130lk sat\u0131rdaki ba\u015fl\u0131klar\u0131 gizler, :before ile yeniden g\u00f6sterir *\/\n    table td:nth-of-type(1)::before { content: \"Ba\u015fl\u0131k 1\"; }\n    table td:nth-of-type(2)::before { content: \"Ba\u015fl\u0131k 2\"; }\n    \/* ... di\u011fer ba\u015fl\u0131klar i\u00e7in de benzer \u015fekilde devam eder ... *\/\n}\n\n\/* \u00c7ok k\u00fc\u00e7\u00fck ekranlar i\u00e7in (480px ve alt\u0131) *\/\n@media (max-width: 480px) {\n    body {\n        font-size: 14px;\n        padding: 10px;\n    }\n    h2 {\n        font-size: 1.4em;\n    }\n    h3 {\n        font-size: 1.2em;\n    }\n    .expert-tip {\n        padding: 10px;\n        font-size: 0.9em;\n    }\n}\n<\/style>\n            <\/pre>\n<p><\/code><br \/>\n            Yukar\u0131daki CSS \u00f6rne\u011finde, \u00f6zellikle <code>pre<\/code> etiketleri i\u00e7in <code>white-space: pre-wrap;<\/code> ve <code>word-wrap: break-word;<\/code> \u00f6zelliklerini kullanarak uzun kod sat\u0131rlar\u0131n\u0131n mobil cihazlarda d\u00fczg\u00fcn bir \u015fekilde sar\u0131lmas\u0131n\u0131 sa\u011flad\u0131k. Tablolar i\u00e7in de mobil uyumlu bir \u00e7\u00f6z\u00fcm sunarak, dar ekranlarda yatay kayd\u0131rma \u00e7ubu\u011fu veya blok g\u00f6r\u00fcn\u00fcm\u00fc ile verilerin okunabilirli\u011fini art\u0131rd\u0131k. Bu uygulamalar, son kullan\u0131c\u0131n\u0131n cihaz\u0131ndan ba\u011f\u0131ms\u0131z olarak tutarl\u0131 ve eri\u015filebilir bir deneyim ya\u015famas\u0131n\u0131 sa\u011flar.\n        <\/li>\n<\/ul>\n<h2>Sonu\u00e7: Gelece\u011fin G\u00fcvenli Yapay Zeka Uygulamalar\u0131na Do\u011fru<\/h2>\n<p>Bu makalede, \u00e7ok kirac\u0131l\u0131 RAG sistemlerinin karma\u015f\u0131kl\u0131klar\u0131n\u0131, kar\u015f\u0131la\u015f\u0131lan g\u00fcvenlik zorluklar\u0131n\u0131 ve bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in Motia ve SpiceDB'nin nas\u0131l g\u00fc\u00e7l\u00fc bir kombinasyon olu\u015fturdu\u011funu detayl\u0131 bir \u015fekilde inceledik. Modern yapay zeka uygulamalar\u0131n\u0131n yayg\u0131nla\u015fmas\u0131yla birlikte, veri g\u00fcvenli\u011fi, kirac\u0131lar aras\u0131 izolasyon ve ince taneli yetkilendirme her zamankinden daha kritik bir hale gelmi\u015ftir. Motia'n\u0131n RAG geli\u015ftirme s\u00fcre\u00e7lerini basitle\u015ftiren yetenekleri ile SpiceDB'nin Google Zanzibar modelinden ilham alan \u00f6l\u00e7eklenebilir ve esnek yetkilendirme mimarisini bir araya getirerek, sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda sa\u011flam ve g\u00fcvenli yapay zeka \u00e7\u00f6z\u00fcmleri in\u015fa edebiliriz.<\/p>\n<p>Motia, geli\u015ftiricilerin LLM'ler ve bilgi tabanlar\u0131 aras\u0131ndaki entegrasyonun teknik detaylar\u0131na bo\u011fulmadan, as\u0131l i\u015f mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131r. SpiceDB ise, hangi kullan\u0131c\u0131n\u0131n hangi veriye eri\u015febilece\u011fi sorusunu h\u0131zl\u0131 ve tutarl\u0131 bir \u015fekilde yan\u0131tlayarak, RAG pipeline'\u0131n\u0131n her ad\u0131m\u0131nda veri g\u00fcvenli\u011fini teminat alt\u0131na al\u0131r. Birbirini tamamlayan bu iki teknoloji, kurumsal d\u00fczeyde \u00f6l\u00e7eklenebilir ve hassas yetkilendirme gerektiren yapay zeka uygulamalar\u0131 i\u00e7in ideal bir temel sunar. Bu entegrasyon sayesinde, farkl\u0131 \u015firketlerin veya departmanlar\u0131n kendi verileri \u00fczerinde g\u00fcvenle \u00e7al\u0131\u015fabildi\u011fi, veri s\u0131z\u0131nt\u0131s\u0131 riskinin minimuma indi\u011fi ve kullan\u0131c\u0131 deneyiminin optimize edildi\u011fi bir ortam yarat\u0131labilir. Gelecekte, yapay zeka teknolojileri i\u015f s\u00fcre\u00e7lerimize daha da entegre olduk\u00e7a, bu t\u00fcr g\u00fcvenli ve \u00f6l\u00e7eklenebilir mimarilerin \u00f6nemi artmaya devam edecektir. Bu ba\u011flamda, Motia ve SpiceDB ikilisi, gelece\u011fin g\u00fcvenli ve verimli yapay zekas\u0131 i\u00e7in bir yol haritas\u0131 sunmaktad\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n            <strong>Motia ve SpiceDB'nin kurulumu karma\u015f\u0131k m\u0131?<\/strong><\/p>\n<p>Her iki teknoloji de modern geli\u015ftirme yakla\u015f\u0131mlar\u0131n\u0131 benimsemi\u015ftir. Motia, Python tabanl\u0131 bir k\u00fct\u00fcphane olup kurulumu nispeten basittir (<code>pip install motia<\/code>). SpiceDB ise bir gRPC servisi olarak \u00e7al\u0131\u015f\u0131r ve Docker, Kubernetes gibi platformlarda kolayca da\u011f\u0131t\u0131labilir. Authzed.com \u00fczerinden y\u00f6netilen bir SpiceDB bulut servisi de mevcuttur, bu da kendi sunucunuzu kurma y\u00fck\u00fcn\u00fc ortadan kald\u0131r\u0131r. Entegrasyon k\u0131sm\u0131, her iki API'nin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 \u00f6\u011frenmeyi gerektirse de, sa\u011flad\u0131\u011f\u0131 g\u00fcvenlik ve esneklik g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda bu \u00f6\u011frenme e\u011frisi kesinlikle de\u011ferlidir.<\/p>\n<\/li>\n<li>\n            <strong>Farkl\u0131 yetkilendirme modelleri SpiceDB ile nas\u0131l uygulan\u0131r?<\/strong><\/p>\n<p>SpiceDB, \u015femalar arac\u0131l\u0131\u011f\u0131yla son derece esnek yetkilendirme modelleri olu\u015fturman\u0131za olanak tan\u0131r. Rol tabanl\u0131 eri\u015fim kontrol\u00fc (RBAC) i\u00e7in \"role\" veya \"group\" gibi <code>definition<\/code>'lar tan\u0131mlayabilir ve bunlar\u0131 kullan\u0131c\u0131larla ili\u015fkilendirebilirsiniz. Nitelik tabanl\u0131 eri\u015fim kontrol\u00fc (ABAC) i\u00e7in ise, \u015femaya objelerin veya ili\u015fkilerin niteliklerini yans\u0131tabilirsiniz. \u00d6rne\u011fin, bir belgenin \"gizlilik seviyesi\" niteli\u011fini \u015femaya ekleyerek, kullan\u0131c\u0131n\u0131n \"g\u00fcvenlik izni\" niteli\u011fine g\u00f6re eri\u015fimini kontrol edebilirsiniz. \u0130li\u015fkisel yap\u0131s\u0131 sayesinde karma\u015f\u0131k hiyerar\u015fik veya matris tabanl\u0131 yetkilendirme modelleri de uygulanabilir.<\/p>\n<\/li>\n<li>\n            <strong>Bu entegrasyon performans \u00fczerinde bir etki yarat\u0131r m\u0131?<\/strong><\/p>\n<p>Her ek g\u00fcvenlik katman\u0131 gibi, SpiceDB entegrasyonu da teorik olarak performansa minimal bir y\u00fck getirebilir. Ancak SpiceDB, Google Zanzibar'dan ilham alan mimarisi sayesinde y\u00fcksek performans ve d\u00fc\u015f\u00fck gecikme s\u00fcresi i\u00e7in optimize edilmi\u015ftir. Do\u011fru \u015fema tasar\u0131m\u0131 ve etkili caching stratejileri (hem SpiceDB istemcisinde hem de Motia RAG servisinde) kullan\u0131larak, bu etki minimize edilebilir. Asl\u0131nda, yetkilendirme kararlar\u0131n\u0131 uygulama katman\u0131nda manuel olarak y\u00f6netmekten \u00e7ok daha verimli ve tutarl\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Motia d\u0131\u015f\u0131nda ba\u015fka RAG \u00e7er\u00e7eveleriyle kullan\u0131labilir mi?<\/strong><\/p>\n<p>Kesinlikle evet. SpiceDB, dilden ve framework'ten ba\u011f\u0131ms\u0131z bir yetkilendirme servisidir. Geli\u015ftirdi\u011fimiz entegrasyon mant\u0131\u011f\u0131 (yani, belge al\u0131m\u0131ndan \u00f6nce SpiceDB'ye sorgu g\u00f6ndermek), LangChain, LlamaIndex gibi di\u011fer RAG \u00e7er\u00e7eveleriyle veya tamamen \u00f6zel olarak yaz\u0131lm\u0131\u015f RAG pipeline'lar\u0131yla da uyarlanabilir. \u00d6nemli olan, RAG ak\u0131\u015f\u0131n\u0131n hangi noktas\u0131nda yetkilendirme kontrol\u00fc yap\u0131lmas\u0131 gerekti\u011fini ve bu kontrol\u00fcn sonu\u00e7lar\u0131n\u0131n (yetkilendirilmi\u015f belge ID'leri gibi) nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 anlamakt\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34749","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme<\/title>\n<meta name=\"description\" content=\"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme\" \/>\n<meta property=\"og:description\" content=\"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-21T12:01:33+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"33 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme\",\"datePublished\":\"2025-11-21T12:01:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\"},\"wordCount\":5466,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\",\"name\":\"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-21T12:01:33+00:00\",\"description\":\"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme","description":"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/","og_locale":"tr_TR","og_type":"article","og_title":"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme","og_description":"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?","og_url":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-21T12:01:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"33 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme","datePublished":"2025-11-21T12:01:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/"},"wordCount":5466,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/","url":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/","name":"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-21T12:01:33+00:00","description":"Modern yapay zeka uygulamalar\u0131, \u00f6zellikle Retrieval-Augmented Generation (RAG) sistemleri, bilgiye eri\u015fimi devrim niteli\u011finde kolayla\u015ft\u0131r\u0131yor. Ancak bu sistemleri birden fazla kirac\u0131n\u0131n (\u00f6rne\u011fin, farkl\u0131 \u015firketler veya departmanlar) kullanabilece\u011fi \u00e7ok kirac\u0131l\u0131 (multi-tenant) bir yap\u0131da kurmak, veri g\u00fcvenli\u011fi ve hassas yetkilendirme konusunda ciddi zorluklar do\u011furabilir. Peki, veri s\u0131z\u0131nt\u0131s\u0131 riskini ortadan kald\u0131r\u0131rken her kullan\u0131c\u0131n\u0131n sadece yetkili oldu\u011fu bilgilere eri\u015fmesini nas\u0131l sa\u011flayabiliriz?","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/multi-tenant-rag-motia-ve-spicedb-ile-kapsamli-yetkilendirme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Multi-Tenant RAG: Motia ve SpiceDB ile Kapsaml\u0131 Yetkilendirme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34749"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34749\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}