PDA

View Full Version : سوال: دسترسی کاربر به فرمها(هنگام لوگین شدن)



farhan1
جمعه 14 تیر 1392, 14:35 عصر
سلام خدمت دوستان و اساتید محترم :
دو جدول در sql دارم یکی مربوط به تعریف کاربر و دیگری مربوط به نوع دسترسی به فرمها طبق جدول ذیل

106632
و جدول دومی که نوع دسترسی کاربر را مشخص می کند

106633


با توجه به جدول که اولین فیلد نام کاربری -دومین فیلد کد فرم -سومین فیلد نام فرم -چهارمین فیلد فرم با قابلیت نوشتنی و خواندنی (اگر true باشد به تمام فرم دسترسی داردو اگر false باشد که ندارد ) - وآخرین فیلد فرم با قابلت فقط خواندنی(اگر true باشد که دسترسی دارد در غیر اینصورت دسترسی ندارد)
اینکه با کد نویسی تونستم لوگین بشم اما نمیدونم چطوریه قسمت دسترسی را به کاربر نسبت بدهم
این هم کد لوگین
106634

لطفا کمکم کنید




http://barnamenevis.org/images/misc/pencil.png

ya30ien2
جمعه 14 تیر 1392, 15:30 عصر
بهتر بود برای تمامی فرم ها یک فیلد اضافه میکردی اینجوری یکم گیج میشی
مثلا 10 فرم داری و برای هر کدوم 3 حالت نمایش -ویرایش - حذف کلا 30 فیلد میشد که در جدول اضافه میکردی
و بعد از لوگین تمامی اینها رو بر اساس نام کاربری چک میکردی
مثلا یک داده از نوع int در نظر میگیری و به ترتیب از جدول میخونی
اونهایی که true هستند 1 و اونهایی که false برابر 0 قرار میدی
حالا کل اطلاعات رو در اختیار داری
میتونی وقتی می خواد روی باتون نمایش یک فرم کلیک میکنه رقم مربوط به اون صفحه رو چک کنی

amir200h
جمعه 14 تیر 1392, 16:00 عصر
دوست من. به نظر من روشی که رفتی خیلی اشتباهه.
تو جدولی که کاربراتو ذخیره میکنی اونجا فیلدهای دسترسی از نوع bit بزار بعد هنگامی که میخوای یوزر و پسورد چک کنی که آیا درسته که بعد وارد نرم افزار بشه اونجا تمام سطوع دسترسی رو واکشی میکنی.
بعد متغیرهایی از نوع bool که حتما باید static باشن تعریف میکنی. سپش مقدارشونو با مقادیری که در جدول ذخیره شده پر میکنی که true و false
بعد تو FormLoade اصلیت enable جاهایی که دوست داری رو با مقادیر این متعغیرها true یا false میکنی

farhan1
جمعه 14 تیر 1392, 16:06 عصر
این روشی که رفتم در یکی از نرم افزارهای معروف در کشور استفاده می شود بکار برده شده است

amir200h
جمعه 14 تیر 1392, 16:21 عصر
خوب شاید اونا روشو اشتباه رفتن :لبخند: بنظر من اینجوری فضای بیشتری تو دیتابیس ذخیره میشه.
هر دو روش کارشون یکیه. حالا خودت ی مقایسه کن ببین چه تفاوتی باهم دارن.
بنظر من روشی که من گفتم از دید خودم خیلی بهتر از روشی که شما دارین میرین هم از نظر سرعت هم از نظر پرتی فضای اشغال شده در دیتابیس

farhan1
جمعه 14 تیر 1392, 21:44 عصر
از اساتید کسی نیست کمک کنه

ya30ien2
جمعه 14 تیر 1392, 22:30 عصر
دوست عزیز همینطور که amir200h (http://barnamenevis.org/member.php?63766-amir200h) گفتن روش شما اشتباه هستش
شما بجای اینکه برای یک نفر بشینی 50 تا سطح دسترسی رو تک به تک تعریف کنی با یک بار تعریف هم از کار مدیر کاهش میدی هم برای خواندن اطلاعات کاربر از حجم کد کمتری استفاده میکنی
همینطور که در ابتدا گفتم شما بشین یک جدول طراحی کن و تمامی فیلدهای دسترسی به صفحه ها رو اضافه کن

khokhan
سه شنبه 09 مهر 1392, 19:34 عصر
از اساتید کسی نیست کمک کنه
.................................................. ..................................:متفکر:
111376

farhan1
سه شنبه 16 مهر 1392, 18:15 عصر
سلام
ممنون از بابت فرستادن این فایل که واقعا جای بسی تشکر دارد
ولی باز هم مشکل من حل نشد.الان مشکل من اینه که از فرمهایی که نمونه میسازم هیچ تاثیری نداره
مانند ()Form2 f2 = new Form2

[
f2.Enabled= FALSE
ولی هیچ عکس العملی به این کد انجام نمیده

khokhan
سه شنبه 16 مهر 1392, 19:00 عصر
سلام
ممنون از بابت فرستادن این فایل که واقعا جای بسی تشکر دارد
ولی باز هم مشکل من حل نشد.الان مشکل من اینه که از فرمهایی که نمونه میسازم هیچ تاثیری نداره
مانند ()Form2 f2 = new Form2

[
f2.Enabled= FALSE
ولی هیچ عکس العملی به این کد انجام نمیده
اصلا فلسفه این که ما بیاییم ابتدا از فرم نمونه سازی کنیم بعد بیاییم غیر فعالش کنیم چیه؟
وقتی خیلی آسون می تونی با یه شرط ساده مبنی براینکه اگه فلان شخص وارد سیستم شد به فرم مورد نظر دسترسی داشته باشه و در غیر این صورت پیغام صادر بشه
دیگه چه دلیلی داریم فعال یا غیر فعالش کنیم
البته انجام این کار همچی سخت نیست اما معقول به نظر نمی رسه
حالا دلیلتون چیه؟

farhan1
چهارشنبه 17 مهر 1392, 23:29 عصر
خوب همین فرمایشی که فرمودید به چه صورت به فلان شخص طریقه دسترسی به فرم را بدهیم. در ضمن این را هم بگم که من می توان در منوی اصلی برنامه که هر زیر منو یک فرم را باز می کند غیر فعال کنم(visibale=false) . ولی در جایی از دسترسی هست که بعضی از کاربران فقط مجاز به دیدن اطلاعات و سرچ اطلاعات می باشند .و بقیه دکمه ها از جمله درج و ویرایش و حذف باید غیر فعال گردد.در ضمن فرمها به صورت پیش فرض enable=false که در کد نویسی هنگام لوگین فرمها را در جایی که نیاز به true با شد true میکنم
بعنوان مثال

if(frmcod==1 && writefrm==false && readfrm==true)

{form1 frm1 =new form1() frm1.enable=true; btninsert.enable=false; btnupdate.enable=false; btnsearch.enable=true}
با توجه به کد یاد شده اگر فرم برابر فرم 1 است و فرمی که غیر قابل نوشتنه و فقط قابل دیدنه . فرم 1 enable را true کن و enable دکمه های درج و آپدیت و حذف را غیر فعال کن فقط دکمه سرچ true باشد
ولی با توجه به کد enable فرم 1 فعال نمی شود.

veniz2008
پنج شنبه 18 مهر 1392, 11:44 صبح
این روشی که رفتم در یکی از نرم افزارهای معروف در کشور استفاده می شود بکار برده شده است


خوب همین فرمایشی که فرمودید به چه صورت به فلان شخص طریقه دسترسی به فرم را بدهیم. در ضمن این را هم بگم که من می توان در منوی اصلی برنامه که هر زیر منو یک فرم را باز می کند غیر فعال کنم(visibale=false) . ولی در جایی از دسترسی هست که بعضی از کاربران فقط مجاز به دیدن اطلاعات و سرچ اطلاعات می باشند .و بقیه دکمه ها از جمله درج و ویرایش و حذف باید غیر فعال گردد.در ضمن فرمها به صورت پیش فرض enable=false که در کد نویسی هنگام لوگین فرمها را در جایی که نیاز به true با شد true میکنم
بعنوان مثال

if(frmcod==1 && writefrm==false && readfrm==true)

{form1 frm1 =new form1() frm1.enable=true; btninsert.enable=false; btnupdate.enable=false; btnsearch.enable=true}
با توجه به کد یاد شده اگر فرم برابر فرم 1 است و فرمی که غیر قابل نوشتنه و فقط قابل دیدنه . فرم 1 enable را true کن و enable دکمه های درج و آپدیت و حذف را غیر فعال کن فقط دکمه سرچ true باشد
ولی با توجه به کد enable فرم 1 فعال نمی شود.
سلام.
با اجازه دوست عزیزم جناب خوخان.
روش، روش خوبی هست ولی پیاده سازی بهینه ای از اون انجام نشده. یا شما روش اونها رو خوب متوجه نشدید یا اونها پیاده سازی خوبی نداشتن.
خوبی این روش اینه که برای حالاتی که فرم جدید به پروژه اضافه میشه، نیازی به تغییر در طراحی جداول سطح دسترسی نیست در صورتیکه اگر برای هر فرم یک فیلد در نظر بگیریم، زمانیکه یک فرم جدید اضافه میشه بایستی دوباره طراحی جداول رو دست زد.
اما چرا بهینه نیست؟
در جدول دوم، شما اومدی برای هر شخص سطح دسترسی رو تعریف کردی، اگر تعداد کاربران زیاد باشن کار بسیار پر زحمتی هست و همچنین فضای زیادی رو هم اشغال خواهد کرد.
می تونید با یک تغییر ساده کار رو بهینه کنید :
در جدول دوم، به جای یوزرنیم، فیلد typeuser رو قرار بدید. اینطوری برای هر نوع کاربر (مدیر، کاربر معمولی، مسئول انفورماتیک و ...) فقط یکبار سطح دسترسی به هر فرم رو مشخص می کنید و دیگه نیازی نیست برای هر کاربر، دوباره به ازای تمام فرم ها رکورد درج کنید.
جدول اول هم نیاز به تغییر خاصی نداره.
نتیجه این میشه که فیلد typeuser بین دو جدول مشترک میشه و شما براحتی میتونید متوجه بشید که هر کاربر، چه نوع دسترسی رو داره بدون اینکه مجبور باشید ده ها (یا شاید 100 ها) رکورد رو درج کنید.
در زمان لاگین، بعد از اینکه کاربر به درستی لاگین کرد، از یک join بین این دو جدول استفاده کنید و سطح دسترسی اون شخص رو بیرون بکشید.
اینکه چطور از این سطح دسترسی ها استفاده کنید روش های متفاوتی میشه داشت.
میتونید از یک دیتاتیبل که public هست و استاتیک استفاده کنید. چون تعداد رکوردهای این دیتاتیبل به تعداد فرم های شماست پس رم زیادی رو از شما نمی گیره.
برای اعتبار سنجی سطج دسترسی کاربر، بخشی از اون رو (فعال یا غیر فعال بودن یک منو و در واقع فعال یا غیر فعال بودن یک فرم) در همون فرم لاگین انجام بدید.
بقیه اعتبار سنجی رو که بصورت یک بخش خاص هست و در واقع همان read و write می باشد می تونید با استفاده از چند if ساده درون formload هر فرم انجام بدید. در این حالت چون دیتاتیبل شما استاتیک هست، براحتی می تونید سطح دسترسی شخص به اون فرم رو بیرون بکشید و بر روی دکمه های insert و update و ... اعمال کنید. حتی می تونید بصورت groupbox و panel غیر فعال کنید و کاملا دستتون برای اعمال تغییرات باز هست.