Üstadlara Bir Sorum var, api kullanımında yetkilendirme hk.
6
●170
- 02-09-2019, 08:43:17Bir alt yapı projesinde api yazıyoruz, örnek vermek gerekirse müşteri bilgilerini listeleyen bir api olsun. Bu api yi kullanan kişilere sınırlama getirmek istiyorum, herkes tc no sunu görmesin veya herkes müşterinin doğum tarihini görmesin şeklinde, bu apiyi 10bin yazılımcı kullandığını düşünün nasıl bir mantık ile yazılması doğru olur. Şöyle bir senaryoda var müdürler görsün, yöneticiler görsün ama onun altındakiler göremesin veya Ahmet görsün Mehmet göremesin şeklinde bir hiyerarşi de olacak. Bu mimari tasarım nasıl yapılmalı sizce?
- 02-09-2019, 09:01:10api keye yetki verebilirsiniz veya kullanıcılar tablosunda her kullanıcıya yetki verip api keyden kullanıcı bilgilerine göre yetkisi varsa görsün olarak yapabilirsiniz
3 tip listeleme işlemi yapabilirsiniz
yönetici full yetki yetki_id = 2
yazılımcı orta yetki yetki_id = 1
kullanıcı kısıtlı yetki yetki_id = 0
şeklinde olabilir - 02-09-2019, 09:04:45User- Role - Claim yetkilendirmesi api için yeterli olur. Github da çok fazla örnek vardır. Asp.net core api bunun en sağlam temellerini veriyor zaten.
Mantık şu şekilde : Öncelikle kullanıcıların olacak bunlar User bu kullanıcılar rollerle birlikte oluşturulacak.
Örnek Sistem Admin rolü tüm rollerde kullanıcı oluşturabilecek.
Yönetici sistem admin hariç tüm rollerde kullanıcı oluşturabilecek. gibi altına istediğin kadar sıralayabilirsin.
Peki bunu nasıl yapacaksın claimler ile her methodunun veya tüm class'ının bir claim'i olacak.
Örnek: AdminCreate: Yönetici oluşturma fonksiyonu Claim (AdminCreate)
AdminCreate claim'ini sadece Sistem Admin rolüne ekleyeceksin. Böylelikle sistem admin harici biri bu method'a girmeye çalışırsa api tarafından direk engellenecek isteği alınmayacak.
"Bu api yi kullanan kişilere sınırlama getirmek istiyorum, herkes tc no sunu görmesin veya herkes müşterinin doğum tarihini görmesin şeklinde, bu apiyi 10bin yazılımcı kullandığını düşünün nasıl bir mantık ile yazılması doğru olur. "
Bunu tam nerde yapacağını anlamadım api da methodlara claim bazlı sınırlamalar, claim bazlı outputlar yapabilirsin. Frontend tarafında ise basit mantık if(AdminClaim) adminin görmesi görekenleri göster Else gösterme.
"müdürler görsün, yöneticiler görsün ama onun altındakiler göremesin "
Müdür rolü ve yöneticirolü görsün ama onun altına oluşturduğu roller göremesin demek buda. Yine rol bazlı yetkilendirme.
"Ahmet görsün Mehmet göremesin "
Bu da user claim roller belirli claimlere sahip olduğu gibi kullanıcılara rol harici claim atayabilirsin başka bir tabloda.
Yani Ahmet'e Sistem Admin rolü atama ama o rolün altındaki AdminCreate claim'ini atarsan sadece yönetici oluşturabilir. Ama sistem adminin diğer yaptıklarını yapamaz.
Bu konuda sevdiğim bir eğitim ve github linki:
https://jasonwatmore.com/post/2019/0...th-example-api
github linki vs hepsi içinde var kolay gelsin.
JWT token kullanmanı öneririm girişlerde kişinin role ve claimlerini bu tokende dönebilirsin. Temel olarak böyle farklı bir sorun olursa sorabilirsin. - 02-09-2019, 09:05:20Yönetici yazılımcı kullanıcı kısmı 3 tane değil dinamik olarak yönetilecek, kurumsal büyük bir yazılım olarak düşünmek gerek, yüzbinlerce olabiliralisahanyalcin adlı üyeden alıntı: mesajı görüntüle
Claim i inceleyeceğim, değerli bilgiler için teşekkür ederim, diğer bir sorum da şu apileri dışarıya açtım, ben sadece bir ekranda kullanılsın bunu mimari olarak kontrol altına almak istiyorum. X yazılımcısı maaş projesi yapıyor sadece maaş ekranı altında çalışsın, bunu nasıl yönetebilirim.
parsyazilim adlı üyeden alıntı: mesajı görüntüle - 02-09-2019, 09:28:21Kullanıcıların api methodlarını göreceği yere aldığı rol ve claimlere gösterirsin sadece görmek istediklerini görürler. Bunları yönetmek için api'ye bir frontend yaparsın. Sadece senin bildiğin senin yönettiğin (herkesin giriş yaptığı frontend ede koyabilirsin sadece Sistem Admin rolünün göreceği şekilde frontend de düzenlemeler yapman yeterli) buraya sistem admin yani senin için diğer kişilerin rollerini ve claimlerini yönettiğin sayfalar yaparsın. Buradan dinamik olarak tüm mimariyi kontrol edersin. Rol ekle,düzenle,sil, rol claim düzenleme, claim ekle,düzenle,sil, role claim atama,çıkarma, kullanıcıya claim atama,çıkarmaosal adlı üyeden alıntı: mesajı görüntüle
"X yazılımcısı maaş projesi yapıyor sadece maaş ekranı altında çalışsın, bunu nasıl yönetebilirim."
Burada tam yapmak istediğini anlamadım ekran derken yazılımcının kod yazdığı dosyalar mı ne kastediyorsun anlamında ama sadece belirli methodları kullanmaksa kasttetiğin yazılımcının methodları göreceği ekranı ve methodları claimlere göre yetkilendirmen yeterli olacaktır. Böyle X yazılımcısı sadece maaş methodlarını görür, sadece maaş methodlarında işlem yapabilir. - 02-09-2019, 15:12:58Hocam claim i test ettim status 431 hatası veriyor yani token içine az data alıyor bizim bayağı büyük claim datamız olacak. Örnek vereyim 20bin tane işlem yapılan program olacak her program ekranı için ilgili kullanıcı yetkileri olacak. Test ettiğimde header token 34bin text uzunluğundan fazla olduğunda 431 status hatası veriyor. Başka yontem varmıdır header size arttırma falan yapılıyor mu acaba?veya başka çözüm?
parsyazilim adlı üyeden alıntı: mesajı görüntüle - 02-09-2019, 21:04:18Hocam claimleri token de döndürmenize gerek yok. Kullanıcıyı rolleriyle birlikte dönün sonra rol ve kullanıcı id ile claim getirin ona göre kontrol yapın problem olmaz istediğiniz gibi bir altyapı yapabilirsiniz.osal adlı üyeden alıntı: mesajı görüntüle