بررسی انواع سیستم تعیین مجوز برای مدیران

phpweb

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

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

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

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

شما از چه سیستم مجوز دهی استفاده می کنید و چه راهی برای بهبود بخشیدن به این دو نوع سیستم مجوز دهی پیشنهاد می دید؟
 

Masoud1365

مدیر انجمن
اول که سوالتون خیلی کلی هست !
کلا توی برنامه نویسی برای این که به یک هدفی برسید هزاران راه وجود داره !
روش هایی که شما گفتید هم هست و هر کدومش برای یه جایی مناسب هست !
اگه پروژه بزرگ باشه خب سطح دسترسی متفاوت میشه و برای هر یوزر ممکنه فرق داشته باشه !
( به علاوه روشهای شما ) یه روش هم اینه که ( اگر mvc کد نویسی کرده باشید ) کاربر توی هر اکشنی که میره ببینی دسترسی داره یا نه ! یا مثلا کنترلر بررسی بشه !
 

phpweb

Active Member
اول که سوالتون خیلی کلی هست !
کلا توی برنامه نویسی برای این که به یک هدفی برسید هزاران راه وجود داره !
روش هایی که شما گفتید هم هست و هر کدومش برای یه جایی مناسب هست !
اگه پروژه بزرگ باشه خب سطح دسترسی متفاوت میشه و برای هر یوزر ممکنه فرق داشته باشه !
( به علاوه روشهای شما ) یه روش هم اینه که ( اگر mvc کد نویسی کرده باشید ) کاربر توی هر اکشنی که میره ببینی دسترسی داره یا نه ! یا مثلا کنترلر بررسی بشه !
( به علاوه روشهای شما ) یه روش هم اینه که ( اگر mvc کد نویسی کرده باشید ) کاربر توی هر اکشنی که میره ببینی دسترسی داره یا نه ! یا مثلا کنترلر بررسی بشه !
این روش حرفه ای نیست. به هر حال اگه مدیر مجوز استفاده از بعضی از امکانات سایت رو نداشته باشه، بهتره که اصلا اون امکانات رو بهش نشون ندیم.

مثلا اگه یه مدیر امکان ارسال خبر نداره، بهتره که لینک مربوط به صفحه ارسال خبر جدید رو بهش نشون ندیم.

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

توی سایتهای بزرگ چه روشی بیشتر استفاده می شه؟
 

Masoud1365

مدیر انجمن
این روش حرفه ای نیست. به هر حال اگه مدیر مجوز استفاده از بعضی از امکانات سایت رو نداشته باشه، بهتره که اصلا اون امکانات رو بهش نشون ندیم.
بحث من روی نحوه وریفایی کردن هست نه نحوه نمایش !
 

phpweb

Active Member
بحث من روی نحوه وریفایی کردن هست نه نحوه نمایش !
به هر حال برای وریفای کردن هم کاربر باید اکشن مورد نظرش رو ببینه تا بتونه روش کلیک کنه.
اگر اکشن رو نشونش بدیم و بعد بهش بگیم شما نمی تونید از این قابلیت استفاده کنی، چندان درست نیست.

البته امیدوارم منظورتون رو گرفته باشم.
 

Masoud1365

مدیر انجمن
من میگم ما نمایش نمیدیم ! اما اگه کاربر آدرس رو زد چی ؟ به همین که بهش نمایش ندادیم که نمیشه اکتفا کرد !
مثلا ما دوتا سیستم خبر و مقالات داریم کاربر به مقالات دسترسی داره ولی به اخبار نه ! خب حالا آدرسهامون اینه
site.com/admin/articles/add
site.com/admin/news/add
حالا کاربر واسش فهمیدن آدرس مدیریت بقیه صفحات زیاد سخخت نیست واسه همین گفتم که من روی نمایش فعلا بحث ندرم فقط وریفایی کردن رو میگم !:wink:
 

Domanjiri

Well-Known Member
سلام دوستان

روشی که مسعود عزیز گفت، یه روش قابل قبول و روتینی هست که الان خیلی از سیستم ها دارن ازش استفاده می کنند، اما بطور کامل!

یعنی این چک کردن ها در اکشنی که قراره مثلن یک منویی رو در سمت چپ سایت بفرسته به view مربوطه تا نمایش داده بشه هم صورت میگیره، و اینطور نیست که به کاربر، آیتم رو نشون بدیم ولی وقتی روش کلیک می کنه، اجازه ندیم که محتویاتش رو ببینه و بزاریمش تو خماری(!)

البته روش حرفه ای تر و گسترش پذیر تر(!!)، پیاده سازی این سطوح دسترسی در dispatcher یا همون محل توزیع درخواست ها هست (البته اگه معماری کد ِتون توزیع کننده داشته باشه!). با این کار مجبور نیستیم توی هر اکشنی چک کنیم که اگه کاربر فلان بود، این کار رو بکن و اگه فلان نبود اون یکی کارو و...

به زبون ساده تر، وقتی کاربر با لینک مثلن :http://example.com/new وارد سایت میشه، dispatcher میاد و چک می کنه که این کاربر مثلن این سطح دسترسی رو داره، حالا برای این درخواستی که اومده، باید کنترلر های x و z و j و اکشن های a , b و c براش اجرا بشه..

می تونیم گزینه های زیادی رو در اختیار مدیر کل قرار بدیم تا با انتخاب یا عدم انتخاب این گزینه ها بتونه مجوزها و رفتار سایر مدیران رو کنترل کنه.
در این مورد هم، اکثرن (به جای اکثراً !) از یک جدول جدا برای سطوح دسترسی استفاده می کنند

مفید بود؟ یا اینکه بی ربط؟ :green:

موفق باشین
 
آخرین ویرایش:

phpweb

Active Member
من میگم ما نمایش نمیدیم ! اما اگه کاربر آدرس رو زد چی ؟ به همین که بهش نمایش ندادیم که نمیشه اکتفا کرد !
مثلا ما دوتا سیستم خبر و مقالات داریم کاربر به مقالات دسترسی داره ولی به اخبار نه ! خب حالا آدرسهامون اینه
site.com/admin/articles/add
site.com/admin/news/add
حالا کاربر واسش فهمیدن آدرس مدیریت بقیه صفحات زیاد سخخت نیست واسه همین گفتم که من روی نمایش فعلا بحث ندرم فقط وریفایی کردن رو میگم !:wink:
بله هر دو مورد رو باید رعایت کرد، هم موقع نمایش و هم موقع اجرای یه اکشن باید چک بشه که آیا کاربر این مجوز رو داره یا نه.

اما مسئله اینجاست که این حالت رو به چه صورت پیاده کنیم تا سرعت بالایی داشته باشیم و مدیر کل بتونه رفتار مدیران سایت رو بخوبی کنترل کنترل کنه؟
 

phpweb

Active Member
می تونیم گزینه های زیادی رو در اختیار مدیر کل قرار بدیم تا با انتخاب یا عدم انتخاب این گزینه ها بتونه مجوزها و رفتار سایر مدیران رو کنترل کنه.

در این مورد هم، اکثرن (به جای اکثراً !) از یک جدول جدا برای سطوح دسترسی استفاده می کنند

این روش رو می پسندم چون مدیر کل کنترل کاملی روی رفتار بقیه مدیران داره.

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

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

بنظرتون استفاده از سسشن و کوکی برای نگه داشتن مجوزها و اجرای این همه شرط بار اضافه ایجاد نمی کنه یا توی بازدیدهای بالا باعث کاهش سرعت نمی شه؟ (مشکلی که با این روش دارم همین تعداد پردازش بیشتر هست)
 

جدیدترین ارسال ها

بالا