kurt_adam_osman
Security Context'i permission bazlı hazırlarsanız sisteme her yeni rol eklendiğinde uygulamayı tekrar tekrar build alip deploy etmek zorunda kalmazsınız. Kullanıcı birden fazla role sahipse rollerdeki butün permleri tek bir flat map'e düşürüp o permlerin olup olmadığının kontrolünü yapabilirsiniz.
permissionlar flag, enum yada bir unsigned collection olabilir. Dikkat etmen gereken yer her perm bir önceki permin 2.kuvveti ve Bunlari binary olarak düşün.
None = 0, // 00000
A = 1, // 00001
B = 2, // 00010
C = 4, // 00100
D = 8, // 01000
E = 16, // 10000
All = ~None // 11111
Her bir perm aynı zamanda bir öncekine göre 1 basamak kaymış hali 😃 Collection illa 256 bitten oluşmak zorunda değil cok daha uzun bit dizesi olabilir
All ise None
'daki bitlerin tersine çevrilmiş hali (~00000) yani 11111
|
or veya &
operatörü ile istenilen permlerin bir kaçının yada hepsinin olup olmadığı kontrol edilebilir.
https://www.geeksforgeeks.org/bitwise-operators-in-java/
ustteki linkteki örnekten gidiyorum
Ben uygulamamda bir resource erişilebilmesi için B yada C permlerinden en az birini istiyorum. Bitwise Or operatörü ile kontrol edebilirim
B = 00010 = tam sayi olarak 2 |
C = 00101 = tam sayı olarak 5
sonuc 00111 = tam sayi olarak 7 oluyor.
00111( istenilen permlerin toplanmış hali) ^ 00101(bende olan perm) >= 0 // true
00111 ^ (00101 | 00010) >= 0 // true
00111 ^ 010001 >= 0 // false
seklinde kontrol edebilirim
B yada C permlerinin 2 sini birden istiyorum bu sefer & operatoru kullanılabilir
perm = 00101 = 5 & 00111 = 7
perm = 00010 = 2
perm ^ 00101 == 0
// false
kendi projemde c# ile kullandığım örnek. İşinize yarar mı bilmiyorum
https://github.com/stellayazilim/lunaloot/blob/main/LunaLoot.Master.Contracts/Common/Identity/PermissionAuthorizationHandler.cs