PDA

View Full Version : سوال: چطور میشه دسترسی کاربران به کنترل های برنامه رو محدود کرد ؟



mehrnoosh_al62
پنج شنبه 17 مرداد 1387, 08:15 صبح
سلام دوستان
من دارم یه برنامه مینویسم که در اون برنامه مدیر بتونه دسترسی کاربران به کنترل های یه برنامه رو محدود کنه. تو هر برنامه ای چندین فرم و در هر فرم چندین کنترل وجود داره. تو برنامم یه مدیر باید بتونه :
برای مثال: وقتی کاربر1 لاگین میشه تو هر فرم فقط بتونه به یه سری کنترل هایی که مدیر براش تعریف کرده دسترسی داشته باشه. مثلا اگه تو فرم1 یک textbox , یک label و چند Chechbox باشه طبق تعریف مدیر برای کاربر1 textbox قابل روئت نباشه ویا یکی از Chechbox خاصیت enable ان false باشه
من این برنامه روتازه شروع کردم هر کدوم از دوستان اگه نظری دارند خوشحال میشم...:لبخندساده:

MostafaAhmadi
پنج شنبه 17 مرداد 1387, 15:20 عصر
شما باید یک فایل برای محدودیت برنامه اتان تعریف کنید که وضعیت Visible و Enabled همه کنترلهای مورد نظر در آن ذخیره شده باشد.بعد در هنگام لاگین کاربر شما باید مشخصات کنترلها را از این فایل خوانده و برروی کنترلها اعمال کنید.برای جدا کردن هر کاربر و یا هر کنترل باید از یک کراکتر بعنوان جداکننده استفاده کنید.سپس رشته دریافت شده از فایل را با متد Split جدا کرده و اینطوری تنظیمات را بازیابی کنید.

mehrnoosh_al62
پنج شنبه 17 مرداد 1387, 16:06 عصر
شما باید یک فایل برای محدودیت برنامه اتان تعریف کنید که وضعیت Visible و Enabled همه کنترلهای مورد نظر در آن ذخیره شده باشد.بعد در هنگام لاگین کاربر شما باید مشخصات کنترلها را از این فایل خوانده و برروی کنترلها اعمال کنید.برای جدا کردن هر کاربر و یا هر کنترل باید از یک کراکتر بعنوان جداکننده استفاده کنید.سپس رشته دریافت شده از فایل را با متد Split جدا کرده و اینطوری تنظیمات را بازیابی کنید.

اگه میشه یه نمونه از این فایلی که میگید برای مثال دستی درست کنید و ضمیمه کنید تا بیشتر قابل درک باشه. ممنونم:لبخندساده:

mehrnoosh_al62
شنبه 19 مرداد 1387, 07:50 صبح
کسی از دوستان نیست که بتونه راهنمایی کنه...؟؟؟

alireza1384
شنبه 19 مرداد 1387, 09:06 صبح
من در یکی از برنامه هایم که database می باشدبه این صورت عمل کردم که ابتدا بازه عملیات های مختلف را تعریف کرده و مشخص نمودم که مثلا برای عملیات x1 کدام کنترلها فعال و کدام غیرفعال باید باشند. سپس به مدیر این اجازه راداده ام که به تواند گروههای کاری مختلفی را تعریف و برای هرگروه عملیات موردنظررا مشخص کند. سپس هر کاربر یا کاربرانی را به هر گروه منتصب نماید. هر کاربری که login می کند با توجه به اینکه عضو کدام گروه می باشدو گروه مورد نظر مجوز دسترسی به کدام قسمت ازبرنامه رادارد ، کنترل های مختلف روی فرم فعال یا غیرفعال می شوند.

mehrnoosh_al62
شنبه 19 مرداد 1387, 09:10 صبح
سلام
میشه بگید چطور جداول بانک رو طراحی کردید؟ منم دقیقا همچین چیزی به ذهنم رسید اما نمیدونم چطور جداول رو به شکل بهینه طراحی کنم.

alireza1384
شنبه 19 مرداد 1387, 09:24 صبح
از سه جدول با یک stract در برنامه استفاده کردم . در داخل stract انواع مجوزهایی که برنامه می تواند داشته باشد به صورت ثابت تعریف شده است. در جدول نخست اطلاعات مربوط به گروههایی که توسط مدیر تعریف می شود ذخیره می گردد. در جدول دوم که دو فیلدی می باشد انواع مجوزهای داده شده به گروههای مختلف در آن ذخیره می شود ( کلید گرو هها و مجوزهای موجود در stract ) در جدول سوم مشخصات کاربران به همراه گروه کاری آنها . که با استفاده از سه جدول مذکور مجوز دسترسی به قسمت های مختلف برنامه توسط کاربران استخراج و با استفاده از اطلاعات ثابت موجود در stract کنترلهای مختلف فعال و غیر فعال می شوند.

mehrnoosh_al62
شنبه 19 مرداد 1387, 09:29 صبح
از سه جدول با یک stract در برنامه استفاده کردم . در داخل stract انواع مجوزهایی که برنامه می تواند داشته باشد به صورت ثابت تعریف شده است. در جدول نخست اطلاعات مربوط به گروههایی که توسط مدیر تعریف می شود ذخیره می گردد. در جدول دوم که دو فیلدی می باشد انواع مجوزهای داده شده به گروههای مختلف در آن ذخیره می شود ( کلید گرو هها و مجوزهای موجود در stract ) در جدول سوم مشخصات کاربران به همراه گروه کاری آنها . که با استفاده از سه جدول مذکور مجوز دسترسی به قسمت های مختلف برنامه توسط کاربران استخراج و با استفاده از اطلاعات ثابت موجود در stract کنترلهای مختلف فعال و غیر فعال می شوند.

ببخشید که بازم سوال میپرسم:خجالت::خجالت:
من تا حالا با stract کار نکردم. میشه در موردش و اینکه چطور این کار رو کردید وضیح بدید ؟:خجالت:

top7news
شنبه 19 مرداد 1387, 09:57 صبح
سلام
روش دوستمون alireza روش خیلی جالب و خوبیه
ولی یه راه ساده تر روش ایشون اینه که شما یه جدول برای کاربران داشته باشین و یه جدول برای کارمندان
توی جدول کاربران نوع دسترسی ها رو مشخص کنین مثلا مدیر سیستم ، مسئول حسابداری ، مسئول انبار و.... و البته تو این جدول باید غیر از حق دسترسی ها ، شناسه کاربری و رمز عبور هم ذخیره بشه .
حالا یه جدول برای کارمندان طراحی کن با تمام فیلد هایی که مد نظرته مثل نام ، نام خانوادگی ، سمت ، نوع کاربری و ....
حال توی قسمت login وقتی کاربر user name & password رو وارد میکنه ، اول بانک کاربراین رو چک کن که اصلا همچین کاربری وجود داره یا نه .
بعد از تو همین بانک مثلا یه فیلد اصلی مثل شماره پرسنلی و حق دسترسی رو پیدا کن (پیشنهاد میکنم اینو با Data Reader انجام بدی) و بعد با بررسی جدول کارمندان این و بدست بیار که اون شخص کی هست و چه دسترسی هایی واسش میخوای قرار بدی .
حالا با یک یا چند شرط ساده بگو اگه مثلا کاربر مدیریت وارد سیستم شد همه کنترل ها فعال باشه ، اگه کاربر انبار وارد شد فقط فلان سیستم ها فعال بشه و ....

mehrnoosh_al62
شنبه 19 مرداد 1387, 10:17 صبح
سلام
ممنونم ولی موضوع نحوه دسترسی کاربر به کنترل های فرمه. مثلا ممکنه واسه یه گروه خاص که تعریف میکنم n تا کنترل که ممکنه تعدادش زیادم باشه قابل دسترسی نباشه میخوام جدولی که طراحی میکنم بهینه باشه. در ضمن منظورتون از کاربر و کارمندچیه؟ چه فرقی داره؟!!

alireza1384
شنبه 19 مرداد 1387, 10:28 صبح
ببخشید که بازم سوال میپرسم:خجالت::خجالت:
من تا حالا با stract کار نکردم. میشه در موردش و اینکه چطور این کار رو کردید وضیح بدید ؟:خجالت:
stract ها شبیه کلاس ها می باشند و به شکل زیر تعریف می شوند :
public stract stractName
{
int field1;
int field2;
....
int fieldn
{
پس ازتعریف ، می توانی یک متغیر از آن نوع تعریف کنی :
stractName myVariable = new starctname
سپس مانند یک کلاس معمولی اعضای آنرا با توجه به انواع مجوزهایی که داری مقداردهی کنی و سپس بررسی کنی که هرکاربر کدام مجوز را دارد. و با توجه به آن کنترلها را فعال یا غیر فعال کنی .
اگر کار با stract فکر می کنی برایت سخت است می توانی یک جدول به جای آن در بانک ایجاد کنی . که البته باعث می شود عملیات بانکی شما دربرنامه بیشتر شود.

mehrnoosh_al62
شنبه 19 مرداد 1387, 10:58 صبح
ممنون ولی به این شکل باید هر بار که کل برنامه تغییر میکنه مثلا یه سری کنترل های دیگه اضافه میشه باید struct رو دستی تغییر بدم در صورتی که من میخوام برنامم به صورت پویا باشه و در ضمن تو هر برنامه دیگه ای هم کار کنه

رضا جاسبی
شنبه 19 مرداد 1387, 22:53 عصر
شما باید امکان تعریف کاربر و تعریف سطح دسترسی رو در برنامه ات داشته باشی. در یک تاپیک دیگه یک فایل کوچک گذاشتم و البته شاید در فرصتی مناسب کمی کاملترش کردم و در تاپیک برنامه های کوچک هم گذاشتم.

http://barnamenevis.org/forum/showthread.php?p=563890#post563890

top7news
یک شنبه 20 مرداد 1387, 11:17 صبح
سلام
در مورد کارمند و کاربر ، خوب هر کارمندی می تونه یه کاربر سیستم باشه که البته اینجا من کارمند و کاربر و مثال زدم برای رسئوندن منظورم .
در مورد اینکه مثلا تعداد زیادی کنترل رو در اختیار این گروه باشه یا نباشه ، من چند تا پیشنهاد دارم
یا به صورت کلاسه بندی عمل کن یعنی یه تعداد کنترل مثلا مدیریتی رو توی یک کلاس و ... تعریف کن .
یا نه هر گروه کنترلی رو توی یه Group box تعریف کن و در مواقع مورد نظرت اون ها رو enable or disable کن .
حالا باز نظر خودته که از Struct استفاده کنی یا از جدول بانک

رضا جاسبی
یک شنبه 20 مرداد 1387, 21:40 عصر
ممنون ولی به این شکل باید هر بار که کل برنامه تغییر میکنه مثلا یه سری کنترل های دیگه اضافه میشه باید struct رو دستی تغییر بدم در صورتی که من میخوام برنامم به صورت پویا باشه و در ضمن تو هر برنامه دیگه ای هم کار کنه

من دقیقا در مورد اینکه پویا باشه همیشه برام سوال بوجود اومده و همیشه هم بی جواب موندم. اگر یک کنترلی رو بخواهیم اعمال کنیم و جلوی دسترسی به اون رو بگیریم چطور میشه به صورت پویا داشته باشیم. مثلا شما چطور می تونی به یک فرم یک تکست باکس اضافه کنی و بدون اینکه برای اون هیچ چیزی بنویسی فعال و غیر فعال بودن اون رو کنترل کنی. البته نه اینکه نمیشه اما در زمان اجرا باید این کنترلها رو اعمال کرد. برای پویایی به نظر من باید کنترلها رو لیست کنید و بعد فعال و غیر فعال بودنشون رو کنترل کنید. در اون تکه برنامه که نوشتم شما تعداد 31 گزینه برای سطح دسترسی داری و البته من 8 دسته 31 تایی دیدم. این رو میشه با یک کد کوچک در برنامه اعمال کرد. فقط در زمان نوشتن برنامه می تونین گزینه های مورد نظرتون رو به درخت سطح دسترسی اضافه کنید و زمان استفاده از کنترل متناظر هم کنترل امکان استفاده را انجام دهید ( اگر اشتباه نکنم اسم تابعش هست IsGranted ) فکر کنم پویایی کنترل می تونه منطق برنامه رو تحت الشعاع قرار بده.
نمی دونم منظور شما رو درست فهمیدم یا نه ولی امیدوارم درست جواب داده باشم.

jogool
شنبه 21 مرداد 1391, 01:22 صبح
سلام
با سلام و عرض ادب من تو برنامه نويسى با سى شارپ تازه واردم , كسى از دوستان ميتون 1 برنامه كو چك با 2 يوزر و 2 كنترل طورى كه يوزر اول هر 2 كنترل را ببينه و يوزر دوم فقط 1 كونترل را ببينه پست كنه.

ممنون ميشم....