PDA

View Full Version : سوال در مورد Role ها در Forms Authentication



Neo Persian
جمعه 13 مهر 1386, 22:08 عصر
1. بهترین نحوه ذخیره سازی role ها به چه صورته؟؟ منظورم ذخیره کردن در DB و یا ...

2. در صورتی که جواب سوال یک همان دیتابیس باشه نحوه اختصاص دادن هر role یا role ها به هر user در هنگامی که میخواهیم بیش از یک role به یک user اختصاص بدیم به چه صورته؟

scorpion_man
جمعه 13 مهر 1386, 22:44 عصر
با سلام
البته در visual studio 2 شرکت ماکروسافت اومده یه مدل توکار و دیتا بیس آماده برای این کار تدارک دیده که بر روی Sql Server پیاده سازی میشه که خیلی کامله ولی اگه نوع دیتابیستون چیز دیگه ای هم باشه میشه یه provider برای اون دیتا بیس برا خودتون بنویسید

البته من یه توضیح مختصری میدم شاید به دردتون بخوره
این دیتا بیس که به صورت پیش فرض تو شاخا app_data قرار داره حاوی table های مختلفی هست
یکی از این table ها برای تعریف application درست شده و شما میتونید یک ساختار اعتبار سنجی برای چند برنامه مختلف داشته باشید
table دوم مربوط به ایجاد user ساخته شده و table سوم برای ساخت role ها و table ای برای اطلاعات خصوصی کاربران و بقیه table ها ارتباطهای میان این table ها رو مشخص میکنه
بعنوان مثال وقتی میخواهید برای یه user چندتا Role تعریف بکنید در این table ها نام اون user و role ای که به اون user اختصاص دادید قرار میگیره و با این کار میتونید چندین Role را به یه user خاص تعریف کنید البته قبلا هم گفتم که این ساختار یه ساختار توکاره و پیش فرض و شما برای استفاده از اینها نباید به خودتون زحمت بدید و فقط کافی از کلاسهای آماده برای این کار استفاده کنید مثلا با دستور (نام نقش)user.IsInRole از فضای context.current.user به راحتی میتونید بفهمید که آیا کاربر جاری عضو نقش یا همون Role مورد نظرتون هست یا نه و دستورات خیلی زیاده دیگه که کارای خاص دیگه ای بر عهده دارن
امیدارم که تونسته باشم کمکتون بکنم البته اگه بخواهد مطالب رو به تفسیل ببینید میتونی تو سایت www.msdn2.microsoft.com (http://www.msdn2.microsoft.com) برای Role یه جستجویی انجام بدید که حتما مفید خواهد بود

Neo Persian
شنبه 14 مهر 1386, 12:32 عصر
خیلی ممنون از توضیحات شما

من خودم کدها رو نوشتم و از component های login استفاده نکردم

پس در دیتابیس role ها ذخیره بشه بهتره

البته FormsAuthentication به نظر من نمیتونه تمامی خواسته ها رو جواب بده چون فقط میتونه name و role هر user رو در هر Authenticate Request بده و نوشتن یه Custom Forms Authentication خیلی بهتر باشه

در مورد سوال دوم هم مثال عملی میخوام

به طور معمول یک table برای ذخیره سازی اطلاعات مهم user مثل username , password و یک table هم برای role ها و یک table هم برای ارتباط این 2 جدول که هر user چه role هایی میتونه داشته باشه

ساختار این جدول رو میخواستم بدونم به چه صورت باید باشه و ارتباط بین user ها و role ها؟

scorpion_man
پنج شنبه 19 مهر 1386, 11:22 صبح
البته FormsAuthentication به نظر من نمیتونه تمامی خواسته ها رو جواب بده چون فقط میتونه name و role هر user رو در هر Authenticate Request بده و نوشتن یه Custom Forms Authentication خیلی بهتر باشه

سلام دوست عزیز
اگه FormAuthentication جوابگوی نیاز شما نیست بهتر یک Provider طراحی کنید تا اینکه بخواهید تمامی کلاسها رو دوباره بنویسید
provider ها اصولا برای این ایجاد شدن تا کنترلهای Default را سفارشی کرده و کلاسهای موجود را ارث برده و متدها را Overrides بکنند با این کار شما می تونید با کمترین وقت به بهترین نتیجه برسید
در مورد مساله دوم من سعی میکنم تا Table ها و روابطشونو براتون ترسیم کنم
موفق باشید

Neo Persian
پنج شنبه 19 مهر 1386, 21:00 عصر
سلام دوست عزیز خیلی ممنون از توجه شما

راستش من توی ASP.Net نه خیلی آماتور هستم و نه خیلی حرفه ای

برای همین میخوام بهترین حالت هارو برای رفع هر نیازم بدونم

در رابطه با طراحی Provider منظور شما این نیست؟؟

http://www.codeproject.com/aspnet/AspNetCustomAuth.asp

چون من میخوام از این روش استفاده کنم اگه منظور شما این نیست و refrenece ی سراغ دارید که بتونه کمک کنه ممنون میشم بگید

در رابطه با جداول و ارتباط آنها به یه نتایجی رسیدم ولی خوشحال میشم از تجربه شما هم استفاده کنم

بازم ممنون

scorpion_man
دوشنبه 19 آذر 1386, 10:50 صبح
سلام دوست عزیز خیلی ممنون از توجه شما

راستش من توی ASP.Net نه خیلی آماتور هستم و نه خیلی حرفه ای

برای همین میخوام بهترین حالت هارو برای رفع هر نیازم بدونم

در رابطه با طراحی Provider منظور شما این نیست؟؟

http://www.codeproject.com/aspnet/AspNetCustomAuth.asp

چون من میخوام از این روش استفاده کنم اگه منظور شما این نیست و refrenece ی سراغ دارید که بتونه کمک کنه ممنون میشم بگید

در رابطه با جداول و ارتباط آنها به یه نتایجی رسیدم ولی خوشحال میشم از تجربه شما هم استفاده کنم

بازم ممنون
سلام دوست عزیز
اگه دارین با asp.net1 کار میکنید این لینکی که دادید خوبه ولی اگه دارید با asp.net2 کار میکنید این کار ببخشید ولی وقت تلف کردنه چون asp.net2 یه روش استاندارد و بسیار قدرتمندی برای این کار مهیا کرده
البته شرمنده ولی یه خورده این مساله provider رو بازتر بکنم که میدونم شما میدونید ولی دوستانی که نمیدونند یخورده در مورد این مساله آگاه تر بشن
provider روشی هست که microsoft برای شخصی کردن راهکارهاش برای برنامه نویسا مهیا کرده و بسیار روش قدرتمندی است که تقریبا شبیه ارث بری خودمونه یعنی 95% عین اونه با چند تفاوت
یعنی شما میتونید راهکارهای آماده مانند formsauthentication یا sitemap و ... رو با کمترین دستکاری طوری بازآوری بکنید که کارهایی که شما دوست دارین و طوری که شما میخواهین کار بکنه و کافیست که کلاس ایجاد شده با ارث بری رو برای برنامه تو web.config به برنامه معرفی بکنید بعد دیگه شما کاری ندارید و عین همون کلاس استاندارد باهاش کار میکنین
به این دلیله که اگه از asp.net2 به بالا استفاده میکنید بهتره این کارو بکنید چون هم خطاهاش کمتر میشه و هم امنیتشو بالاتر میبره
موفق باشید

scorpion_man
دوشنبه 19 آذر 1386, 11:01 صبح
چون من میخوام از این روش استفاده کنم اگه منظور شما این نیست و refrenece ی سراغ دارید که بتونه کمک کنه ممنون میشم بگید

در رابطه با جداول و ارتباط آنها به یه نتایجی رسیدم ولی خوشحال میشم از تجربه شما هم استفاده کنم

بازم ممنون
اما در مورد reference شرمنده فراموش کردم اینم اضافه بکنم
من نمیدونم database شما رو چیه شما اگه نوع database تونو مشخص بکنید متناسب با نوع دیتابیس براتون پیدا میکنم access-mysql-sql server یا اگه پیدا نشد خودم براتون کلاسو مینویسم
البته اگه تو codeproject یه formsauthentication provider جستجو بکنید حتما خواهید یافت ولی بازم من خدمتتون هستم
موفق باشید

Neo Persian
دوشنبه 19 آذر 1386, 15:02 عصر
سلام مرسی از راهنمایی شما
اگه لطف کنید و بهترین روش رو با ASP.Net 2.0 معرفی کنید خیلی ممنون میشم چون فکر میکنم به قول شما این مدت داشتم وقت خودم رو تلف میکردم
دیتابیش هم MS SQL 2005 هستش

scorpion_man
دوشنبه 19 آذر 1386, 17:02 عصر
سلام به همه دوستان
اگه رو sql server 2005 هست اصلا نیازی به ساخت یه provider نداری و میتونی با خیال آسوده از کلاسها و db خود asp.net2 که تو قسمت app_data ایجاد شده استفاده بکنی
ولی اگه نیاز به امکانات و اطلاعات خاصی داشتی که نمیشه با امکانات پیش فرض کار کرد
برو به این لینکها
این لینک ساخت یه provider سفارشی هست:
http://msdn2.microsoft.com/en-us/library/6tc47t75.aspx
این لینک هم نحوه پیاده سازی provider تو قسمت web.config رو نشون میده
http://msdn2.microsoft.com/en-us/library/44w5aswa.aspx
این لینکو کلاسها و متدهای name space system.security را برای forms authentication رو نشون میده:
http://msdn2.microsoft.com/en-us/library/f1kyba5e.aspx
البته اینا برای data base دیگه ای هست ولی همشون یکی هست و عین هم تعریف میشن فقط نحوه اتصالاشون با هم فرق داره مثل کلاسهای sql.client یا odbc و ....
البته بازم میگم برای sql server 2005 نیازی ندارید به ساخت دوباره provider اما بازم یه نگاهی بکنید خالی از لطف نیست بازم اگه مساله ای بود بازم بگید
موفق باشید