PDA

View Full Version : سوال: فرم لاگین حرفه ای



firoozi90
یک شنبه 06 اسفند 1391, 15:41 عصر
سلام دوستان
من می خوام واسه نرم افزارهایی که می نویسم و احتیاج به فرم login دارن یه طراحی خوب در این رابطه داشته باشم.و تقریبا بیشتر زوایای امنیتی داخلش رعایت بشه.
مثلا تعربف کاربر جدید هر کاربری نتونه انجام بده و یا مثلا هرکاربری فقط به محدوده ی کاری خودش دسترسی داشته باشه.
و از این قبیل مسائل
واسه این کار من چه چیزهایی باید در نظر داشته باشم.
اگر مقاله ،سورس و شکلی و اطلاعاتی در این زمینه دارید ممنون میشم بزارید استفاده کنیم
شدیدا به کمک شما دوستان احتیاج دارم

veniz2008
یک شنبه 06 اسفند 1391, 16:43 عصر
سلام. روند کار شما دو مرحله هست. 1: مشخص کردن سطح دسترسی برای هر کاربر 2: اعمال کردن این محدودیتها در هنگام لاگین هر شخص.
یکی از روش های پیاده سازی میتونه اینطوری باشه:
برای مورد 1 : یک جدول که سطح دسترسی اشخاص رو مشخص میکنه نیاز دارید.ستون های این جدول نام کاربری و تعداد منوها (یا در صورت نیاز زیر منوها) هست. یعنی اگر در برنامه شما 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 و ...
موفق باشید.

h.rezaee
یک شنبه 06 اسفند 1391, 18:36 عصر
دوست عزیز این سطح دسترسی رو در جدول لاگین قرار بدیم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟" این توضیحات پایین بر حسب بانک sql 2008"
مثلا من یک جدول دارم به اسم logintbl، تو این جدول من به طور معمول 3 تا فیلد دارم " id, username,password" حالا می خوام سطح دسترسی " مثلا دکمه حذف و اضافه ساخته شده در برنامه " رو مقدار دهی کنم. پس باید یک فیلد دیگه مثلا به اسم delbtn واسه جدول تعریف کنیم که از نوع boolean هستش( یا یکه یا صفر ) اگه یک باشه این دکمه براش قابل نمایشه اگه نه که هیچ چی.!!!!!!!!! تا اینجا درست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
خوب حالا تو همین جدول logintbl دو نوع کاربر داریم ( که بسته به نیاز ادمین میتونه بهش اضافه کنه ) ، یکی همون admin هستش که user و pass هر دو admin اند و delbtn اون هم 1 هستش ، یکی هم user1 که کاربر عادیه" البته بسته به نیاز هم همین طور اضافه میشه به کاربرا"که یوزرنیم و پسورد اون user1 و delbtn هم صفر هستش. حالا می خوایم بریم تو کد نویسی در C# 2010. باید برای کد نویسی چه جوری عمل کنیم؟؟؟؟؟؟؟؟
که اگه کاربر با admin وارد شد این دکمه باشه ولی اگه با user1 وارد شده نباشه؟؟؟؟؟؟؟؟
ممنون میشم اگه راهنمایی کنید.

veniz2008
یک شنبه 06 اسفند 1391, 20:38 عصر
باور کنید اگر پست قبلیم رو خوب بخونید ابهامی نداره. وقتی یک شخص یوزر و پسورد رو صحیح وارد میکنه، باید برید داخل جدولی که سطح دسترسی رو نگهداری میکنید. اونجا یک 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
شما از هر روشی که راحت تری استفاده کن.

stabesh
یک شنبه 20 دی 1394, 14:03 عصر
سلام
میشه یکم بیشتر در مورد جداول و سطح دسترسی و گروه بندی کاربران توضیح بدید؟
متشکرم