راکت
حل شده

تحلیل یک رابطه در لاراول

5 پاسخ

سلام دوستان
یه سوال

جدول users دارم با ستونهای زیر

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('is_admin')->default('no');
            $table->string('role')->default('user');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

2 نوع کاربر توی سایت داریم
کاربر عادی که با کلمه user نمایش داده میشه و نمایندگان با کلمه admin نمایش داده میشه که از ستونrole گرفته میشه

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

میخواتم یه جول بزنم به اسم admin_user که بعدش دیدم قاعدتا باید یه ستون user_id داشته باشم و یه ستون admin_id ولی خب جدول admin نداریم که . چیکار کنم :))

@mohaligateway
@ali.bayat

نوب
نوب
@yk5742g
ثبت پرسش جدید

پاسخ‌ها

5
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

باید بین جدول user و جدول های Role & Permission یه سری رابطه ایجاد کنی
پکیج های آماده این رابطه رو دارند
بعد میتونی اون رابطه رو روی مدل User اعمال کنی
مثال

    use Illuminate\Database\Eloquent\Builder;

    User::with('roles')
        ->whereHas('roles', function(Builder $builder) {
            return $builder->where('name', 'admin');
        })->get();

مثلا به این ترتیب میتونی

  • کاربرها رو با رابطه roles ایگرلود کنی
  • بعد چک کنی اگر اون کاربرها رابطه ای با رول دارند
  • اگر دارند و اسم اون role هم ادمین هست
  • لیستشون رو برگردونی

میتونی همچین نوعی از چک کردن رو روی role های دیگه هم اجرا کنی

moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

سلام
بهتر هست به جای is_admin ستون privillage قرار بدید و داخلش Role کاربران رو قرار بدید. باید از رابطه های role و permission استفاده کنید. به صورتی که هر کاربر دارای یک Role است که در یک جدول many to many قرار می گیرد.
@yk5742g

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

میتونی خودت به صورت دستی جداول دیگه بوجود بیاری مثلا نماینده و مدیر
و در عین حال میتونی از سیستم ACL هم استفاده کنی
پکیج spatie permission گزینه خوبی هست

شاید پاسخ شما همین‌جا باشد

نوب
نوب
@yk5742g

تخصص: کدنویس نوب :)

@ali.bayat @mohaligateway
درود دوستان
ممنونم از اینکه همیشه ما را راهنمایی میکنین :)

من یه سیستم ACL کامل نوشتم با اسم جداول permissions و roles و جداول واسط که به کاربران دسترسی های مختلف برای بخش های مختلف سایت را بدم
ولی میخواستم یه چیزی راه بندازم مثل مثال زیر
فرض کنین هر نوشته چند دسته بندی داره و هر دسته بندی مربوطه به چند نوشته هست
حالا ما جداول زیر را داریم
posts
category
category_post
خب توی جدول سوم ستونهای post_id و category_id داریم
اینطوری میتونیم راحت رابطه را برقرار کنیم

ولی برای اون مبحث کاربران چون هر دو نوع کاربر توی جدول users هستن نمیشه این روش را پیاده کرد
راه حل بهتری دارید ؟

moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

برای برقرار کردن ارتباط many to many شما باید یک جدول ایجاد کنید به نام permission_role که ارتباط بین permission و Role رو داشته باشه. و یک جدول هم به نام role_user که از id های role و user تشکیل شده است.
@yk5742g

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام