C# - Jogok megadása a szerveren futó kódnak

Kód futtatása Web-ről 2. rész

forráskód letöltése
A sorozat első részében megismerkedhettünk a dinamikus, Web-ről történő kódbetöltés alapjaival. A bemutatott példában hiába próbáltunk volna implementálni olyan funkciót, mely a fájlrendszerhez vagy egyéb védett erőforráshoz próbál meg hozzáférni, a kivétel generálódott volna. Ez annak tulajdonítható, hogy a Web-ről érkező kód alapértelmezésben nem megbízható, így az erőforrás-hozzáférés le van tiltva. Ez azonban orvosolható, a cikkünkben kiderítjük hogyan.
A mellékelt példa megnyitása előtt két lépést kell elvégezni, szigorúan a következő sorrendben. Első lépésben fordítsa le a példát, majd a Server projekt által generált Server.dll dinamikusan szerkeszthető könyvtárat másolja a SampleDir02 mappába. Második lépésben létre kell hozni egy SampleDir02 nevű virtuális könyvtárat, mely a példa mappájában található SampleDir02 könyvtárra mutat. Ehhez nyissa meg a mappa Tulajdonság ablakát, és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A mellékelt példa megint csak két projektet tartalmaz. A Server projekt tartalmazza a Web-en futó assembly kódját, mely egy megjelenő dialógusablak. A dialógusablak két nyomógombjával írni és olvasni lehet a kliensalkalmazás mappájában elhelyezett sample.txt állományt.
Ennek a műveletnek az elvégzése azonban nem lehetséges alapértelmezésben, mert elvégzését megakadályozza a System.Security.Permissions.FileIOPermisson kivétel létrejötte, a bevezetőben említett okból.
A .NET Framework azonban tartalmaz egy varázslót, melynek segítségével a futtatandó kód egy magasabb bizalmi szintre hozható, vagyis jogokat adhatunk bizonyos jogköteles műveletek elvégzéséhez.

A varázsló Microsoft .NET Framework Wizards nevet viseli, és a Felügyeleti eszközökben érhető el legkönnyebben, vagy a következő elérési útvonalon:
C:\WINDOWS\Microsoft.NET\Framework\<verziószám>\ConfigWizards.exe
A program elindításakor három lehetőség közül választhatunk. Válasszuk a Trust an Assembly (középső) varázslót. Ez szolgál a jogok létrehozásának megkönnyítésére.
A varázsló indításakor megjelenik az első panel, melyen megadható, hogy rendszerszinten adjunk-e jogot az assembly-nek vagy elegendő az adott felhasználói profilban. Válasszuk a rendszerszintű jogadási módot.
A következő panelen meg kell adni azt az URL-t, melyen a kód elérhető.


Jelen esetben ez az URL a következő:
http://localhost/SampleDir02/Server.dll
A Tovább gombra kattintva megjelenik egy újabb panel, melyen beállíthatjuk a kód szükséges bizalmi szintjét, mely feljogosítja az assembly-t a szinthez kapcsolódó jogok gyakorlására, akár a fájlműveletekre is.
Az egyszerűség kedvéért a szintet állítsuk most Full Trust-ra. A kód így teljes jogú assembly-vé válik. Ez a jog azonban veszélyes is lehet, ennek megfelelően csak megbízható kódnak adjunk ilyen jogot.
A következő panel egy összesítő táblázatot tartalmaz az elvégzett műveletekről.

A Befejezés gombra kattintva a jogok azonnal érvénybe lépnek, vagyis a kód rögtön hozzáférhet a fájlrendszer elemeihez, így a kliensalkalmazás sample.txt állományához is.

A kliensalkalmazás betöltődésekor egy változóban tároljuk a sample.txt állomány elérési útvonalát.
filepath = Application.StartupPath + "\\sample.txt";
Ezt a változót adjuk át a sorozat korábbi számában megismert metódushíváskor, a Form1 osztály példányosításakor.
Object o = Activator.CreateInstance(t,new object[]{filepath});
Ez a paraméter lesz a szerveralkalmazás konstruktorának átadva, hogy a kód tudja, mely fájlból kell olvasnia, illetve írnia.
public Form1(string path)
{
  filepath = path; 
}
A megjelenő dialógusablak nyomógombjaival kiírhatjuk a szövegmezőben megadott szöveget a sample.txt állományba, illetve a fájlban tárolt szöveget megjeleníthetjük a szövegmezőben.

Kód futtatása Webről cikksorozat

Jogok megadása a szerveren futó kódnak - Kód futtatása Web-ről 2. rész