PDA

View Full Version : سوال: ایجاد سطح دسترسی کاریران



mahsa.c3
پنج شنبه 18 آذر 1389, 14:04 عصر
سلام به همه
من یه وبسایت (#asp.net c) دارم که می خوام کاربر سایت(منظورم مدیر با سطح دسترسی بالاست)بتونه برای بقیه گروههای کاربری(همون بقیه کاربرا)سطح دسترسی تعیین کنه که مثلأ فلان کاربر بتونه عمل خاصی رو انجام بده یا نده.یه چیزی شبیه این که 1صفحه داشته باشم که داخلش به ازای هر عمل از سایتم یه چک باکس بزارم و مدیر بتونه با گذاشتن یا برداشتن تیک سطح دسترسی هارو تعیین کنه.
امیدوارم توضیحم واضح بوده باشه
خب حالا سوالم اینه:
اینو چه طوری پیاده سازی کنم؟اولین وتنهاترین:ناراحت:راه حلی که به ذهنم میرسه اینه که 1جدول تو دیتابیسم برای هر گروه کاربری ایجاد کنم و به تعداد اعمال سایتم فیلد boolean بزارم که مثلأ اگه کاربران اون گروه اجازه نداشته باشن عملیات خاصی رو انجام بدن،فیلد همون عمل تو جدول دیتابیسم براشون falsبشه
به نظر شما این ایده ی خوبیه؟اگه نه کسی هست کمکم کنه؟راه حل دیگه؟؟!
درضمن من تازه کارم این که پیاده سازیش برام قابل فهم باشه هم مهمه
با تشکر از اینکه وقت میگذارید

aminghaderi
یک شنبه 12 دی 1389, 04:34 صبح
اولین وتنهاترین:ناراحت:راه حلی که به ذهنم میرسه اینه که 1جدول تو دیتابیسم برای هر گروه کاربری ایجاد کنم و به تعداد اعمال سایتم فیلد boolean بزارم که مثلأ اگه کاربران اون گروه اجازه نداشته باشن عملیات خاصی رو انجام بدن،فیلد همون عمل تو جدول دیتابیسم براشون falsبشه
به نظر شما این ایده ی خوبیه؟اگه نه کسی هست کمکم کنه؟راه حل دیگه؟؟!بله تقریبا به همین شکلی که فرمودید هست.
منتها یکم باید روی دیتابیست کار کنی تا حق دسترسی ها دقیق تر و کامل تر بشه.
برای مثال کاربری که وارد سیتم می شه باید قبل اینکه صفحه رو ببینه ، درون سرور شما چک بکنی که آیا کار بر حق دیدن این صفحه رو داره یا خیر ، اگر نداشت باید اون رو محترمانه به صفحه اول انتقالش بدید.
البته استراتژی انجام کار بر عهده خود شما و کار آیی وبسایت شما و جنبه های افکار عمومی و سیاست های گروه توسعه (شما) دارد.
بعضی اوقات کاربر نباید بفهمه که اصلا همچین بخشی وجود دارد ، خوب برای مثال کاربر رو به یه صفحه که حاوی کد 404 page Not Found هست منتقل می کنیم.

خوب همانطوری خودتون هم فرمودید تمام این حق دسترسی ها باید در دیتابیستون لحاظ و در سرور کنترل بشه.
خوب برای اول کار شما همون الگریتم خودتون رو کار کنید ، کم کم خودتون وارد جزئیات می شید و همه چیز دستون می یاد .

موفق باشید.

teshnehab
یک شنبه 12 دی 1389, 08:55 صبح
جناب aminghaderi بابت جواب،متشکرم.
یه سوال دیگه هم من دارم،با این اوصاف که گفتید ،اگر من بخوام مشخصات دیگری از کاربرم رو ثبت کنم مثل ساعت ورود و خروج اش و آی پی سیستمش.
اول اینکه چطور اینها رو بدست بیارم؟آیا مربوط به بحث کوکی ها میشه؟
دوم اینکه آیا باید در جدول مربوط به کاربر این فیلدها رو درج کنم،تا بعد بتونم بر اساس اونها گزارش بگیرم؟

امیدوارم متوجه سوالم شده باشید.

Kia_MLS
یک شنبه 12 دی 1389, 10:00 صبح
سلام به همه
من یه وبسایت (#asp.net c) دارم که می خوام کاربر سایت(منظورم مدیر با سطح دسترسی بالاست)بتونه برای بقیه گروههای کاربری(همون بقیه کاربرا)سطح دسترسی تعیین کنه که مثلأ فلان کاربر بتونه عمل خاصی رو انجام بده یا نده.یه چیزی شبیه این که 1صفحه داشته باشم که داخلش به ازای هر عمل از سایتم یه چک باکس بزارم و مدیر بتونه با گذاشتن یا برداشتن تیک سطح دسترسی هارو تعیین کنه.
امیدوارم توضیحم واضح بوده باشه
خب حالا سوالم اینه:
اینو چه طوری پیاده سازی کنم؟اولین وتنهاترین:ناراحت:راه حلی که به ذهنم میرسه اینه که 1جدول تو دیتابیسم برای هر گروه کاربری ایجاد کنم و به تعداد اعمال سایتم فیلد boolean بزارم که مثلأ اگه کاربران اون گروه اجازه نداشته باشن عملیات خاصی رو انجام بدن،فیلد همون عمل تو جدول دیتابیسم براشون falsبشه
به نظر شما این ایده ی خوبیه؟اگه نه کسی هست کمکم کنه؟راه حل دیگه؟؟!
درضمن من تازه کارم این که پیاده سازیش برام قابل فهم باشه هم مهمه
با تشکر از اینکه وقت میگذارید

سلام
توضیحات جناب aminghaderi بسیار مفید بود، اما من یه پیشنهاد دیگه دارم
استفاده از Role و Rule
در همین سایت در موردش بحث شده
http://barnamenevis.org/showthread.php?257287-آموزشی-ساخت-لاگین

موفق باشی

mehrdad201
یک شنبه 12 دی 1389, 12:14 عصر
منم یه پیشنهاد دارم.

اینکه بیایم همینطور که دوستمون کیا فرمودند از رول استفاده کنیم. به این صورت که به هر گروه از عملیات یک رول اختصاص میدیم. مثلا یک گروه داریم (فرض گروه شماره یک) که عملیات 1 ، 2 و 3 براش تعریف شده. کاربری که این رول رو داشته باشه میتونه این 3 عملیات رو انجام بده.
یک گروه دیگه داریم که عملیات 4 و 5 براش تعریف شده. یک گروه هم داریم که فقط یک عملیات براش تعریف شده

پس در بدبینانه ترین حالت ما برای هر عملیات یک رول داریم . (بدبینانه از اون نظر گفتم که فکر کنیم چقدر تعداد رول ها زیاد شده)

هر یوزر هم میتونه از یک تا n رول رو داشته باشه.

رول ها رو میشه در دیتابیس ذخیره کرد (با تغییر پرو وایدر) پس ادمین اصلی میتونه داینامیک رولها رو زیاد و کم کنه. همچنین موقع تعریف عملیات هم میتونه همونجا رول مربوطه رو بهش اختصاص بده.

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

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

نظرتون در مورد این ایده چیه ؟!

aminghaderi
یک شنبه 12 دی 1389, 15:18 عصر
جناب aminghaderi بابت جواب،متشکرم.
یه سوال دیگه هم من دارم،با این اوصاف که گفتید ،اگر من بخوام مشخصات دیگری از کاربرم رو ثبت کنم مثل ساعت ورود و خروج اش و آی پی سیستمش.
اول اینکه چطور اینها رو بدست بیارم؟آیا مربوط به بحث کوکی ها میشه؟
دوم اینکه آیا باید در جدول مربوط به کاربر این فیلدها رو درج کنم،تا بعد بتونم بر اساس اونها گزارش بگیرم؟

امیدوارم متوجه سوالم شده باشید. سلام.
ساعت ورود و خروج که خوب از هومن system Global... استفاده کنید و برای ای پی سیستم و مشخصات مروگر و رزولوشن صفحه نمایش و... (مثل وب گذر) باید از جاوا اسکریپت کمک بگیرید ، زیاد سخت نیست یه سرچ در گوگل داشته باشید با عنوان "How do i can get client info in JavaScript ?? " یا عناوین دیگه راحت براتون کل کد مربوط به این کار با توضیح هر کد براتون می یاره ، من حقیقت سیستمم خیلی بهم ریخته هست و همچنین بکاپ های متعددی داره و خلاصه کد ها دم دست نیست و گرنه براتون آپ می کردم.
برای بحث کوکی خیر ، ارتباطی با اونها نداره و سعی هم کنید زیاد از کوکی استفاده نکنید چون به نظر من اصلا صلاح نیست به کوکی ها اعتماد بشه.
برای ذخیره اطلاعاتتون هم خوب بهترین گزینه همون db هستش.
نکته : طراحی دیتابیس کار ساده ای نیست ؟! و برای ساخت یه پایگاه اصولی (پایگاهی که هر نوع گزارشی رو در باره اطلاعات ذخیره شده بتونه ارائه بدهد) نیاز به صرف زمان و تحلیل منطقی داره ، یه مقدار سخت هست و لی در زمان اتمام کار با مشاهده عملکرد پایگاه تمام خستگیتون در می یاد.

نکته 2 : زمان خروج کاربر یه مبحث تقریبا پیچیده ای داره ، برای مثال کاربر از سیستم خارج نمی شه ولی مرورگر خودش رو می بنده؟! خوب اون عملا خارج شده ولی شما هنوز تو سشن خودتون اون رو دارید!
خوب برای این مورد روش های وجود داره که هر کدوم مکافات خودش رو داره!
مثلا ارسال در خاست با استفاده از اجکس از کلاینت به سرور و ساخت یه سیستم زمانبندی برای برسی درخاست کلاینت در فواصل زمانی مورد نظر و ...
مثال 2 که راحت تر هم هست برسسی ای پی های آنلاین و کسر ip که در لیست وردی ها بوده ولی الان در لیست ای پی های آنلاین نیست و این هم نیاز به یه سیستم زمانبندی داره که کمی مشکله.




نظرتون در مورد این ایده چیه ؟! این که ایده نیست عزیزم ، این یک روش مرسوم هستش!
ایده چیزی هست که برای اولین بار به ذهن یک نفر می رسه.

موفق باشید.

mehrdad201
یک شنبه 12 دی 1389, 15:41 عصر
درست میفرمایید. این یک روش هست :) ایده نیست. راستش بهتر از این فکری به نظر من نرسید.

یا ما میخوایم کد نویسیمون کم بشه که خب استفاده از سیستمهای اماده مثل همین ممبرشیپ و توسعه دادن اونها راه خوبی برای ماست
یا اینکه میخوایم سیستم 100 درصد دستی داشته باشیم که هر طوری بخوایم ازش استفاده کنیم که خب مسلما این سیستم نیاز به زمان و کد نویسی بیشتری داره :)