C# - Könyvtár- és állományhozzáférés szabályozása

forráskód letöltése
Vannak olyan esetek, amikor szabályozni szeretnénk a merevlemez valamely elemének hozzáférését, például bizonyos műveleteket szeretnénk programból letiltani. A .NET Framework osztálykönyvtára rendelkezésre bocsát egy olyan osztályt, mellyel befolyásolható a fájlrendszer egy adott mappájának, vagy akár egy állományának hozzáférési jogosultsága. Cikkünkben megismerkedhetünk ezzel az osztállyal, a mellékelt példában pedig bemutatjuk, hogyan használhatjuk.
FileIOPermission osztály
A FileIOPermission osztály használható arra, hogy szabályozzuk egy adott mappa- vagy állomány hozzáférésének kritériumait. Őse a CodeAccessPermission osztály, mely definiálja a verem alapú hozzáférés-szabályozás alapvető struktúráját. Ennek eredményeképpen a kódok nem férhetnek hozzá olyan erőforrásokhoz, melyeket megtiltunk neki. A szabályok betartásáról a CLR (Common Language Runtime) gondoskodik, mint mindenek felett álló erő.
Amikor a fájlrendszer adott objektumához valamilyen jogosultságot definiálunk, akkor készítünk egy példányt az osztályból. Konstruktorában meg kell adnunk a jogosultságot, és a könyvtár, illetve állomány elérési útvonalát:
FileIOPermission
Osztály: FileIOPermission
public FileIOPermission(
FileIOPermissionAccess access,
string path
);
Létrehozó konstruktor.
Paraméterek
FileIOPermissionAccess access
A jogosultságot meghatározó felsorolt típus. Lehetséges értékei:
Érték Magyarázat
AllAccess Egyesíti magában az Append, a Read, a Write, és a PathDiscovery jogosultságokat.
Append Ez magában foglalja a fájl-, vagy mappalétrehozás jogosultságát is. Lehetővé teszi új információk hozzáfűzését a létező állomány végére.
NoAccess Nem engedélyez semmilyen hozzáférést.
PathDiscovery Lehetővé teszi, hogy információkat szerezzünk a fájlrendszer objektumairól anélkül, hogy tartalmukat megismernénk. Csak mappákhoz definiálható.
Read Olvasási jogosultság.
Write Biztosítja a fájl, vagy mappa létrehozásának, felülírásának műveletét, valamint a fájl tartalmának írását is.
string path
Elérési útvonal.
AddPathList
Osztály: FileIOPermission
public void AddPathList(
FileIOPermissionAccess access,
string path
);
Az osztály konstruktorában nem adható meg egynél több jogosultság, ha több jogosultság kombinációjára van szükségünk, használnunk kell az AddPathList metódust, melyben kombinálhatók a felsorolt típus elemei.
Paraméterek
FileIOPermissionAccess access
Jogosultság, vagy ezek kombinációja.
string path
Elérési útvonal.
Még egy metódusát érdemes megemlíteni az adott osztályban, melynek segítségével drasztikusan befolyásolható az objektummal összekapcsolt mappa, vagy állomány hozzáférése.
Deny
Osztály: FileIOPermission
public void Deny();
Letiltható az adott fájlrendszer eleméhez való teljes hozzáférés. Ezzel elejét vehetjük az olyan szituációnak, melyben egy kisebb jogosultságú kód úgy kezd futni, hogy azt meghívja egy magasabb szinten található kód.
Példaalkalmazás
A példánkban a Mappa nevű könyvtárban található Allow.txt szöveges állomány beolvasására, majd változtatás utáni mentésére van lehetőségünk akkor, ha a Form-on található megfelelő jelölőnégyzeteket kijelöljük.
Amennyiben a megfelelő négyzetet nem jelöljük ki, akkor az adott műveletnek nem lesz jogosultsága végrehajtódni.
A műveletvégzéskor a következőképpen járunk el:
CodeAccessPermission userperm = new FileIOPermission(FileIOPermissionAccess.Read,Application.StartupPath + "\\Mappa\\Allow.txt");
A FileIOPermission objektum létrehozása után - amennyiben szükséges - megvonjuk a hozzáférési jogosultságot az illető művelettől, így futáskor az kivételt generál.
userperm.Deny();
A keletkező kivétel SecurityException típusú lesz.