View Full Version : طراحی جداول مربوط به یک ممبرشیپ اختصاصی
dehqhani
یک شنبه 19 مرداد 1393, 07:08 صبح
سلام دوستان
من میخوام برای سایتم یک ممبرشیپ اختصاصی بسازم ولی نمیدونم باید چه جداولی داشته باشد .
و درضمن من میخوام برای هر کاربر یه پروفایل ایجاد کنم. تا بتونم به اون سطح دسترسی با توجه به سمتش در سازمان بدم.
و من میخوام بعضی از منوها و فیلدهای فرم ها برای یکی گروه کاربری فعال برای دیگری غیر فعال شود .
چطور میتونم اینکار را با استفاده از یک ممبرشیپ اختصاصی انجام بدم
بهزاد علی محمدزاده
دوشنبه 20 مرداد 1393, 12:23 عصر
سلام . شما با طراحی جداول : کاربران و نقش ها که با هم رابطه M:N دارند می تونید این کار و انجام بدین . منطق کار به این صورت هست : در جدول نقش ها ( یا می تونید اسمش و سطح دسترسی بذارید ) . برای هر امکانی معادلش در جدول به عنوان سطح دسترسی در نظر گرفته میشه . ساختار جداول :
کاربران : کد کاربر , نام کاربر و ...
نقش ها : کد نقش , نام
جدول واسط کاربران و نقش ها : کد کاربر , کد نقش
جدول پر شده کاربر : 1, بهزاد , ...
جدول پر شده نقش : 1, Users.Edit
جدول واسط : 1, 1
جدول نقش ها رو بایستی برنامه نویس بصورت دستی پر کنه . ( بعضی قسمت ها میشه داینامیک باشه . یعنی با ایجاد منو جدید . نام منو به همراه چند سطح دسترسی از منو مثل : MenuName.Edit, MenuName.Show و ... در جدول سطح دسترسی یا نقش ها ذخیره میشه . ) یعنی بر اساس امکانات سیستم . فرضا برای بخش کاربران این امکانات و داریم : ایجاد کاربر , ویرایش کاربر , حذف کاربر ,و هرچیزی که سیستم ارائه می کنه و به عنوان سطح دسترسی میشه محسوب کرد.
اونوقت مدیر سایت باید بتونه این نقش های از پیش تعریف شده رو به کاربر خاصی انتصاب کنه که میشه همون رابطه بالا . و شما هم در سطح کد نویسی چک می کنی که آیا کاربری که می خواد وارد این بخش بشه دسترسی لازم رو داره ؟
شبه کد :
if(Users.IsInRole("Users.Edit"){"Access"})
در جدول نقش ها می تونی یه نام در نظر بگیری برای هر نقش بصورت فارسی و یه SystemName هم داشته باشی بصورت انگلیسی نقش رو در اون وارد کنی : Users.Edit, Users.Create, Users.Delete, Posts.Edit, Posts.Delete و ...
dehqhani
دوشنبه 20 مرداد 1393, 15:06 عصر
برای فیلد های فرم ها چکار کنم
من یه فرم دارم که باید چند تا از فیلد های اون توسط یه گروه کاربری مثلا " کاربر ثبت"پر بشه و چند تا دیگه توسط یه گروه دیگه مثلا"سرپرست اداری " و چند تای دیگه هم برای یه گروه دیگه مثلا " مدیر شرکت"حالا باید چطور اینکار رو بکنم
بهزاد علی محمدزاده
دوشنبه 20 مرداد 1393, 17:16 عصر
اگر می خوای کار سازمانی انجام بدی بهتر که از روش Role Base Access Control استفاده کنی (RBAC) . با این روش بهتر می تونی گروه های کاربری تعریف کنی . در اینجا نقش تعریف می کنی : مثلا ویرایشگر Editor و به هر نقش هم تعدادی Permission میدی . یه نمونه از طراحی و اینجا (http://www.google.com/imgres?imgurl=http%3A%2F%2Fi.stack.imgur.com%2FpD6 tQ.jpg&imgrefurl=http%3A%2F%2Fdba.stackexchange.com%2Fque stions%2F10115%2Fdatabase-design-multiple-category-of-users-login-into-same-system&h=192&w=407&tbnid=5FtRyd4bN4RdDM%3A&zoom=1&docid=eCz39RGQjW0SJM&ei=CsHoU4_dJ5TM4QSuzYDgCQ&tbm=isch&ved=0CCkQMygHMAc&iact=rc&uact=3&dur=553&page=1&start=0&ndsp=24) ببین .
دسترسی به فیلدها رو باید به همین صورت ذخیره کنی . یعنی منطق کار همینه . می تونی گروه تعریف کنی ( با روش RBAC ) و به سرپرست امکان Create.User.Name رو بدی ( یعنی نام و بتونه وارد کنه . دقت کن که اینها یه رشته هستند که من اینجوری تعریف می کنم حالا شما هر اسم دیگه ایی می خوای بذار ) و گروه های دیگه دسترسی به این قسمت ندارند.
باید با یه نمونه آزمایشی این روش و کار کنی و بعد ببریش روی پروژه اصلی . پیاده سازی فیلد ها هم بستگی به تکنولوژی مورد استفاده ات داره . فرضا در MVC همون if بالا رو میشه لابه لای کدهای HTML نوشت و اگر کاربر دسترسی لازم و نداشت فیلد ها readonly باشند.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.