۱۵-آذر-۱۳۹۲, ۱۵:۰۹:۴۹
در این مقاله قصد داریم یک فولدر را با استفاده از کد نویسی قفل کنیم بصورتی که کاربر نتواند وارد آن شود.
نمیخواهم که وارد مطالب جانبی از جمله طریقه ی انتخاب فولدر و چیزهای دیگر شوم ، پس کد را در رویداد لود فرم مینویسیم و خودمان آدرس فولدر را مستقیما در کد نویسی وارد میکنیم.
برای قفل کردن فولدر از متدی به نام SetAccessControl موجود در کلاس DirectoryInfo استفاده میکنیم و خود این کلاس نیز در فضای نامی System.IO قرار دارد پس قبل از هر کاری این فضای نامی را معرفی میکنیم.
حال یک شی از نوع DirectoryInfo میسازیم و آدرس فولدری که میخواهیم قفل کنیم را به آن میدهیم.
اگر متد SetAccessControl مخصوص به di را بنویسید خواهید دید که یک شی از کلاس DirectorySecurity بعنوان پارامتر ورودی از شما میخواهد ، پس یک شی از این کلاس بسازید :d
اما قبل از این کار فضای نامی مخصوص آنرا نیز در بالا معرفی کنید.
و
کاری که ما تا اینجا انجام دادیم این است که ابتدا فولدر را معرفی کردیم و اکسس کنترل آنرا در شی ds قرار دادیم حالا میتوانیم با استفاده از متد AddAccessRule روی آن قانون دسترسی معرفی کنیم ، پس ابتدا یک قانون دسترسی معرفی می کنیم و آنرا به این متد میدهیم :
دوخط بالا شلوغ به نظر میرسند ، پس توضیح میدهم ، در خط اول برای ساخت یک شی از نوع FileSystemAccessRule باید در پارامتر اول کاربری که میخواهیم این قانون دسترسی به آن نسبت داده شود وارد میکنیم ، که به این صورت عمل میکنیم ابتدا نام کامپیوتر و سپس “\” و نام کاربری را وارد میکنیم که برای کاربر جاری میتوانیم از کلاس Environment کمک بگیریم.
در پارامتر دوم نوع دسترسی مثلا Delete ، Create و غیره را تعریف میکنیم که ما از FullControl استفاده میکنیم و در نهایت هم یا Allow یا Deny را اعمال میکنیم.
به زبان ساده ما گفته ایم کاربر جاری ، هیچ نوع دسترسی به این فولدر ندارد.
در نهایت این قانون دسترسی را با متد AddAccessRule به لیست قوانین این فولد اضافه میکنیم.
جمله ای که بالا گفتم اشتباه است :d ما فقط یک شی از DirectorySecurity ساختیم و به آن قانون اضافه کردیم.
با di.GetAccessControl تنها DirectorySecurity مان را مقدار دهی اولیه کردیم و هنوز به فولدر نسبت داده نشده است پس باید این DirectorySecurity را به فولدر نسبت دهیم :
برای باز کردن مجدد فولد از متد RemoveAccessRule استفاده کنید.
موفق باشید
کد کامل قفل کردن فولدر :
نمیخواهم که وارد مطالب جانبی از جمله طریقه ی انتخاب فولدر و چیزهای دیگر شوم ، پس کد را در رویداد لود فرم مینویسیم و خودمان آدرس فولدر را مستقیما در کد نویسی وارد میکنیم.
برای قفل کردن فولدر از متدی به نام SetAccessControl موجود در کلاس DirectoryInfo استفاده میکنیم و خود این کلاس نیز در فضای نامی System.IO قرار دارد پس قبل از هر کاری این فضای نامی را معرفی میکنیم.
کد:
using System.IO;
کد:
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);
در پارامتر دوم نوع دسترسی مثلا Delete ، Create و غیره را تعریف میکنیم که ما از FullControl استفاده میکنیم و در نهایت هم یا Allow یا Deny را اعمال میکنیم.
به زبان ساده ما گفته ایم کاربر جاری ، هیچ نوع دسترسی به این فولدر ندارد.
در نهایت این قانون دسترسی را با متد AddAccessRule به لیست قوانین این فولد اضافه میکنیم.
جمله ای که بالا گفتم اشتباه است :d ما فقط یک شی از DirectorySecurity ساختیم و به آن قانون اضافه کردیم.
با di.GetAccessControl تنها DirectorySecurity مان را مقدار دهی اولیه کردیم و هنوز به فولدر نسبت داده نشده است پس باید این DirectorySecurity را به فولدر نسبت دهیم :
کد:
di.SetAccessControl(ds);
موفق باشید
کد کامل قفل کردن فولدر :
کد:
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);