رفتن به مطلب
انجمن پشتیبانی لاراول ایران
negar_a

ثبت کاربر و مدیر در پروژه ی اموزشی

Recommended Posts

با سلام . 

مبحث آموزش لاراول رو تا قسمت 24 دیدم . خیلی خوب بود . ممنون.

فقط با منطق عضویت کاربر و مدیر مشکل دارم .

در هنگام ثبت کاربر و مدیر جدید ، شما پیش فرض role = 2 یعنی کاربر قرار میدید و در db بصورت دستی  ، مدیر رو role =1  ادیت کردید.

 سوال  ایا نباید فرم ثبت نام کاربر و مدیر جداگانه باشه .  و همچنین فرم لاگین این دو تفکیک بشه ؟ 

چون بصورت منطقی نباید فرم لاگین مدیریت در دسترس همه باشه .

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

برای کاربرانی که نقش مدیریت دارند این فرم رو کجا قرار بدیم تا برای بار اول ثبت نام کنند ؟ 

من احساس میکنم سه قسمت لازم داریم :

front

back

 و یک فرم هم مخصوص ثبت نام کاربران با نقش مدیریت . 

ممنون میشم در مورد پیاده سازی این توضیح بدید و اینکه به چه شکل جدا کنم  . چون نیاز به دو auth داریم .

 

 

 

Share this post


Link to post
Share on other sites

شما میتونید برای ثبت نام دو route تعریف کنید و هر کدام متدهای ثبت نام خودش را داشته باشد

اما route مورد نظر برای ثبت نام ادمین ها نباید به راحتی قابل دسترسی توسط کاربران باشه

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

Share this post


Link to post
Share on other sites
در 15 دقیقه قبل، ابوالفضل طالبی گفته است :

به هیچ وجه نیازی نیست ، اصولی هم نیست

شما تنها با یک فیلد نقش هر کاربری را مشخص کنید

ممنونم ازتون.

پاسختون برای ایجاد دو جدول بود درسته ؟

اما نیاز به دو پوشه ی auth  داریم؟

یک auth در پوشه ی ادمین و یک auth برای کاربران سایت ؟

تا رجیسترها و لاگین ها تداخل پیدا نکنند . درسته ؟ 

Share this post


Link to post
Share on other sites

من یک پوشه auth  در پوشه ی ادمین در کنترلر گزاشتم . ولی نمیتونه اجرا کنه و خطای target class  not exist میده . نحوه ی نوشتن و منطق کارم صحیحه ؟

Route::group(['namespace' => 'Admin' , 'prefix' => 'admin'],function (){

		....................
		...................
		
	Route::group(['namespace' => 'Auth'],function (){

        Route::Get('register', 'RegisterController@showRegistrationForm')->name('register');
        Route::Post('register', 'RegisterController@register');
    });


});

 

Share this post


Link to post
Share on other sites

ببینید کلا نوشتن دو تا رجیستر و لاگین جدا منطقی نیست و اصولی هم نیست

همانطور که قبلا هم گفتم:

در 23 ساعت قبل، ابوالفضل طالبی گفته است :

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

تمام سیستم های مدیریت محتوا مثل وردپرس یا جوملا هم نگاه کنید همینطور هست و هیچکدام صفحه ی ثبت نام جداگانه ای برای ادمین و یوزر ندارند و کمتر برنامه نویسی ممکنه اینکار رو انجام بده

اما برای برخی نوع سایت ها مثل market place ها  یک تفاوت کوچک وجود دارد و آن هم این است که فیلدهای فرم ثبت نام برای فروشنده و کاربر ممکن است متفاوت باشد اما در عمل فقط یک متد ثبت نام برای همه وجود دارد

به عنوان مثال شما تو بعضی سایت ها میبینید که دو تا گزینه برای ثبت نام هست به این صورت : ثبت نام - میخواهم فروشنده شوم

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

 

Share this post


Link to post
Share on other sites
نقل قول

شما میتونید برای ثبت نام دو route تعریف کنید و هر کدام متدهای ثبت نام خودش را داشته باشد

اما route مورد نظر برای ثبت نام ادمین ها نباید به راحتی قابل دسترسی توسط کاربران باشه

من متوجه شدم که نباید بصورت جداگانه جدول طراحی کرد . 

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

برای پیاده سازی چیزی که میفرمایید باید دو auth جداگانه بسازیم ؟ 

فقط میخوام فرم لاگین ادمین و کاربر رو جدا کنم . 

Share this post


Link to post
Share on other sites

بله اما کل روند auth نیاز نیست دو تا بشه فقط یه کنترلر اضافه بنویسید کافی هست برای بخش ثبت نام ادمین ها

یک route که به صورت پیشفرض برای ثبت نام کاربر هست مربوط به کاربران میشه هیچ

یک route هم خودتون مشابه RegisterController ایجاد کنید و متد create مینویسید داخلش مخصوص ثبت نام ادمین ها

یک Middleware هم میسازید که موقع لاگین شدن چک کنه ادمین هست یا یوزر و بر اساس نقش به صفحه ای که میخاید redirect کنید

Share this post


Link to post
Share on other sites

ممنونم . 

و یک سوال دیگه . 

پس مبحث multi auth برای چه مواقعی  استفاده میشه ؟ 

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

Share this post


Link to post
Share on other sites

بحث multi auth همان چیزی است که در آموزش ویدیویی آموزش دادم و با middle ware ها و برررسی فیلد role بر اساس نقش کاربر ، هدایتش میکنیم به صفحه ای که میخایم و یا دسترسی ها رو محدود میکنیم

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

Share this post


Link to post
Share on other sites

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

میخوام اگر ادمین بود ، بعد از لاگین به صفحه ی admin panel ریدایرکت بشه و اگه کاربر بود به صفحه ی home از سایت ریدایرکت بشه . 

چون یک logincontroller داریم  این کد اجرا میشه . 

protected $redirectTo = '/home';

در middleware هم این کد منطقی نیست و جواب نمیده .

 public function handle($request, Closure $next)
    {
        if(auth()->check() && auth()->user()->level == 'admin'){
            return redirect('panel');
        }

        if(auth()->check() && auth()->user()->level == 'user'){
            return redirect('home');
        }
     }

 

Share this post


Link to post
Share on other sites

سلام وقت بخیر شما برای اینکار نیاز به یادگیری php دارید

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

مثال


if(auth()->check() && auth()->user()->role == '1'){
      return redirect(route('loginModir'));
  }
 if(auth()->check() && auth()->user()->level == '2'){
       return redirect(route('loginNevisande'));
 }
 if(auth()->check() && auth()->user()->level == '3'){
    return redirect(route('loginKarbar'));
 }

Share this post


Link to post
Share on other sites

با این کد به نتیجه رسیدم . در میدلور checkRole

   public function handle($request, Closure $next)
    {
        if(auth()->check() && auth()->user()->level != 'admin'){
            return redirect('home');
        }

        return $next($request);
     }

در logincontroller 

    protected $redirectTo = 'admin/panel';

 

Share this post


Link to post
Share on other sites
در 9 ساعت قبل، Special_One گفته است :

سلام وقت بخیر شما برای اینکار نیاز به یادگیری php دارید

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

مثال



if(auth()->check() && auth()->user()->role == '1'){
      return redirect(route('loginModir'));
  }
 if(auth()->check() && auth()->user()->level == '2'){
       return redirect(route('loginNevisande'));
 }
 if(auth()->check() && auth()->user()->level == '3'){
    return redirect(route('loginKarbar'));
 }

شما این کد رو در میدلور chekcRole امتحان کردید ؟ جواب گرفتید ؟

چون من به این شکل نوشتم جواب نداد 

Share this post


Link to post
Share on other sites
در 17 ساعت قبل، negar_a گفته است :

شما این کد رو در میدلور chekcRole امتحان کردید ؟ جواب گرفتید ؟

چون من به این شکل نوشتم جواب نداد 

لاراول یه متد به اسم authenticated داره که میتونید این متد رو در کنترلر LoginController اورراید کنید و براحتی ورودی کاربران رو طبق نقشی که دارن کنترل کنید. کدش به شکل زیر میشه

    protected function authenticated(Request $request, $user)
    {
        if ($user->role=='admin'){
            $this->redirectTo = '/adminRoute';
        }else{
            $this->redirectTo = '/userRote';
        }
    }

 

Share this post


Link to post
Share on other sites
در در ۱۳۹۸/۱۲/۲۱ در 09:31، negar_a گفته است :

شما این کد رو در میدلور chekcRole امتحان کردید ؟ جواب گرفتید ؟

چون من به این شکل نوشتم جواب نداد 

ببینید اگر middleware بعد از ساختن در kernel اضافه نکنید نمیتونید استفاده کنید

 

Share this post


Link to post
Share on other sites

وارد این گفتگو شوید

میتوانید پیام خود را ارسال کنید و بعد ثبت نام نمایید. در صورتی که حساب کاربری دارید, هم اکنون وارد شوید و در این گفتگو شرکت کنید.

مهمان
پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  Only 75 emoji are allowed.

×   لینک شما به صورت اتوماتیک جایگذاری شد.   نمایش به عنوان یک لینک به جای

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • جدید...