PDA

View Full Version : تعیین سطح دسترسی



pooria_googooli
سه شنبه 05 مهر 1390, 23:08 عصر
سلام دوستان . من توی انجمن خیلی سرچ کردم ولی به جوابی که میخواستم نرسیدم . اطمینان دارم این سوال هنوز برای خیلی ها هست . اونم اینه که چجوری برای هر کاربر داخل برنامه یه سطح دسترسی قرار بدیم . شما توجه کنید توی یک برنامه حسابداری که بیش از 50 تا فرم داره هر فرمی 4 قسمت اضافه ویرایش حذف تایید داره از چه الگوریتمی باید استفاده کنیم که مثلا اگر کاربر با یوزر x وارد شد مثلا فرم های 1و2و3و 20 کلا براش غیر فعال شه و توی فرم های 10و11و12و17و18 گزینه تایید و ویرایش براش غیر فعال شه . روشی که توی سایت بود این بود که با صفر و یک کار کنیم یعنی برای هر قسمت بیاد چک کنه صفر هست یا یک اگر صفر بود اون قسمت غیر فعال بشه . آیا به نظرتون این روش برای یک برنامه حجیم حسابداری مناسبه ؟ الگوریتم پیشنهادیه شما چیه ؟

faravaghi
چهارشنبه 06 مهر 1390, 00:36 صبح
سلام،
من تو برنامه هایی که تاحالا نوشتم اینطوری کار میکنم. با استفاده از یک الگوی خاص سطح دسترسی رو تعیین میکنم.
کاربر وقتی قراره یک فرم رو فراخوانی بکنه میام براساس اون الگو میزام فرم رو ببینه یا نه!
این کار بهتره در زمانی انجام بشه که کاربر داره به برنامه اصطلاحا Login میکنه. همون جا اگه اجازه ورود داشت میام سطح دسترسی از بانک میخونم و بعد منوها و دسترسی ها رو بر اساس همون چیزی که قبلا تعیین شده براش نشون میدم.

sanay_esh
چهارشنبه 06 مهر 1390, 01:25 صبح
بنده خودم قبلا برنامه حسابداری در حد سازمان دولتی نوشتم و اون موقع بصورت استاندارد تمامی کنترلهایی که در فرمهای مهم و عملیاتی نام گذاری کردم
و سپس بعد از اینکه هر منویی ایجاد میشد در جدولی به نام کنترل سطح دسترسی کاربران در بانک درج میشد و نام فرمی که از طریق این منو به نمایش کاربر در می آمد
از طرفی تقسیم بندی و اولویت بندی عملیات مهم هم در جدولی نگهداری میشد مانند عملی ثبت با یک کد مشخص ، عمل ویرایش با یک کد مستقل و مشخص و هر عمل دیگر مهم و عملیاتی که از نظر مدیران سیستم باید محدودیت براش درنظر گرفت

بعد برای سطح دسترسی کاربران سیستم یک جدولی بود که همه کاربران با در نظر گرفتن این دسترسی به فرمهای مربوطه دسترسی داشتند
از طرفی وقتی فرم باز میشد تمامی کنترلهای آن توسط یک تابع پیمایش میشد و اگر کنترلی مانند دکمه ثبت که نام کنترل مثلا submit بود را چک میکردم و دسترسی این کاربر به عمل های اصلی را هم از جدولی میخواندم
اگر کد عملی که در سطح دسترسی کاربر بود شامل کنترل ثبت نمیشد برنامه این کنترل را غیر فعال میکرد و از دسترسی کاربر خارج میکرد
این تقریبا بهترین راهی بود که من در حدود 2 ماه جستجو و برنامه نویسی به آن رسیدم و در سطح کنترل های فرم هم سطح دسترسی ایجاد کردم
امیدوارم متوجه شده باشید که چگونه باید عمل کنید
خیلی راحت و ساده است

تشکر یادت نره :خجالت:

jeson_park
چهارشنبه 06 مهر 1390, 01:26 صبح
با سلام
شما می تونید توی دیتا بیس برای هر کاربر یک سری فیلد bool بزاری
بعد توی برنامه هم برای هر منو که می خواهی فعال باشه یا غیر فعال یه متغییر بزارید


public static bool accLibrary = false;
public static bool accTransaction = false;
public static bool accSearch = false;
public static bool accReport = false;

بعد توی برنامه اون ها رو اول با کلاس به نوع بولیین تبدیل کنید و بعد اون ها رو به یه سری متغییر نصبت بدی
accLibrary = Convert.ToBoolean(dt.Rows[0]["accLibrary"].ToString());
accTransaction = Convert.ToBoolean(dt.Rows[0]["accTransaction"].ToString());
accSearch = Convert.ToBoolean(dt.Rows[0]["accSearch"].ToString());
accReport = Convert.ToBoolean(dt.Rows[0]["accReport"].ToString());




بعدش هم اون ها رو به منو هایی که می خوایید غیر فعال یا فعال باشن اختصاص بدین

mnuLibrary.IsEnabled = SystemUser.accLibrary;
mnuTransaction.IsEnabled = SystemUser.accTransaction;
mnuSearch.IsEnabled = SystemUser.accSearch;
mnuReport.IsEnabled = SystemUser.accReport;

خیلی خلاصه توضیح دادم ببخشید

pooria_googooli
چهارشنبه 06 مهر 1390, 08:17 صبح
بنده خودم قبلا برنامه حسابداری در حد سازمان دولتی نوشتم و اون موقع بصورت استاندارد تمامی کنترلهایی که در فرمهای مهم و عملیاتی نام گذاری کردم
و سپس بعد از اینکه هر منویی ایجاد میشد در جدولی به نام کنترل سطح دسترسی کاربران در بانک درج میشد و نام فرمی که از طریق این منو به نمایش کاربر در می آمد
از طرفی تقسیم بندی و اولویت بندی عملیات مهم هم در جدولی نگهداری میشد مانند عملی ثبت با یک کد مشخص ، عمل ویرایش با یک کد مستقل و مشخص و هر عمل دیگر مهم و عملیاتی که از نظر مدیران سیستم باید محدودیت براش درنظر گرفت

بعد برای سطح دسترسی کاربران سیستم یک جدولی بود که همه کاربران با در نظر گرفتن این دسترسی به فرمهای مربوطه دسترسی داشتند
از طرفی وقتی فرم باز میشد تمامی کنترلهای آن توسط یک تابع پیمایش میشد و اگر کنترلی مانند دکمه ثبت که نام کنترل مثلا submit بود را چک میکردم و دسترسی این کاربر به عمل های اصلی را هم از جدولی میخواندم
اگر کد عملی که در سطح دسترسی کاربر بود شامل کنترل ثبت نمیشد برنامه این کنترل را غیر فعال میکرد و از دسترسی کاربر خارج میکرد
این تقریبا بهترین راهی بود که من در حدود 2 ماه جستجو و برنامه نویسی به آن رسیدم و در سطح کنترل های فرم هم سطح دسترسی ایجاد کردم
امیدوارم متوجه شده باشید که چگونه باید عمل کنید
خیلی راحت و ساده است

تشکر یادت نره :خجالت:
دستت درد نکنه ولی یکم گنگه برام اگه همراه با مثال بگی ممنونت میشم .

pooria_googooli
چهارشنبه 06 مهر 1390, 08:18 صبح
با سلام
شما می تونید توی دیتا بیس برای هر کاربر یک سری فیلد bool بزاری
بعد توی برنامه هم برای هر منو که می خواهی فعال باشه یا غیر فعال یه متغییر بزارید


public static bool accLibrary = false;
public static bool accTransaction = false;
public static bool accSearch = false;
public static bool accReport = false;

بعد توی برنامه اون ها رو اول با کلاس به نوع بولیین تبدیل کنید و بعد اون ها رو به یه سری متغییر نصبت بدی
accLibrary = Convert.ToBoolean(dt.Rows[0]["accLibrary"].ToString());
accTransaction = Convert.ToBoolean(dt.Rows[0]["accTransaction"].ToString());
accSearch = Convert.ToBoolean(dt.Rows[0]["accSearch"].ToString());
accReport = Convert.ToBoolean(dt.Rows[0]["accReport"].ToString());




بعدش هم اون ها رو به منو هایی که می خوایید غیر فعال یا فعال باشن اختصاص بدین

mnuLibrary.IsEnabled = SystemUser.accLibrary;
mnuTransaction.IsEnabled = SystemUser.accTransaction;
mnuSearch.IsEnabled = SystemUser.accSearch;
mnuReport.IsEnabled = SystemUser.accReport;

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

pooria_googooli
پنج شنبه 07 مهر 1390, 00:42 صبح
کسی دیگه نظری نداره ؟

mohammadsafari
شنبه 23 مهر 1390, 23:46 عصر
سلام دوست عزیز

واسه این کار راههای مختلفی وجود داره که بسته به وسعت پروژه شما می تونید از اون استفاده کنید
مثلا برای یک پروژه معمولی شما میتونید از کد گری استفاده کنید 1- 2 - 4 - 8 - 16 - 32 -64 - 128 و ...
به طوری که واسه هر صفحه مقداری رو در بانک ذخره کنید مثلا فرم اطلاعات دانشجویان که ععد اون تو بانک هست 8
خوب شما متوجه میشید که این کاربر تو این فرم فرم میتونه ویرایش اطلاعات موجود رو انجام بده
یا مثلا 7 یعنی این کاربر هم اجاره ثبت یک دانشجوی جدید(1) هم حذف دانشجو (2) هم جستجو رو داره(4) یعنی 1+2+4=7
امیدوارم منظورمو رسونده باشم

ya30ien2
یک شنبه 24 مهر 1390, 00:20 صبح
من فکر میکنم منظور دوستمون sanay_esh (http://barnamenevis.org/member.php?42384-sanay_esh) این بوده که مثلا اگه بخوای کنترل کنی که ثبت کردن برای یک کاربر فعال هست یا نه توی رویداد کلیدی این کار رو بکن که قرار صفحه ثبت رو نمایش بده و یک if بنویس اگه true شد نمایش در غیر این صورت یک پیغام نمایش بده البته اگه درست فهمیده باشم