ورود

View Full Version : یه مشکل در طراحی حقوق دسترسی کاربران...



PeymanPF
یک شنبه 21 مهر 1392, 15:44 عصر
با سلام خدمت دوستان و همکارای برنامه نویسم :قلب:...
اولین باره که توی نرم افزارم نیاز به دادن permission به گروه های کاربری علاوه بر کاربران دارم. می تونم محاسبه پرمیژن رو مثل ویندوز در لایه کاربرد با اجتماع و اشتراک و اینها پیاده کنم اما مشکل من در ذخیره کردن کاربران و گروه هاست. چطور هم کاربر و هم گروه رو در یک جدول تعریف کنم با وجود اینکه تفاوت های زیادی با هم دارند. به خصوص اینکه هر گروه زیر مجموعه ای دارد که کاربر ندارد!!
در مقابل اگر دو جدول مجزا هم بخوام درست کنم، در جدول دسترسی ها فیلد مجوز گیرنده رو فقط به یکی از جدولهای گروه یا کاربر میشه وصل کرد!!
به نظر شما چیکار کنم! خیلی پیچیده شده! هر طرفی می رم یه مشکلی وجود داره!!...
آیا راه حل منطقی ای که با اما و اگرهای زیاد همراه نباشه وجود داره؟؟؟

PeymanPF
دوشنبه 22 مهر 1392, 07:38 صبح
اساتید کسی نیست کمکم کنه ...
هم اکنون نیازمند یاری سبزتان هستم...

mahan.2002
سه شنبه 23 مهر 1392, 06:30 صبح
با سلام
دوست عزیز بنظرم شما از هر دو راهی که فرمودید میتونید کارتون رو انجام بدید
فقط در راه دوم باید یمقداری تغییراتی در بانک اطلاعاتی تون بدید..
راه اول تون شما برای اینکه بتونید هم کاربر و هم گروه رو در یک جدول دخیره سازی کنید یه فیلدی در نظر بگیرید به عنوان فلگ که مشخص میکنه
این رکورد از نوع کابر هست یا گروه ..
و میتونید با ایجاد یک فیلد دیگه در جدول تون و ذخیره سازی کد گروه در این فیلد میتونید گروه مورد نظرتون رو مشخص کنید.
فعلان این راه رو داشته باشید.. در صورت که خواستید
انشاالله تونستم راه دومم توضیح میدم..
موفق باشید

PeymanPF
چهارشنبه 24 مهر 1392, 13:57 عصر
ماهان جان واقعا ممنونم از راهنمائیتون ... پس سعی می کنم از همین راه اول استفاده کنم ...

مهدی هادیان2
پنج شنبه 25 مهر 1392, 15:57 عصر
بسم الله الرحمن الرحیم

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

mahan.2002
پنج شنبه 25 مهر 1392, 16:19 عصر
بسم الله الرحمن الرحیم

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

PeymanPF
پنج شنبه 25 مهر 1392, 16:32 عصر
کلا گفتم با هم تفاوت ساختاری دارن منظورم فقط توی نرم افزار خودم و از نظر فیلد نبود. مثلا یک کاربر باید بتونه لاگین کنه اما گروه نه یا گروه زیر مجموعه ای از کاربران براش تعریف می شن که کاربران ندارن... اگر کاربر و گروه در یک جدول ذخیره بشن حالت های خاص و اما اگرهای زیادی باید توی نرم افزار رعایت بشن که باعث میشه نرم افزار از نظم و یکپارچگی خودش خارج بشه و در آینده حل مشکلات و رفع باگ آن خیلی سخت بشه. شما ایده ای برای این موضوع ندارید؟ بهترین راهی که میتوان انتخاب کرد کدومه؟ برنامه فعلا در طراحی دیتا بیس هست و هر تغییری امکان پذیره ... جدولی دارم که به ازای هر دسترسی یا عدم دسترسی یه رکورد در اون ذخیره میشه ... حالا مشکل من مجوز گیرنده ای است که توی این جدول به اون مجوز می دیم یا می گیریم... می خوام بدونم فیلد اون باید کلید خارجی به کجا باشه؟ باید وصل بشه به ID کاربران و گروه ها که هر دو توی یه جدول هستن یا مثلا دوتا فیلد توی جدول مجوز ها تعریف کنم یکی کاربر و یکی گروه بعد هر کدوم رو به جدول خودشون وصل کنم؟؟
البته متوجه شدم اگه کاربران و گروه ها توی یک جدول طراحی بشن یه حسنی داره که امکان تعریف چند گروه توی یک گروه دیگه به وجود میاد.

mahan.2002
پنج شنبه 25 مهر 1392, 19:13 عصر
در مورد یکپارچگی این موضوع ربطی به یکپارچگی برنامه نداره ..
در مورد باگ من متوجه نمیشم چه باگی ... در مورد فیلد خارجی نیازی نیست این امر رو حتما در پیاده سازی اعمال کنید .. شما بدون اعمال اینکه کلید خارجی هست میتونید در کوئری نویسی تون کوئری که مد نظر تون هست رو بانک اطلاعاتیتون اجرا کنید ..
در مورد مجوز هم نیاز به جدول دیگری برای مجوز نیست .. کافیه یک فیلد مجوز طراحی کنید.. حتی میتونید سطح بندی مجوز هم با ایجاد این فیلد انجام بدید..
برای ثبت دسترسی ها یا عدم دسترسی ها میتونید یک جدول در نظر بگیرید ...
بصورتی که فیلد کد کاربر در اون خارجی هست ..

PeymanPF
جمعه 26 مهر 1392, 11:27 صبح
ماهان جان ممنون بابت همفکری و کمکتون ...
درسته همه مطابی که فرمودید .. منم با علم به این موضوعات دنبال بهترین راه حل بودم و شاید راحت ترین ... راه حل پیش فرض من هم همین بود.به خصوص بعد از پست اول شما با اطمینان بیشتری خواستم پیادش کنم.
باگ همیشه پیش بینی نشده به وجود میاد و باید همیشه مد نظر قرار بگیره ... چون مسئله به این سادگی نیست و فقط نیاز به سطح کاربری ندارم ... سطوح کاربری پیش فرض دارم اما به انعطاف کاملی در مورد عدم دسترسی یا مجوز به یک فرم و حتی مجوز افزودن - ادیت و حذف رکورد دارم که بعضی کاربران سطح بالاتر باید بتونن گروهی خاص رو ویرایش کنن به هر شکلی که در سازمانشون نیاز دارن... پس بحث حساسی هست و احتمال خطا بیشتر ... پیش بینی پیاده سازی همه این ها رو کردم و مشکلی نیست و فقط مشکلم کاربران و گروه ها بود ...
تا الآن که راهی بهتر از این نیست که کاربر و گروه توی یک جدول باشن و به قول شما با یه فیلد فلگ از هم متمایز بشن ... اینجوری میتونم چند گروه رو هم در زیر مجموعه گروهی دیگر قرار بدم به خاطر همین این راه رو ترجیح می دم ...
هرچند به قول شما می شد دو تا جدول مجزا هم در نظر گرفت و ارتباطی بین اونها و جدول دسترسی ها برقرار نکرد و فقط توی ویو join شون کرد. id دو تا جدول گروه و کاربر رو هم به راحتی می شه به صورت زوج و فرد از هم متمایزشون کرد و اتوماتیک گذاشتشون ...
ممنوم از اینکه وقت گذاشتید و به من کمک زیادی کردید ... باز هم اگر راه دیگه ای به ذهنتون رسید مطرح کنید ممنون می شم.

مهدی هادیان2
شنبه 27 مهر 1392, 14:45 عصر
بسم الله الرحمن الرحیم

شما میتونید برای فیلد هایی که متفاوت هست مثلا برای ثبت رکورد گروه فیلد گروه خودش نال در نظر بگیری یا حتی میتونی با وارد کردن یک مقدار خاص یک گروه دیگه در نظر بگیری
در مورد فیلد هایی دیگر هم همین طور... حتما لازم نیست تمامی فیلد ها پر باشه
با سلام
بله حرفتون صحیح است ولی به نظرم باید دید کدوم اصولی ست.

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

PeymanPF
شنبه 27 مهر 1392, 15:24 عصر
آقای هادیان با سلام ... منظورتون از نقش رو متوجه نشدم ...
درسته میشه یه جدول کاربر داشت و یه جدول گروه بعد با یه جدول سوم به هم مرتبط باشن ... اما نمیشه گروهی رو تعریف کرد که زیر مجموعه ای از گروه ها داشته باشه مثلا گروه مالی از دو گروه حسابداری و فروش تشکیل بشه... بعد نمی دونم چه فیلدی از کدوم جدول رو می تونم در جدول permissionها مجوز بدم یا سلب کنم؟ (چون می خوام هم به گروه بشه پرمیژن داد هم به کاربر - اگر Allow یا Deny نباشه مجوز نداره سلب هم نشده، مثل ویندوز-) مگر اینکه به اما و اگر ها رو بیاریم و بگیم یه فیلد برای کاربران و یک فیلد برای گروه ها (در جدول پرمیژن) در نظر بگیریم. اگر یکی نول بود برو اون یکی رو بررسی کن!
امیدوارم تونسته باشم منظورم رو برسونم...

mahan.2002
شنبه 27 مهر 1392, 15:25 عصر
با سلام
دوست عزیزم منم در پست اول عرض کردم میشه سناریو هایی مختلف در این موضوع مطرح کرد .. باید دید کدام سناریو راحت تر بهینه تر و مفید تر ..
بنظر من با کاری که ایشون میخوان انجام بدهند این روش خوبی هست .. البته میشه از روش جداولی اضافه ای برای گروه هم استفاده کرده ...
در کل یکی از اصولی که باید در نرم افزار در نظر گرفت اصل توسعه پذیری نرم افزار.. و انعطاف پذیر بودن هست.. با توجه به نیازمون به این نرم افزار ..
پس اگر ماکروسافت یا هر شرکتی دیگه برای یک موضوع یهک روش رو ارائه کنند یا مثالی زد .. که بیشتر جنبه آموزشی و مسبلیک داره..
به این معنا نیست که سایر روشها دیگری که هست ،فاقد استاندارد هست.. در کل باید دید کدام روش بهتر و روش بهینه تری است ..
چون در یک مثال ماکروسافت یا هر کمپانی.. اون روش رو پیشنهاد کرد لزوما این نیست که دیگه نمیشه از روش هایی دیگری استفاده کرد..
موفق باشید.