در این مقاله قصد داریم یک فولدر را با استفاده از کد نویسی قفل کنیم بصورتی که کاربر نتواند وارد آن شود.
نمیخواهم که وارد مطالب جانبی از جمله طریقه ی انتخاب فولدر و چیزهای دیگر شوم ، پس کد را در رویداد لود فرم مینویسیم و خودمان آدرس فولدر را مستقیما در کد نویسی وارد میکنیم.
برای قفل کردن فولدر از متدی به نام SetAccessControl موجود در کلاس DirectoryInfo استفاده میکنیم و خود این کلاس نیز در فضای نامی System.IO قرار دارد پس قبل از هر کاری این فضای نامی را معرفی میکنیم.
حال یک شی از نوع DirectoryInfo میسازیم و آدرس فولدری که میخواهیم قفل کنیم را به آن میدهیم.
کد:
DirectoryInfo di = new DirectoryInfo("d:\\folder");
اگر متد SetAccessControl مخصوص به di را بنویسید خواهید دید که یک شی از کلاس DirectorySecurity بعنوان پارامتر ورودی از شما میخواهد ، پس یک شی از این کلاس بسازید :d
اما قبل از این کار فضای نامی مخصوص آنرا نیز در بالا معرفی کنید.
کد:
using System.Security.AccessControl;
و
کد:
DirectorySecurity ds = di.GetAccessControl();
کاری که ما تا اینجا انجام دادیم این است که ابتدا فولدر را معرفی کردیم و اکسس کنترل آنرا در شی ds قرار دادیم حالا میتوانیم با استفاده از متد AddAccessRule روی آن قانون دسترسی معرفی کنیم ، پس ابتدا یک قانون دسترسی معرفی می کنیم و آنرا به این متد میدهیم :
کد:
FileSystemAccessRule ar = new
FileSystemAccessRule(Environment.UserDomainName+"\ \"+Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny);
ds.AddAccessRule(ar);
دوخط بالا شلوغ به نظر میرسند ، پس توضیح میدهم ، در خط اول برای ساخت یک شی از نوع FileSystemAccessRule باید در پارامتر اول کاربری که میخواهیم این قانون دسترسی به آن نسبت داده شود وارد میکنیم ، که به این صورت عمل میکنیم ابتدا نام کامپیوتر و سپس “\” و نام کاربری را وارد میکنیم که برای کاربر جاری میتوانیم از کلاس Environment کمک بگیریم.
در پارامتر دوم نوع دسترسی مثلا Delete ، Create و غیره را تعریف میکنیم که ما از FullControl استفاده میکنیم و در نهایت هم یا Allow یا Deny را اعمال میکنیم.
به زبان ساده ما گفته ایم کاربر جاری ، هیچ نوع دسترسی به این فولدر ندارد.
در نهایت این قانون دسترسی را با متد AddAccessRule به لیست قوانین این فولد اضافه میکنیم.
جمله ای که بالا گفتم اشتباه است :d ما فقط یک شی از DirectorySecurity ساختیم و به آن قانون اضافه کردیم.
با di.GetAccessControl تنها DirectorySecurity مان را مقدار دهی اولیه کردیم و هنوز به فولدر نسبت داده نشده است پس باید این DirectorySecurity را به فولدر نسبت دهیم :
کد:
di.SetAccessControl(ds);
برای باز کردن مجدد فولد از متد RemoveAccessRule استفاده کنید.
موفق باشید
کد کامل قفل کردن فولدر :
کد:
DirectoryInfo di = new DirectoryInfo("d:\\folder");
2DirectorySecurity ds = di.GetAccessControl();
3FileSystemAccessRule ar = new FileSystemAccessRule(Environment.UserDomainName+"\ \"+Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny);
4ds.AddAccessRule(ar);
5di.SetAccessControl(ds);