تعیین سطح دسترسی هنگام لاگین کردن - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تعیین سطح دسترسی هنگام لاگین کردن

0 امتیاز
سلام دوستان چطور میتونم برای کاربران که لاگین میکنن سطح دسترسی درست کنم .مثلا یوزری وصل بشه فلان منو فعال و غیر فعال باشه .سر در گم شدم.
سوال شده اسفند 13, 1392  بوسیله ی U_sef (امتیاز 13)   1 1 2

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام.

روند کار شما دو مرحله هست. 1: مشخص کردن سطح دسترسی برای هر کاربر 2: اعمال کردن این محدودیتها در هنگام لاگین هر شخص.
یکی از روش های پیاده سازی میتونه اینطوری باشه:
روش اول : یک جدول که سطح دسترسی اشخاص رو مشخص میکنه نیاز دارید.

ستون های این جدول نام کاربری و تعداد منوها (یا در صورت نیاز زیر منوها) هست. یعنی اگر در برنامه شما 5 منو وجود داره که هر منو هم 3 زیرمنو داره اگر میخواید برحسب منو کاربر رو کنترل (اجازه یا عدم اجازه) کنید باید علاوه بر نام کاربری 5 تا ستون دیگه هم ایجاد کنید و اگر میخواید بر حسب زیر منو کاربر رو کنترل کنید بایستی 5*3 = 15 فیلد ایجاد کنید.
فیلدها رو از نوع bit در نظر بگیرید (اگر تیک نداشته باشه یعنی false و اجازه دسترسی به اون منو رو نداره).
روش دیگه میتونه بر حسب سمت شغلی باشه.
در اینجا دو جدول نیاز هست : جدول اول شبیه جدول بالاست فقط به جای نام کاربری باید سمت شغلی مشخص بشه . و جدول دوم میشه نام کاربری و سمت شغلی. خوبی این روش اینه که یکبار برای هر سمت شغلی، محدودیت ها تعریف میشه و بعد از اون فقط برای یک شخص سمت شغلیش رو مشخص میکنیم. (زمانیکه تعداد کاربران و تعداد منوها(یا زیرمنوها) زیاد باشن، این روش به مراتب به صرفه تر هستش چون فضای به مراتب کمتری گرفته میشه).
حالا هنگام لاگین ، اگر کاربر یوزر و پسورد رو درست وارد کرد، میرید از جدول سطح دسترسی، رکوردش رو میخونید و بصورت زیر بر روی منوها (یا زیرمنوها) اعمال می کنید(کد زیر برای زیر منو ها هست، در ادامه برای منوها هم کد رو میزارم):

M00.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M00"].ToString());

M01.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M01"].ToString());

M10.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M10"].ToString());

M11.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M11"].ToString());

M12.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M12"].ToString());

برای غیر فعال کردن منوها هم میتونید از کد زیر استفاده کنید(اگر در جدول برای تعیین سطح دسترسی به جای زیر منو از منو استفاده کردید):

menuStrip1.Items["M0"].Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M0"].ToString());

توجه : من برای راحتی کار خودم نام فیلدها و نام منوها در فرم رو یکسان در نظر گرفتم. منظور از M00 یعنی اولین زیرمنو در اولین منو. منو اول من M0 هست و منوی بعدی M1 و ...
توضیحات بیشتر :
وقتی یک شخص یوزر و پسورد رو صحیح وارد میکنه، باید برید داخل جدولی که سطح دسترسی رو نگهداری میکنید. اونجا یک select میزنید:

select * from TblAccessLevel where UserID = @userid

منظور از userid@ همون نام کاربری صحیح هست که کاربر باهاش لاگین کرده. نتیجه select بالا میشه یک رکورد که میگه وضعیت هر منو برای اون شخص چطوره (True یا False ).

اگر هم از روش دوم استفاده کردی یعنی دو جدول داری که یکی شامل (کد) سمت شغلی و فیلدهایی به تعداد منوها(یا زیرمنوها) و جدول دوم هم میشه نام کاربری و (کد) سمت شغلی. در این حالت select شما بصورت زیر میشه:

select * from tbl1 inner join tbl2 on tbl1.JobID = tbl2.JobID where UserID = @userid

موفق باشید.

پاسخ داده شده اسفند 13, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد اسفند 15, 1392 بوسیله ی U_sef
...