سلام وقت همه بخیر
دوستان سوال اینم ک تو یه پروژه بهتره جدول کاربران (هر نوع کاربر) یه جدول باشه یا تفکیک کنیم مثلا جدول مدیرها را جدا کنیم کاربران هم همینطور
لطفا جواب هاتون با ذکر دلیل باشه
مچکرم از وقتی ک میزارین
@a.kiani110
سلام
این بیشتر بر میگرده به نوع طراحی شما اما معمولا جدول کاربران یکی هستش مگر اینکه اطلاعات دریافتی کاربران با هم خیلی متفاوت باشه
اگر جدول ها یکی باشه مدیریت اونها (مخصوصا در ریلیشن ها) راحتتر خواهد بود و اینکه ستونهای تکراری حذف خواهد شد و شما فقط با یک جدول سرو کار دارید
اما باز هم همه ی اینها به نوع سایت شما بر میگرده
اگر میخواهید از سیستم Auth لاراول و بسیاری دیگه از قابلیت ها بدون دردسر اضافه و بعضا غیرقابل حل مواجه نشید پیشنهادم اینه:
اگر تفاوت های هر یک از این نقش ها با هم خیلی زیاد نیست فقط جدول uers داشته باشید و تمامی اطلاعات رو داخل همین جدول ذخیره کنید. برای تعیین نقش هم از روابط one-to-many یا many-to-many استفاده کنید. و یا از یکی از پکیج های مطرح ACL موجود استفاده کنید. مثلا:
https://github.com/JosephSilber/bouncer
https://github.com/spatie/laravel-permission
ولی اگر تفاوت هاشون نسبتا زیاد هستند و حرفه ای تر میخواید کار کنید، به ازای همه کاربران سیستم فارغ از نقششون یک رکورد در جدول users داشته باشید و فیلدهای عمومی هر کاربر رو داخل این جدول تعریف کنید. مثلا هر کاربر فارغ از نقشش دارای username و password و avatar و first_name و last_name و mobile و ... هست.
حالا اگر مثلا دو نقش استاد و دانشجو دارید، برای هر کدوم یک جدول جداگانه میسازید بنام masters و students که در هر یک با استفاده از یک رابطه one-to-one و با FK برابر با user_id ارتباط بین این جداول با جدول users رو برقرار میکنید. در نهایت ممکنه برای اساتید فیلدهای خاصی مدنظر داشته با
students:
-id
-user_id
-code
-entrance_year
-major
-...
روابط رو در فایل Model ها هم تعریف می کنید و از این به بعد خیلی راحت میتونید از یک دانشجو به کاربر برسید و بالعکس:
$student = Auth::user()->student;
$user = Student::find($id)->user;
باز هم جواب نهایی رو نیازمندی های پروژه شما تعیین میکنه و شاید روشهای بهتری باشه. ولی این هم یکی از بهترین روش هاست به نظرم.
اگر تفاوت کاربران فقط در سطح دسترسی باشه مثلا کاربر عادی و مدیر(چند نوع مدیر) از دید امنیتی نگاه کنیم تفکیک جداول بهتره یا خیر؟ ممنون میشم راهننایی کنید
@Alvandi
در ساده ترین حالت شما میتونید یک فیلد به جدول users تون اضافه کنید مثلا بنام role و بر اساس مقادیری که برای کاربران مختلفش داخلش ذخیره میکنید مثلا customer, admin, super_admin و ... دسترسی های متفاوت ایجاد کنید و در قسمتهای مختلف ازشون بر حسب نیاز استفاده کنید. یک حالت دیگه اش میشه چند تا فیلد اضافه کنید مثلا با عناوین is_admin, is_superadmin, is_writer و ...و مقادیرش رو بصورت boolean ذخیره کنید. اینجوری میتونید به یک کاربر چندین نقش اعطا کنید.
اگر این حالت جوابگوی نیازتون هست از نظر امنیتی هم به نظرم مورد تایید هست و تفاوتی نداره.
ولی وقتی سیستم یک مقدار بزرگ تر و پیچیده تر میشه بهتره کلا این موارد رو ببریم داخل جداول جداگانه مثل جدول roles و permissions و ... که از نظراتی دستمون بازتره. خوبیش اینه که پکیج های معروف و حرفه ای زیادی هم در این حالت قابل استفاده هستند. مثل:
https://github.com/spatie/laravel-permission
https://github.com/JosephSilber/bouncer
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟