Na věcech, které se nesmí, se Microsoft v .NET opravdu vyřádil. Tradiční
"role-based security" (tj. omezení podle uživatele) zobecňuje .NET na "evidence-based
security", tj. omezení podle celkem čehokoli. Praktický příklad:
Mám .NET komponentu (která není zadarmo), a chtěl bych k ní udělat demo aplikaci.
Problém je, že přibalím-li komponentu k demu, může jí používat i jakýkoli jiný
klient, a jak by řekl Jára Cimrman, to už pak snad ani není demo... Kdybych pracoval
nad skutečným, nikoli virtuálním hardwarem, stačilo by zkompilovat do jednoho
spustitelného souboru, ale .NET funguje jinak: veškerá rozhraní implementovaná v .NET
assembly jsou z něj exportovaná - i když je to assembly třeba
spustitelný soubor
- a deklarovat rozhraní jako privátní nikomu nebrání, aby ho stejně nezavolal (akorát se
to volání nedá přeložit, ale to je pouze omezení překladače -
dynamický přístup pomocí
reflexe funguje). Správným řešením je specifikovat povolení ("povolení" ve smyslu co
není povoleno, je zakázáno), konkrétně StrongNameIdentityPermission.
Dokumentace Microsoftu
k tomuto atributu není nijak zvlášť informativní; naštěstí už někdo udělal
příklad.
Popsaný postup mi připadá hodně nelogický - přidávání klíče zkompilované komponenty
do jejích zdrojáků svědčí o totálním nezájmu architektů zabezpečovacího mechanismu
o automatizovaný build - ale nic jiného holt nefunguje...