PDA

View Full Version : سوال: ایجاد سطوح کاربری برای فرم های پروژه



MMeshkat
پنج شنبه 04 خرداد 1391, 10:16 صبح
سلام دوستان
خیلی سرچ کردم بیشتر از 50 تا تاپیکو دیدم اما چیزی پیدا نکردم
می خوام یه فرم داشته باشم که نام همه ی فرم های پروژه رو نشون بده. نام فرم ها از روی دیتا بیس خونده میشه حالا با یه باتن و تیک زدن فرم ها بتونم یک سطح کاربری جدید رو ایجاد کنم. من فرمهای پروژه رو با استفاده از تابع زیر تو یک آرایه ذخیره می کنم:

Dim formName(100) As String
Dim i As Integer
Dim asm As Assembly = Assembly.GetExecutingAssembly
For Each t As Type In asm.GetTypes
If t.BaseType Is GetType(System.Windows.Forms.Form) Then
formName(i) = t.Name
End If
Next



و با فرمت string رو دیتابیس ذخیره می کنم. مشکل اینه موقع خوندن چطوری مثلا فرم frmAdmin رو محدود کنم!
واسه ذخیره کردن با nvarchar ذخیره می کنم اما موقع دسترس دادن مشکل دارم:ناراحت:
یه تست زدم... اومدم داخل فرم یکی از فرم هایی که خوندم رو با کد زیر disable کردم اما فک کنم کد اشتباه باشه:


Dim frm As New Form
frm.Name = formName(0)
frm.Enabled = False



لطفا با کد راهنمایی کنید

ROSTAM2
پنج شنبه 04 خرداد 1391, 13:24 عصر
باز هم جستجو كن در اين مورد كه ليست فرم ها رو چطور داشته باشيم و ... قبلا صحبت شده

MMeshkat
پنج شنبه 04 خرداد 1391, 18:32 عصر
باز هم جستجو كن در اين مورد كه ليست فرم ها رو چطور داشته باشيم و ... قبلا صحبت شده
بازم جستجو کردم اما چیزی که بدردم بخوره نبود

سادتر میشه: چطوری یه فرم رو با اسمش فراخوانی کنم؟

فرید نجفلو
پنج شنبه 04 خرداد 1391, 18:40 عصر
سلام
دوست عزیز
شما روش مناسبی برای اعمال سطح دسترسی انتخاب نکردید!
البته اینکه سطوح دسترسی تو پایگاه داده باشن خوبه(و اگه رمز نگاری شده باشه چه بهتر)
اما در مورد اعمال: شما باید وقتی کاربر قصد استفاده از فرم رو داره ببینید که مجاز هست که استفاده کنه یا نه برای مثال تو Load یا خیلی بهتر از اون سازنده (New) فرم هست
پس شما نیازی به ایجاد لیستی از فرم تو برنامه تون ندارید و فقط اون ها رو و سطح دسترسی رو تو دیتابیس ذخیره می کنید و زمانی که نیازه می خونید

و یه توصیه هم دارم (مخصوصا اگه برنامه شما تک کاربره هست ) بهتره در همون ابتدا کل سطوح دسترسی رو (مثلا در دیتاتیبل یا دیتا ست) بخونید و نگه دارید تا هر بار که خواستید مجوز رو بررسی کنید نیازی به اتصال به پایگاه داده نباشه با این کار سرعت برنامه تو این بخش فوق العاده بالا میره

MMeshkat
پنج شنبه 04 خرداد 1391, 19:02 عصر
سلام
دوست عزیز
شما روش مناسبی برای اعمال سطح دسترسی انتخاب نکردید!
البته اینکه سطوح دسترسی تو پایگاه داده باشن خوبه(و اگه رمز نگاری شده باشه چه بهتر)
اما در مورد اعمال: شما باید وقتی کاربر قصد استفاده از فرم رو داره ببینید که مجاز هست که استفاده کنه یا نه برای مثال تو Load یا خیلی بهتر از اون سازنده (New) فرم هست
پس شما نیازی به ایجاد لیستی از فرم تو برنامه تون ندارید و فقط اون ها رو و سطح دسترسی رو تو دیتابیس ذخیره می کنید و زمانی که نیازه می خونید

و یه توصیه هم دارم (مخصوصا اگه برنامه شما تک کاربره هست ) بهتره در همون ابتدا کل سطوح دسترسی رو (مثلا در دیتاتیبل یا دیتا ست) بخونید و نگه دارید تا هر بار که خواستید مجوز رو بررسی کنید نیازی به اتصال به پایگاه داده نباشه با این کار سرعت برنامه تو این بخش فوق العاده بالا میره


سلام
مرسی از راهنماییت Farid.N (http://barnamenevis.org/member.php?243869-Farid.N) جان

پروژه من به این شکله که:
ابتدا یه نسخه از نرم افزار روی سرور نصب میشه و کاربران و سطوح دسترسی برای اونها تعریف میشه سپس همین نرم افزار روی کلاینت ها نصب میشه حالا براساس گروه کاربری که قرار دارن سطح دسترسیشون به فرم ها مشخص میشه.
مثلا منو مدیریت برای کاربران invisible میشه
حالا می خوام تو قسمت تعریف سطوح دسترسی که داخل منوی مدیریته و فقط مدیران به این فرم دسترسی دارن سطوح دسترسی رو به فرم ها تعریف کنم
یعنی نام همه ی فرمها رو بخونم و تو یک گرید به همراه یه ستون دیگه با فرمت چک باکس نشون بدم. حالا مدیر میتونه با انتخاب نام گروه کاربری و تیک زدن فرم ها مجموعه ای از فرم های مجاز رو واسه یه گروه کاربری خاص تعریف کنه.
هنگام لاگین کردن کاربر براساس گروه کاربری که هنگام ثبت نام برای اون ذخیره شده دسترسی به فرم ها تعیین میشه
برای خوندن فرم ها و ذخیره در دیتابیس مشکلی ندارم اما برای فراخوانی فرم ها با استفاده از نامشون مشکل دارم

حالا نمیدونم دقیقا چه کار کنم... اگه این روش مناسبی نیست پیشنهادت چیه؟

bastakboys
پنج شنبه 04 خرداد 1391, 19:27 عصر
دوست عزیز من برای این کار یک ستون به جدول کاربران اضافه کردم(از نوع string )
بعد تو فرم تعریف کاربرانم علاوه بر یوزر و پس یک تری ویو گذاشتم که تمام فرم ها رو داشت (بصورت چک باکس)
حالا موقع ذخیره کاربر توسط یک تابع ساده لیست ویو چک می شد و به ازای هر فرمی که تیک خورده 1وهر فرمی که تیک نخورده 0 می زاره یعنی جواب تابعمون میشه یک چیزی مثل این 100111010001
اینو تو همون ستون جدول ذخیره می کنم
حالا وقتی کاربر یوزر و پسش رو وارد کرد مقدار همین ستونش (که من بهش میگم سطح) رو تو یک متغییر پوبلیک میریزم.
حالا مثلا کاربر بخواد بره قسمت فروش . این متغییر چک میشه اگه مثلا سومین حرف از متغییر ما 1 بود اجازه میده بره اگه 0 بود اجازه نمیده

MMeshkat
پنج شنبه 04 خرداد 1391, 20:18 عصر
دوست عزیز من برای این کار یک ستون به جدول کاربران اضافه کردم(از نوع string )
بعد تو فرم تعریف کاربرانم علاوه بر یوزر و پس یک تری ویو گذاشتم که تمام فرم ها رو داشت (بصورت چک باکس)
حالا موقع ذخیره کاربر توسط یک تابع ساده لیست ویو چک می شد و به ازای هر فرمی که تیک خورده 1وهر فرمی که تیک نخورده 0 می زاره یعنی جواب تابعمون میشه یک چیزی مثل این 100111010001
اینو تو همون ستون جدول ذخیره می کنم
حالا وقتی کاربر یوزر و پسش رو وارد کرد مقدار همین ستونش (که من بهش میگم سطح) رو تو یک متغییر پوبلیک میریزم.
حالا مثلا کاربر بخواد بره قسمت فروش . این متغییر چک میشه اگه مثلا سومین حرف از متغییر ما 1 بود اجازه میده بره اگه 0 بود اجازه نمیده

دوست عزیز میشه یه ذره بیشتر توضیح بدی؟
منم می خوام دقیقا همین پروسه رو انجام بدم اما وقتی یک فرم جدید به فرم ها اضافه میشه چطوری مدیریتش می کنی.
بذار واضحتر بگم منظورم اینه که مثلا 10 تا فرم داری و با یه رشته 10 کارکتری مثل 1100100010 دسترسی رو چک می کنی حالا اگه دوتا فرم جدید اضافه شد می خوام نیازی به ادیت کد نباشه و پویا عمل کنه.

bastakboys
پنج شنبه 04 خرداد 1391, 20:45 عصر
دوست عزیز من نمی دونم پروژت چیه و منظورت از اضافه شدن فرم چیه
لطفا در باره اضافه شدن توضیح بده کی این فرمها اضافه میشه

MMeshkat
پنج شنبه 04 خرداد 1391, 21:14 عصر
دوست عزیز من نمی دونم پروژت چیه و منظورت از اضافه شدن فرم چیه
لطفا در باره اضافه شدن توضیح بده کی این فرمها اضافه میشه

ببین دوست من بخش مدیریت سایت قراره ثابت باشه یعنی اگه قراره بخشی مثلا "انبارداری" به نرم افزار اضافه بشه دیگه نیازی به ویرایش این بخش نباشه و مدیریت گروه های کاربری به صورت کاملا پویا بر روی فرم ها اعمال بشه. یه جورایی می خوام یه بار واسه همیشه این بخشو اوکی کنم. فقط اگه بتونم یه فرم رو با اسمش فراخوانی کنم مشکلم حل بشه

bastakboys
پنج شنبه 04 خرداد 1391, 21:59 عصر
منظورتو دقیق متوجه نمیشم اما
اگه قسمت انبارداری رو بعدا می خواهی اضافه کنی که هم برنامه هم دیتابیس بعدا باید تغییر کنند که میشه با یک پرسیجر تو دیتابیس تمام اون ستون رو تغییر داد
تو برنامه هم که حتما تغییر می کنه

اما اگه فقط می خواهی یک فرم رو توسط اسمش باز کنی بر به لینک زیر

http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/808af8b2-c67c-460b-ac6a-3b7739f35655

MMeshkat
جمعه 05 خرداد 1391, 02:11 صبح
مرسی خیلی به دردم خوررد :قلب: