PDA

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



vbkaar
سه شنبه 31 مرداد 1396, 19:48 عصر
سلام. فرض کنید که کاربرای مختلف یک سری اطلاعات شخصی مثل اسکن مدارک خودشون رو در سایت آپلود میکنن. من میخوام که کاربر فقط بتونه به فایل مربوط به خودش دسترسی داشته باشه و حالا با حدس دایرکتوری یا هر روش دیگه ای نتونه به فایل کاربرای دیگه دسترسی داشته باشه. این رو هم بگم که من دارم از Identity برای احراز هویت کاربرا استفاده میکنم. بعدش اینکه به نظر شما این درست هست که مدارک همه کاربران رو در یک دایرکتوری آپلود کنیم؟ یا باید برای هر نام کاربری یک پوشه در نظر گرفته بشه؟
ممنون

Moien Tajik
چهارشنبه 01 شهریور 1396, 00:47 صبح
2 راه دارید برای پیاده سازی همچین چیزی :

1- عکس های کاربران رو داخل دیتابیس ذخیره کنید ( File Table ) و از اونجا عکس هارو بهشون نمایش بدید که این روش خیلی راحت و کم دردسر هستش .
2- روش دوم کمی پیچیده هستش در صورتی که عکساتون رو داخل Directory ذخیره کرده باشید و بخواید از اونجا محدودیت رو اعمال کنید .

بطور پیشفرض دسترسی مستقیم به فایل های حساس پروژه مثل cs. و config. و cshtml. توسط خود asp گرفته میشه اما دسترسی مستقیم به فایل های static پروژه مثل عکس ، PDF و ... باز هستش .

اگر قصد دارید دسترسی به یک فایل رو محدود کنید ، باید براش Custom Http Handler بنویسید : https://forums.asp.net/t/1886765.aspx?Deny+Access+to+folder

این هم روش دیگه ای برای محدودسازی دسترسی به یک پوشه با استفاده از Rule ها که static هستش : https://stackoverflow.com/a/3776972

برای همچین موردی پیشنهاد میکنم عکس هارو داخل FileTable در دیتابیس ذخیره کنید ، نسبت به روش دوم راحتتر هستش .

vbkaar
چهارشنبه 01 شهریور 1396, 07:05 صبح
2 راه دارید برای پیاده سازی همچین چیزی :

1- عکس های کاربران رو داخل دیتابیس ذخیره کنید ( File Table ) و از اونجا عکس هارو بهشون نمایش بدید که این روش خیلی راحت و کم دردسر هستش .
2- روش دوم کمی پیچیده هستش در صورتی که عکساتون رو داخل Directory ذخیره کرده باشید و بخواید از اونجا محدودیت رو اعمال کنید .

بطور پیشفرض دسترسی مستقیم به فایل های حساس پروژه مثل cs. و config. و cshtml. توسط خود asp گرفته میشه اما دسترسی مستقیم به فایل های static پروژه مثل عکس ، PDF و ... باز هستش .

اگر قصد دارید دسترسی به یک فایل رو محدود کنید ، باید براش Custom Http Handler بنویسید : https://forums.asp.net/t/1886765.aspx?Deny+Access+to+folder

این هم روش دیگه ای برای محدودسازی دسترسی به یک پوشه با استفاده از Rule ها که static هستش : https://stackoverflow.com/a/3776972

برای همچین موردی پیشنهاد میکنم عکس هارو داخل FileTable در دیتابیس ذخیره کنید ، نسبت به روش دوم راحتتر هستش .

ممنون.
منم فکر میکنم که روش دومی که گفتید شاید زیاد مناسب این مشکل نباشه. چون من میخوام که در واقع یک کاربر ثبت نام شده فقط به فایلی که مربوط خودش هست دسترسی داشته باشه ولی تا اونجایی که متوجه شدم اون روش
Custom Http Handler هم باز مبتنی بر
role
هست. یعنی یک فایل خاص رو فقط به یک کاربر خاص تخصیص نمیده درسته؟ البته فکر کنم بشه به نوعی از این روش استفاده کرد ولی مجبورم برای هر کاربری که ثبت نام میکنه یک پوشه جدید در نظر بگیرم که اون فایل Web.config رو هم داشته باشه که البته نمیدونم این کار چقدر منطقی و شدنی هست.

در مورد روش اول یعنی ذخیره تصویر در دیتابیس، فقط برام این سوال پیش میاد که آیا روش مرسومی هست و باعث کند شدن دیتابیس نمیشه؟ چون اینجوری فکر کنم حجم دیتابیس میره بالا به شدت. خیلی ممنون

Moien Tajik
چهارشنبه 01 شهریور 1396, 09:37 صبح
اینکه به ازای هر کاربر 1 پوشه و 1 فایل web.config ساخته بشه منطقی نیست .


در مورد روش اول یعنی ذخیره تصویر در دیتابیس، فقط برام این سوال پیش میاد که آیا روش مرسومی هست و باعث کند شدن دیتابیس نمیشه؟ چون اینجوری فکر کنم حجم دیتابیس میره بالا به شدت. خیلی ممنون
File Table برای ذخیره فایل داخل دیتابیس ایجاد شده و کندی نداره .

راه دیگه ای که به ذهنم رسید این هست که شما با 1 فایل web.config کل دسترسی مستقیم به اون فولدر فایل های آپلود شده رو ببندید ; آدرس عکس ها رو داخل دیتابیس ذخیره کنید ، هر وقت بهشون نیاز داشتید داخل اکشن بصورت Return File برش گردونید و داخل ویو نمایشش بدید :
https://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files