چرا از Gate و Policy در لاراول استفاده نشده برای این آموزش ؟
دقیقا سوالم این هست که چرا وقتی لاراول برای احراز هویت و نقشهای کاربری سیستم Guard و Gate و Policy را داره شما در آموزشها از سرویس اختصاصی خودتون استفاده کردید برای این موضوع آیا دلیل خاصی داشته ؟
تا یه جایی متوجه شدم مثلا اینکه اگه از گارد استفاده کنیم باید بریم دستی گاردهای بعدی را اضافه و کم کنیم و پیچیدگیهای خاص خودش رو داره و باید ۴ ۵ مورد فایل را برای این موضوع ویرایش کنیم.
یا مثلا برای گیتها و پالیسیها باید دسترسیها را در داخل کد مدام دستکاری کنیم ولی به این روشی که آموزش شما پیش رفته تمامی موارد مربوط به دسترسیها بدون کد و خیلی مرتبط در سرویس مربوط به خودش قرار داره
لطف میکنید در این خصوص دلایل خودتون را از استفاده به این شکل بیان کنید ممنون
مهدی مشایخی۲۴ آبان ۱۳۹۹، ۰۸:۰۸
سلام دوست عزیز ..
داخل آموزش مدیریت کاربران از Gate استفاده شده ... در واقع ما Permissionها رو داخل Gate لاراول ایجاد میکنیم که با استفاده از اون بتونیم از متد can استفاده کنیم.
در مورد استفاده نکردن از Policy هم دلیل این است که نحوه پیادهسازی بحث Role و Permission را بتونید یاد بگیرید .. چون امکان داره داخل پروژههای بزرگتر Policy نتونه پاسخگو باشه .. به همین خاطر نیاز هستش که شما این مورد رو پیاده سازی کنید ...ولی نحوه استفاده از Policy در آپدیتها به دوره اضافه خواهد شد.
در مورد استفاده از Guard هم به خاطر ماهیت Guard که برای کنترل کردن احراز هویت هستش در این دوره امکان استفاده از اون نبود ...ولی در دوره سیستم پشتیبانی از Guard استفاده شده که میتونید اون دوره رو مشاهده کنید.
موفق باشید.
مهرداد سامی۲۴ آبان ۱۳۹۹، ۰۸:۲۲
ممنونم استاد بابت پاسختون منتهی یک موضوع برای من شفاف نشد
مزایا و معایب استفاده کردن یا نکردن از گاردها چیه ؟
مثلا ما توی سیستم (کارجو) (کارفرما) و (مدیر) را به عنوان نقشهای کاربری داریم
مواردی که هست :
1. صفحات ورود ، ریدایرکت هنگام خروج و .... با هم متفاوت هست در این نقشهای کاربری
2. بعدا ممکنه نقشهای دیگری در سیستم اضافه بشه مثل ویرایشگر و ...
3. هر نقش کاربری ممکنه دسترسیهای خاص خودش رو داشته باشه مثلا درج خبر برای یک (مدیر)
در اینجا مشکل و ابهام من اینه من تا قبل از دیدن آموزش شما فکر میکردم خب با ایجاد گارد برای هر نقش کاربری مدیر کارجو و کارفرما و ایجاد سطوح دسترسی بعد از اون برای هر گروه توسط گیت و پالیسیها در لاراول پیش برم
اما وقتی آموزش شما را مشاهده کردم
دیدم یکسری مزایا گویا در روش پیاده سازی شما وجود داره :
1. در سیستمی که شما پیش بردید این امکان وجود داره که بدون کد نویسی ما صدها نقش کاربری تعریف کنیم و دسترسیها متفاوتی را به اونها بدیم.
2. نیازی به ایجاد فایلهای متنوع گیت و پالیسی نیست و به راحتی سیستم دسترسی پیاده سازی میشه
3. نیازی به تعریف گارد و مسائل مربوط به اون نیست مثلا ایجاد مدلهای متنوع تنظیمات نسبتا پیچیده برای لاگین و رجیستر کاربران و بررسی دسترسی اونها
با توجه به این ابهامات لطفا راهنمایی بفرمائید تا من بتونم تشخیص بدم از کدوم روش بهتر به نتیجه میرسم.
مهدی مشایخی۲۴ آبان ۱۳۹۹، ۰۸:۴۹
موضوعی که حتما باید بهش توجه کنید این هستش که گارد مربوط به Authentication ( اینکه آیا این یوزر و پسوردی که وارد شده صحیح هست یا خیر ) هستش و Policy , Gate مربوط به Authorization ( که آیا این یوزر من که قبلا لاگین کرده میتونه این عملیات که میتونه هرچیزی باشه مثل ایجاد پست رو انجام بده یا خیر ) هستش ...
این ۲ موضوع با هم دیگه متفاوت هستن ... پس درواقع ما Guard رو نمیتونیم داخل این پروژه استفاده کنیم .. چون بحث اصلی ما Authorization هستش نه Authentication ...
در مورد مزایا و معایب این روش نسبت به Policy و Gate لاراول .. ببینید روشی که من استفاده کردم با Gate , Policy لاراول به این صورت نیست که مخالف همدیگه باشن .. یعنی مثلا یا شما باید این روش رو انتخاب کنید یا مثلا برید از روش لاراول استفاده کنید ... این ۲ روش در واقع میتونه تکمیل کننده همدیگه باشه .. یعنی در واقع شما میتونید از این سیستمی که ما نوشتیم در داخل Policyهای لاراول استفاده کنید ... یعنی داخل Policyها بیاید و بگید مثلا اگه این یوزر من نقش مدیریت محتوا و مدیر رو داشت بتونه این پست رو اینجا کنه ... و Policy به شما true برگردونه که یعنی در واقع این یوزر میتونه اون عملیات رو انجام بده ...
موضوعی که ما پیاده سازی کردیم برای راحتتر کردن مدیریت کاربران و نقشهای و دسترسیهاشون هست ...
چون داخل سیستمهای بزرگتر شما امکان داره چندین نقش داشته باشید با صدها دسترسی .. حالا اگه بخواید اینها رو مدیریت کنید خیلی براتون دردسر ساز میشه .. پس بهتره که یه سیستمی مثل همین سیستمی که داخل دوره نوشتیم بنویسید که بتونید از داخل پنل و به صورت اتوماتیک اونها رو مدیریت کنید .. ولی زمانی که مثلا شما فقط یک نقش داخل سیستم دارید .. مثلا SuperAdmin ... در اون حالت واقعا نیازی نیست که چنین سیستمی بنویسید ... چون یه نقش دارید و داخل Policy تعریف میکنید که اگر نقش کاربر من SuperAdmin بود بتونه این عملیات رو انجام بده ..