PDA

View Full Version : سوال: طراحی الگریتم و نحوه ایجاد مجوز دسترسی به صفحات برای کاربران



mostafa_sgh
جمعه 11 مرداد 1387, 22:50 عصر
با سلام خدمت دوستان

- چطور می تونم به کاربران برای دسترسی به صفحات مجوز بدم ؟ ( هر کدوم از صفحات من دارای قسمتهای اضافه / حذف / ویرایش میباشند )

من خیلی در رابطه با این موضوع جستجو کردم ، ولی متاسفانه نتیجه مطلوبی بدست نیاوردم.

من تو کارم به علت اینکه از User Control به جای صفحات استفاده کردم و نحوه هدایت کاربران به صفحات با Query String صورت گرفته ، نمی تونم از Membership استفاده کنم ( البته فقط تو این مورد )

لذا از دوستان اگر کسی کمک کنه ممنون میشم.

salehbagheri
شنبه 12 مرداد 1387, 00:01 صبح
خب اين كه كاري نداره!
اول: سعي كن مقدار ارسالي نام كاربر باشه!

دوم: در قسمت load صفحه دوم، كدي بنويس كه مقدار را با نام كاربران تطابق بده! اگر نبود كه هيچ!
اگر بود قسمت اضافه و حذف فعال بشن!

OK?

mostafa_sgh
شنبه 12 مرداد 1387, 00:04 صبح
آخه مشکل اینجاست که این کار برای یک کاربر نیست

بلکه برای یک سیستم مدیریت کاربران هستش !!!!

البته بیشتر مشکلاتم تو طراحی دیتابیس ...

من یه Table برای صفحاتم دارم و از Membership برای Security استفاده کردم.

حل مساله شما برای بعد از حل مشکل منه !!!

hadi000333
شنبه 12 مرداد 1387, 03:02 صبح
مگه از Role استفاده نمی کنی!!
http://www.asp.net/learn/security/

mostafa_sgh
شنبه 12 مرداد 1387, 03:10 صبح
چرا دوست عزیز

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

من علاوه بر اون تازه به هر کاربر میخوام مجوز جداگانه برای حذف یا ویرایش و حذف بدهم .

:متفکر:

milade
شنبه 12 مرداد 1387, 07:29 صبح
خوب یه کار کن شما توی دیتابس یه فیلد بزار مثلا allow
سپس بهش مقدار بده برای هر کاربر مثلا admin,user و غیره
حالا توی لود صفحه چک کن که از کدام طبقه هست با توجه به اون مجوز مربوطه رو بدش
موفق باشی

miladr
شنبه 12 مرداد 1387, 11:24 صبح
شما یه table باید اضافه کنی که سه تا فیلد داشته باشه نام کاربری،id صفحه،حالت (edit,view) بعد تو load صفحه باید چک کنی که اگه کاربر به صفحه n در وضعیت edit دسترسی داره ادامه بده وگرنه redirect شه به صفحه که پیغام مناسب بده.

milade
شنبه 12 مرداد 1387, 11:27 صبح
خوب چرا این کار رو کنه تازه دوستمون می خواد در صورت مثلا admin نبودن هم کاربر بتونه کار کنه(فکر کنم اونی که گفتم دردسرش کمتره)
بای

miladr
شنبه 12 مرداد 1387, 12:11 عصر
کجا همچین فیلدی رو بزارن؟بیشتر توضیح بده فکر می کنم اتباه می کنین!

milade
شنبه 12 مرداد 1387, 12:14 عصر
توی همون جدول کاربران
یه فیلد بزارن(تایپیک قبلی توضیح دادم)
بعد توی قسمت لود صفحه چک کنن
بای

miladr
شنبه 12 مرداد 1387, 12:57 عصر
اینطوری نمیشه که واسه هر کاربر جدا سطح دسترسی تعریف کرد

milade
شنبه 12 مرداد 1387, 13:14 عصر
می شه
مثلا بگی اگه کاربر عضو شد USER
اگه مثلا مثل همین سایت بیش از 50 پست داشت کاربر دائمی
و...
چرا شما می گید نمی شه؟

mostafa_sgh
شنبه 12 مرداد 1387, 15:30 عصر
با تشکر از شما بابت پاسختون

البته راه هائی که فرمودید مفید بودند ( تشکر )

ولی هنوز به چیزی که میخوام نرسیدم

من در واقع میخوام به یه ترکیبی از Membership و سیستمی که خودم دارم طراحی میکنم برسم.

کار تعریف User و Role با Membership هستش و کار اداره مجوزهای صفحات کاربران با من.

با احترام به نظرات شما دوستان خوبم

نظر miladr منطقی تر به نظر میرسه .

تشکر

milade
شنبه 12 مرداد 1387, 17:12 عصر
نظر miladr منطقی تر به نظر میرسه .

خوب وللش
ولی من می گم یه جدول بساز برای هر کاربر یه دسترسی بده(اینو گفتم چون شما در پست های قبل نگفته بودید که از خود بانک asp.net استفاده می کنید(یه جورایی همون miladr))
بای

mostafa_sgh
شنبه 12 مرداد 1387, 17:35 عصر
با توجه به کمکهای دوستان به یه نتایجی رسیدم و اونو عنوان میکنم :

یک Table برای کاربران ( مال خود Membership ) و یک Table برای صفحاتم ( البته آدرس لینک UserControl ها ) و یک Table ثبت دسترسی های کاربران و یک Table هم برای نوع مجوزها ( شامل Add,Edit,Delete,View,..... ) همراه با کد مربوطه ....

حالا من تو قسمت مدیریت لیست صفحاتم رو برای مجوز دادن به کاربر نمایش می دهم.
که هرکدوم از این صفحات دارای ( زیر مجموعه های Add,... ) میباشند.

البته همه اینها رو توی TreeView میخوام نمایش بدهم.

سپس در انتها و پس از انتخاب با فشردن دکمه صدور مجوز ، من فیلدهائی که Select شدن و یا حذف شدن رو بررسی میکنم و توی Table دسترسیها ثبت میکنم.

ووقتی کاربر وارد شد میره و لیست دسترسیها رو براش میاره و مطابق اون تنظیمات انجام مسشه.

حالا نظر دوستان چیه ؟

hadi000333
شنبه 12 مرداد 1387, 17:41 عصر
یه کم با کنترل Login View کار می کردی اینهمه دردسر نداشتی
یه سر اینجا بزن متوجه می شی
http://www.asp.net/learn/security/tutorial-11-cs.aspx

milade
شنبه 12 مرداد 1387, 17:42 عصر
نمی خواد این همه جدول بسازی که .
یه جدول بساز فقط برای مجوزها مثلا admin و user
حالا در لود صفحه بنویس اگه کاربر userبود فقط بتونه add کنه در غیر این صورت همه کهارا
(اینو برای خودت گفتم چون فشار روی سرور زیاد می شه)
بای

mostafa_sgh
شنبه 12 مرداد 1387, 18:05 عصر
نمی خواد این همه جدول بسازی که .
یه جدول بساز فقط برای مجوزها مثلا admin و user
حالا در لود صفحه بنویس اگه کاربر userبود فقط بتونه add کنه در غیر این صورت همه کهارا
(اینو برای خودت گفتم چون فشار روی سرور زیاد می شه)
بای


البته فکر می کنم متوجه عمق فاجعه نشدید

این برنامه برای مدیریت کاربران و نه مدیریت کاربر !!!

در ضمن اگر میتونستم از اونها استفاده میکردم !!!
حتماً یه مشکلی هست که ازشون استفاده نمیکنم.

این کنترل ها برای چیزهای ابتدائی طراحی شده و انعطاف پذیری زیادی نداره ...

در ضمن شما خیلی سطحی به مساله نگاه می کنید و شرایط منو در نظر نمی گیرید.

milade
شنبه 12 مرداد 1387, 18:11 عصر
هه هه هه
نگاه کنید شما مجبورید برای هر صفحه یه دسترسی بدید و.... (کلی دردسر)
در عوضی که میتونید در هنگام ثبت نام این دسترسی رو به کاربر بدید
و بگید اگه کاربر از نوع user بود این دسترسی در غیر این صورت این
شما مشکلت رو بگو چرا از راه حل من استفاده نمی کنی؟
بای

mostafa_sgh
شنبه 12 مرداد 1387, 18:21 عصر
تو کت من نمیره !!! :عصبانی:

هنوز با چیزی که میخوام جور در نمیاد ....

mostafa_sgh
شنبه 12 مرداد 1387, 18:49 عصر
البته شاید یه خورده خنگ باشم ولی تو اون زمینه ای که مطرح فرمودید ، فکر میکنم یه چیزائی بلد باشم

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

دم همتون گرم ، شاید باید بیشتر فکر کنم.

miladr
شنبه 12 مرداد 1387, 20:26 عصر
اقا مصطفی همون شیوه که انتخاب کردی خوبه فقط فکر نمی کنم اینهمه table لازم باشه.
شما احتیاج داری به یک table (مگر این که چیز خاصی مد نظر باشه) و table های membership
این table باید شامل ID کاربر، id usercontrol استفاده از آدرس رو پیشنهاد نمی کنم چون شاید از یک user control در 2جا استفاده بشه و در یکی لازم باشه مثلا کاربر1 دسترسی داشته باشه و جای دیگه نه،و حالت دسترسی مثل (edit,view,...) که میتونه تو یک table جدا باشه اما من فکر می کنم چون تعدادش کمه و معمولا view و edit رو شامل میشه میتونه تو همین table هم باشه.این شیوه بهترین راه هست و dotnetnuke هم از همین شیوه پیروی می کنه با این تفاوت که در دو سطح این کار رو می کنه یک سطح بررسی میشه که اصلا این کاربر اجازه داره این صفحه رو ببین و در سطح دیگه بررسی میشه که چه ماژول هایی رو میتونه ببینه.

mostafa_sgh
شنبه 12 مرداد 1387, 20:34 عصر
آقا میلاد دستتون درد نکنه

البته با تفکراتی که انجام دادم نتیجه خوبی حاصل شده و به یه جائی رسیدم ...

یه عکس میزارم که نشون دهنده طراحی View تو دیتابیس.

البته من از Table صفحات استفاده میکنم چون منوی Admin نم رو از روی اون Bind میکنم ( باز هم به خاطر شرایطی که دارم مجبورم )

فقط تو این قسمت مشکل دارم و اونم اینه اگر کاربری عضو Role ی باشه اختیارات اون رو هم به ارٍ میبره یا نه ؟( اصولاً باید ببره )
اگر هم کاربر یه سری دسترسی ها به طور مجزا براش تعیین بشه ، چطور ؟

نظرتون رو بگید ممنون میشم .

hadi000333
یک شنبه 13 مرداد 1387, 03:05 صبح
آخرین پیشنهادم
توی userControl می تونی همچین کاری بکنی

HttpContext.Current.User.IsInRole("RoleName")
RoleName رو می تونی به صورت هارد کد به کار ببری یا از DataBase بخونی
اگه مثلا Role کاربر َAdmin بود دکمه Delete رو نشون میدی و اگه نبود Visible دکمه Delete رو False می کنی (اگه با GridView کار می کنی توی رویداد RowCreate )
اگه مشکلت رو درست فهمیده باشم این طوری حل می شه
خدا حافظ.

mostafa_sgh
یک شنبه 13 مرداد 1387, 04:25 صبح
ممنون دوست عزیز

به یه نتایجی رسیدم و پس از اتمام کار اون رو اینجا قرار میدم.

miladr
یک شنبه 13 مرداد 1387, 09:54 صبح
شما بهتر یک کلاس بنویسی که یه تابع داشته باشه که نام کاربری شماره صفحه و حالت رو بگیره و خروجی boolean بده.بعد تو این تابع هم چک کنی که ایا این کاربر اجازه داره یا نه و هم اینکه roleهای کاربر اجازه دارن یا نه.

el_abdollahi
یک شنبه 13 مرداد 1387, 14:45 عصر
سلام بر همگی.
فکر کنم روشی که من استفاده میکنم به درد شما بخوره. اگه به عکس realation نگاه کنین همه چیز رو متوجه میشین.
همون طور که توی عکس میبینید من توی پروژم واسه کاربرام گروه کاری تعریف کردم واسه اینکه ممکنه تعدادی از کاربران سطح دسترسی یکسان داشته باشند.
بعد واسه هر یک از گروه های کاری سطح دسترسی برای هر یک از فرم ها و گزارشها شامل اجازه مشاهده ، افزودن،ویرایش و حذف رو تعیین کردم.
توی page-load صفحه هم این مجوزها و بررسی میکنم.و بنا به اونها اجازه عملیات مورد نظر را به کاربر میدم.
در ضمن اسم فرم ها و گزارش ها رو هم اول توی یه فایل XML میریزم. بعد توی فرم مدیریت گروه های کاری ، اونها رو از فایل XML میخونم و توی گرید ویو میریزم تا مدیر دسترسی لازم رو بده و بعد هم توی بانک میریزم.

fat_roze2000
سه شنبه 15 مرداد 1387, 17:01 عصر
با توجه به ساختاری که فرستادم میشه بصورت درختی چارت سازمانی برای کاربران تعریف کرد.
همچنین باید منو ها را به صورت درختی طراحی کرد.
بعد تعیین میکنیم که کدام جایگاه سازمانی چه دسترسی هایی را دارد.
سپس باید 2 تا تابع بنویسی یکی موقعی که فرم اصلی لود میشه که باید دسترسی منوها را بررسی کنی
یکی هنگام لود شدن هر صفحه که بایستی با توجه به دسترسی چارت اجزا صفحه را enable یا disable کنی