پکیچ گروه بندی و دسترسی دادن به کاربران لاراول - userpermission

سلام به همه اساتید و دوستان گرامیبنده مدتی پیش که شاید به دو سال پیش بر میگرده، در حال انجام یک پروژه لاراول بودم که نیاز شد در داخل این پروژه از سطح بندی کاربران ( گروه بندی ) و همچنین مجوز دادن دسترسی به کاربران و ... استفاده کنم ینی چیزی مثل همین پکیچ های role بندی و .... .برا همین گفتم بیام یکم ازین پکیچا بخونم که کارمو راه بندازه ، یکم خوندم دیدم چیزی حالیم نمیشه K ( البته مشکل از نحوه خوندنم بود که خیلی هول هولکی می خوندم و دقت نداشتم ) بنابراین تصمیم گرفتم خودم یه چیز بزنم و اون موقع کاری که به ذهنم رسید کار با route ها در لاراول بود، ینی گفتم بیام یک سیستمی بزنم رو این برنامه که کاربرا وقتی خواستن یک route رو ببینن اول چک بشه که ایا دسترسی دیدن این route یا کار بر روی این route به این کاربر از قبل داده شده یا نه ؟ به عبارتی چک کنه ایا این گروه کاربری قادر به چک کردن این route هست و اجازه شو داره یا نه !!!خلاصه بعد از این حرفا گفتم بیام یک پکیچ بزنم بعد از پکیچم توی برنامه خودم استفاده کنم و اومدم پکیچی تحت عنوان userpermission نوشتم و توی گیت هاب در آدرس (اینجا) قرار دادمش !!! اما متاسفانه به علت ننوشتن یک داکیومنت خوب خیلی ازش استقبال نشد و کسی نفهمیدش !!! و الان بعد از این مدت تصمیم گرفتم بیام و کمی در موردش صحبت کنم تا ایرادات محتملی هم که داره بر طرف کنم.قبل از هر چیز نکته ای مهم بگم که این پکیچ رو باید وقتی به پروژه اضافه کنید که دیگه کار تمام هست و فقط گروه بندی کاربران مانده !!!پکیچ userpermission چیست ؟این پکیچ یه قالب کاری کامل هست و صرفا استفاده از کد نیست یعنی با نصب این پکیچ لازم نیست شما کدنویسی خاصی انجام بدین ( کار های کدنویسی که باید انجام بدین که خیلی کوچیک هم هست رو در اخر همین مقاله توضیح دادم ) چرا که برای پکیچ یک رابط گرافیکی ( پنل کاربری ) تعبیه شده که می توانید کار ساخت گروه کاربری و دسترسی دادن به هر گروه کاربری رو از طریق این پنل انجام بدین.نحوه کار پکیچ userpermission چطور است؟به طور کلی نحوه کار به این صورت است که ابتدا کل route ها دریافت میشه و در دیتابیس ثبت میشه ، توجه شود که route هایی ثبت می شوند که متد name برایشان تعریف شده باشه مثل : Route::get('/home', 'HomeController@index')->name('home');چرا که در این پکیچ route ها با خاصیت name چک می شوند.بعد از گرفتن تمامی route ها خوده پکیچ به طور خودکار یک سطح دسترسی ( گروه کاربری ) به اسم superadmin می سازه و تمام دسترسی ها رو به این گروه کاربری میده ( وکالت تام الاختیار).نحوه نصب پکیچ userpermission نحوه نصب پکیچ در مخزن گیت هاب مجوز کاربر موجود هست ( به آدرس https://github.com/ilbeygi/userpermission/ ) ولی اینجا هم میگم. ( تنها داکیومنتی که برای پکیچ در گیت هاب نوشتم همین روش نصب هستش که از تنبلی خودم بود. )در گام اول برای نصب ابتدا وارد مسیر پروژه لاراول بشید و ترمینال رو باز کنید و دستور زیر را بزنید :composer require "ilbeygi/userpermission":"dev-master"گام دوم : بایستی provider مربوط به پکیچ رو در مسیر config/app.php اضافه کنید :'providers' => [ ... Ilbeygi\UserPermission\userPermissionServiceProvider::class, // <-- add this line at the end of provider array],گام سوم : فایل های پکیچ رو باید پابلیش کنید که برای این کار در ترمینال دستور زیر رو وارد کنید :php artisan vendor:publish --tag=userPermissionPackage_ilbeygi_irبا این کار فایل های balde و فایل های جداول دیتابیس در محل مورد نظر در پروژه قرار میگیرن.گام چهارم : در این مرحله بایستی که جداول مربوط را با دستور migrate در دیتابیس بسازید :php artisan migrateگام پنجم : در این پکیچ برای مدیریت route ها یک middleware ساختیم که باید به تنظیمات کرنلتون اضافش کنید ، برای این کار وارد فایل app/Http/Kernel.php بشید این کار را انجام دهید ( نام middleware در نظر گرفته شده checkRoles هست ) :protected $routeMiddleware = [....'checkRoles' => \Ilbeygi\UserPermission\Middlewares\CheckRole::class, // <-- add this line at the end of $routeMiddleware];گام ششم : در این مرحله پروژه لاراول خود را ران کنید :php artisan serveگام هفتم : همونطور که قبلا گفتم این پکیچ کل route های پروژه شمارو میگیره و برای این کار باید پروژه خودتون رو باز کنید و به اخر ادرس پروژه این (saveAllRouteNameInDatabase) عبارت رو اضافه کنید ( مثال : http://localhost:8000/saveAllRouteNameInDatabase )توجه شود که این کار بایستی صددرصد انجام شود چرا که با این کار روت ها و تنظیمات مربوط به پکیچ انجام میشه.http://{your_laravel_address}/saveAllRouteNameInDatabaseگام هشتم : بعد از انجام گام هفتم و دریافت پیغام موفقیت آمیز محتویات روت saveAllRouteNameInDatabase رو پاک کنید تا بعد براتون مشکل ساز نشه و کاربرا شیطنت نکنن و برای این کار به آدرس vendor/ilbeygi/userpermission/src/route.php برید و روت /saveAllRouteNameInDatabase رو پاک کنید :Route::get('/saveAllRouteNameInDatabase', function (){......});گام نهم : در آخرین گام میتونید با وارد کردن آدرس /panel/permissions به پنل مدیریت پکیچ وارد بشید و گروه کاربری بسازید یا روت اضافه کنید و .... . ( مثال : http://localhost:8000/panel/permissions )http://{your_laravel_address}/panel/permissionsگام دهم : برای استفاده بهتر از پکیچ بایستی middleware اضافه شده در گام پنجم رو به کل route هاتون اضافه کنید .Route::middleware(['web', 'auth', 'checkRoles'])->prefix('panel')->group(function (){//Write all of your routes}خب تا اینجا پکیچ رو فهمیدیم چیه و نصب کردیم ، حالا یک بحث کوچیک در مورد نحوه کار با پنل هم بگم که دوستانی که قصد استفاده از این پکیچ رو داشتن راحت باشن.نحوه کار با پنل پکیچ :بعد از نصب پکیچ به مسیر پنل با ادرس : (http://localhost:8000/panel/permissions) بروید که بعد از ورود با پنل روبرو میشید :عکس 1افزودن گروه کاربر :جهت افزودن گروه کاربری جدید به سیستم بایستی روی دکمه (create a new user group) در عکس بالا کلیک کنید که بعد از کلیک این فرم برای شما باز میشه : عکس 2در اینجا خیلی راحت اسم گروه کابریتونو مینویسید و ثبت میکنید .افزودن مسیر های جدید به سیستم :برای این کار روی دکمه add new route کلیک میکنید تا فرم زیر باز شه :عکس 3در فیلد اول new path name ، name مربوط به route مورد نظر رو مینویسید و در فیلد دوم یک تعریف از آن route .اضافه کردن دسترسی به گروه کاربری :برای این کار در جدول عکس شماره 1 که گروه های کاربری رو نشون میده از قسمت action روی دکمه add permission کلیک میکنید تا وارد دسترسی ها یا مجوز های اون گروه کاربری بشید.عکس 4افزودن دسترسی به گروه کاربری : بعد از انجام مرحله قبل شما کل مجوز های گروه کاربری انتخاب شده رو میبیند، همچنین شما در عکس 4 شما یک دکمه میبینید با عبارتadd permission که برای اضافه کردن مجوز به اون گروه کاربری استفاده میشه که بعد از کلیک روی اون ایم فرم رو میبیند : عکس 5در اینجا دسترسی های مورد نظری رو که میخواین به گروه کاربری انتخاب شده بدین رو انتخاب می کنید و روی دکمه register permission کلیک میکنید !!!و اما چند نکته مهم :نکته یک : قبل از هر چیز نکته ای مهم بگم که این پکیچ رو باید وقتی به پروژه اضافه کنید که دیگه کار تمام هست و فقط گروه بندی کاربران مانده !!!نکته دو : این پکیچ نیاز به کد نویسی نداره به جز یک بخش کوچیک ، وقتی پروژه رو اضافه کردین و این کارهارو انجام دادین شما باید یک کد کوچیک موقع ثبت کاربر به کداتون اضافه کنید و اونم اینه : در بین جداول مربوط به این پکیچ جدولی داریم به اسم user_role که ایدی کاربر و ایدی گروه کاربری رو ذخیره میکنه و منظورش اینه که مثلا کاربر شماره یک گروه کاربری شماره یک رو داره.برای همین موقع ثبت کاربر باید یک کد بزنید که ایدی اون کاربر با گروه کاربری مربوط به اون کاربر توی این جدول ذخیره بشه.به همین سادگی و خوشمزگیو تمامامیدوارم که این پکیچ به دردتون بخوره و همچنین اگه مشکلی یا ارور یا باگی داشت ممنون میشم راهنمایی کنید تا با هم یک پکیچ خوب و کامل بسازیم.ممنون میشم نکته نظراتتون رو برام کامنت کنید ...سپاس فراوان