PDA

View Full Version : بهترین راه برای ایجاد محدودیت برای کاربران



pouria_bayat
یک شنبه 20 اردیبهشت 1394, 17:31 عصر
سلام دوستان فرض کنید 3 تا فرم داریم که توی هر فرم یکسری Component مثلا دکمه، Radiobutton و Checkbox و ... وجود داره حالا اگر بخواهیم یکسری از کاربران رو محدود کنیم (منظور کاربران برنامه هستش نه ویندوز) مثلا کاربر مدیر بتونه به همه اجزا دسترسی داشته باشه ولی کاربر ساده مثلا حق ثبت نام داشته باشه ولی حق حذف نه! یا ویرایش نه چیکار کنیم بهتره؟ البته خودم یکسری اطلاعات دارم و این تایپیک جنبه کد نویسی و پیاده سازی نداره فعلا فقط ایده.
ممنون.

RmeXXXXXXXXX
یک شنبه 20 اردیبهشت 1394, 21:37 عصر
دو راه وجود داره برای اعمال محدودیت! اول اینکه برای کاربران سطح دسترسی مشخص کنیم. که کار ساده تر میشه مثلا همین مورد ک شما فرمودید. کاربر مدیر، کاربر معمولی و کاربر مهمان (سه سطح. بیشتر یا کمترش بسته به نیاز دارد)
دوم اینکه در هین ایجاد هر کاربر بخش ها یا عملیات هایی را براش به عنوان لیست سیاه یا لیست سفید ایجاد کنیم (در برنامه های بروز) اینطوری کدنویسی بیشتری میخواد ولی دست کاربر مدیر جهت محدود سازی تک تک کاربرها آزاد است.
در هر صورت باید در دو موقع عمل اعتبارسنجی انجام بشه! موقعی که کاربر وارد فرمی میشه (اگه اجازه داشت) اجزایی ک دسترسی نداره باید مخفی بشن (ولی این فقط جنبه نمایشی دارد) و موقع دسترسی به اطلاعات هم حتماً باید اعتبارسنجی کاربر انجام بگیرد. چون روشهایی وجود داره ک میشه اجزای مخفی شده فرمها رو قابل نمایش و استفاده درآورد...

systam
یک شنبه 20 اردیبهشت 1394, 22:53 عصر
سلام
آخ چی میشد یکی از دوستان به صورت فیلم آموزشی
واضح نکته به نکته بتونه توضیح بده
مشکل خیلی ها رو حل میکنه
یکی من رو توجیه کنه میتونم آموزش تصویری شو درست کنم

محمد رضا فاتحی
دوشنبه 21 اردیبهشت 1394, 09:20 صبح
اول شما باید مشخص کنید که برنامه چند قسمت اساسی داره و هر قسمت توسط چه نوع کاربری باید ایجاد بشه(مثلا کاربر مدیر دسترسی کامل یا full داره کاربر معمولی دسترسی های مختلف) مثلا ثبت کاربر ، ثبت حساب ، امور مربوط به حسابداری ، گزارشات ، تنظیمات و ....
اولین کاربر ثبت نامی تو سیستم رو می تونید مدیر و با دسترسی کامل قرار بدید و مدیر می تونه کاربرهای متفاوت با دسترسی های متفاوت ثبت کنه مثلا یه کاربر حق ثبت مشتری داشته باشه یه کاربر مثلا امور حسابداری....
حالا چکار می کنیم...(روش من...)
میایم موقع ثبت کاربر یه چک لیست باکس ، یا روش ساده تر چک باکس می زاریم تو صفحه به تعداد محدودیت ها ، کاربر مدیدر میاد برای هر کاربرش دسترسی ها رو چک می زنه
موقع ثبت اطلاعات تو جدولتون یه فیلد میزارید مثلا به اسم dastrasi... فقط با مقادیر صفر و یک پی در پی با ترتیب محدودیت مثلا 1001 (یک دسترسی آزاد ، صفر دسترسی ندارد) ترتیبش مهمه این مقدار رو برای امنیت بهترش کد می کنید و میریزید داخل دیتابیس

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

فرض کنید دسترسی اول مربوط به ثبت اطلاعات مشتریه....
کدتون این شکلی میشه
private void button6_Click(object sender, EventArgs e) {
if (dastrasi[0] == '1')
{
//Your action;
}
else
{
MessageBox.Show("کاربر گرامی دسترسی به این قسمت برایتان مقدور نمی باشد");
}
}
این اعتبار سنجب همونطور که دوستمون گفتن باید برای تمام قسمت هایی که محدودیت داره اعمال بشه
اگه متوجه نشدید بگید یه تکه کد براتون بنویسم

محمد رضا فاتحی
دوشنبه 21 اردیبهشت 1394, 10:38 صبح
اینم یه نمونه کد ساده
http://s3.picofile.com/file/8187911900/userlimit.rar.html

RmeXXXXXXXXX
دوشنبه 21 اردیبهشت 1394, 23:11 عصر
این قطعه باید تصحیح بشه if (dastrasi[0] == '1')
به جای مساوی از => یا =< استفاده بشه که کاربران با دستری بیشتر یا کمتر (بسته به نوع تعریف) هم بتونن استفاده کنن. مثلاً کاربران سطح 1 به بالا

nunegandom
سه شنبه 22 اردیبهشت 1394, 02:58 صبح
اگه تا حالا CPanel کار کرده باشی راحت میتونی بفهمی چی میگم
اینجوری کار شده: هر کد عددی نمایشگر میزان سطح دسترسی به یک فایل یا هرچیز دیگریست
اینو ببین:
http://support.hostgator.com/articles/cpanel/how-to-change-permissions-chmod-of-a-file
به نظر من که عالیه

محمد رضا فاتحی
سه شنبه 22 اردیبهشت 1394, 08:58 صبح
این قطعه باید تصحیح بشه if (dastrasi[0] == '1')
به جای مساوی از => یا =< استفاده بشه که کاربران با دستری بیشتر یا کمتر (بسته به نوع تعریف) هم بتونن استفاده کنن. مثلاً کاربران سطح 1 به بالا
دلیلی نداره شما به کاربرتون مثلا در مورد ثبت اطلاعات یا بهش اجازه می دید یا نمی دید حالت سومی که وجود ندارد....داره و من نمی دونم؟

pouria_bayat
سه شنبه 22 اردیبهشت 1394, 19:11 عصر
سلام به دوستان همین کار و کردم براساس نوع مدیریت و کاربری که تعریف میشه ابتدا یک گروه تشکیل دام مثلا گروه SuperModerator که عدد یک داره و یک گروه مدیر که عدد 2 و ....
تنها چیزی که برام ملاک بود میخواستم ایده بگیرم ببینم شاید ایده بهتری نیز باشه. فقط مشگلی که هست اینه که اگر تعداد فرم ها و کامپوننت ها زیاد بشه دردسرش هم زیاد میشه، و فرض کنید اگر اطلاعات کاربر توی دیتابیس خراب بشه باز مشگل سازه، اگر هر کدوم از کامپوننت ها تعریف بشه که آیا این شی قابل دسترس باشه یا نه بازم اینم یک مشگله ولی مثل اینکه همین راه فعلا بهترین راه هستش. از همگی ممنونم.

pouria_bayat
سه شنبه 22 اردیبهشت 1394, 19:14 عصر
اول شما باید مشخص کنید که برنامه چند قسمت اساسی داره و هر قسمت توسط چه نوع کاربری باید ایجاد بشه(مثلا کاربر مدیر دسترسی کامل یا full داره کاربر معمولی دسترسی های مختلف) مثلا ثبت کاربر ، ثبت حساب ، امور مربوط به حسابداری ، گزارشات ، تنظیمات و ....
اولین کاربر ثبت نامی تو سیستم رو می تونید مدیر و با دسترسی کامل قرار بدید و مدیر می تونه کاربرهای متفاوت با دسترسی های متفاوت ثبت کنه مثلا یه کاربر حق ثبت مشتری داشته باشه یه کاربر مثلا امور حسابداری....
حالا چکار می کنیم...(روش من...)
میایم موقع ثبت کاربر یه چک لیست باکس ، یا روش ساده تر چک باکس می زاریم تو صفحه به تعداد محدودیت ها ، کاربر مدیدر میاد برای هر کاربرش دسترسی ها رو چک می زنه
موقع ثبت اطلاعات تو جدولتون یه فیلد میزارید مثلا به اسم dastrasi... فقط با مقادیر صفر و یک پی در پی با ترتیب محدودیت مثلا 1001 (یک دسترسی آزاد ، صفر دسترسی ندارد) ترتیبش مهمه این مقدار رو برای امنیت بهترش کد می کنید و میریزید داخل دیتابیس

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

فرض کنید دسترسی اول مربوط به ثبت اطلاعات مشتریه....
کدتون این شکلی میشه
private void button6_Click(object sender, EventArgs e) {
if (dastrasi[0] == '1')
{
//Your action;
}
else
{
MessageBox.Show("کاربر گرامی دسترسی به این قسمت برایتان مقدور نمی باشد");
}
}
این اعتبار سنجب همونطور که دوستمون گفتن باید برای تمام قسمت هایی که محدودیت داره اعمال بشه
اگه متوجه نشدید بگید یه تکه کد براتون بنویسم

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

nunegandom
چهارشنبه 23 اردیبهشت 1394, 01:37 صبح
یه لایه سطح دسترسی که بذاری خیلی راحت تر میشه ها:متفکر:

hamid_hr
چهارشنبه 23 اردیبهشت 1394, 08:37 صبح
یه لایه سطح دسترسی که بذاری خیلی راحت تر میشه ها:متفکر:
میشه بیشتر توضیح بدین
یا یه منبع معرفی کنین

imanx7
چهارشنبه 23 اردیبهشت 1394, 14:52 عصر
من خودم همیشه تو برنامه هام یه کلاس استاتیک بین فرم login و Main میسازم که اگر user و Pass کاربر درست بود تمامی اطلاعات کاربر رو توو کلاس میریزم و از همونجا بررسی میکنم که کاربر اجازه ی دسترسی هارو داره یا نه ! تا الانم باش کار کردم و مشکلی نداشتم ؛

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 18:38 عصر
من خودم همیشه تو برنامه هام یه کلاس استاتیک بین فرم login و Main میسازم که اگر user و Pass کاربر درست بود تمامی اطلاعات کاربر رو توو کلاس میریزم و از همونجا بررسی میکنم که کاربر اجازه ی دسترسی هارو داره یا نه ! تا الانم باش کار کردم و مشکلی نداشتم ؛

برای امنیت بشتر برنامه ها هم فکر خوبیه، اما یک مشگل داره، سطح دسترسی رو باید کاربر اول یا همون درخواست کننده نرم افزار(خریدار) برای کاربرهای دیگه بزاره توی این حالت دیگه این امکان وجود نداره که خریدار بیاد و برای کاربرهای دیگه ای که برای برنامه تعریف میکنه سطح دسترسی بزاره.
اگر فرضا فیلدهایی هم باشه که خصوصیاتشون رو True یا False کنیم بازم باید اطلاعات توی دیتابیس ذخیره بشه و بعد دوباره روی کلاس و فیلدها بارگذاری بشه برای کاربرهای دیگه که میشه دوباره کاری.