راکت
حل شده

بهینه ترین روش برای احراز هویت

9 پاسخ

سلام دوستان
وقتتون بخیر
من میخوام نقش های مختلفی توی وبسایتم تعریف کنم (سوپر ادمین ، نویسنده و کاربر معمولی)
بنظرتون برای احراز هویت بهتره برای هر کدوم یک جدول جدا تعریف کنیم (مثلا سوپر ادمین و نویسنده جدا گونه ذخیره شن)
یا یک جدول user داشته باشیم و کاربر با هر شناسه تشخیص داده بشه و لاگین کنه
حالا هر روشی که استاندارد تره ، هم از نظر طراحی دیتابیس ، هم از نظر نظم در سیستم و اینکه اگه روش دوم رو ترجیح میدین شناسه هارو معمولا چجوری تعریف میکنین
ممنون
@mohaligateway
@muhammad
@ali.bayat
@hesammousavi
@mrn
@Rp76
@juza66
@milad
@eniack
@AliValinejad
و ...

ثبت پرسش جدید

پاسخ‌ها

9
رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

بهترین پاسخ

جدول کاربر
جدول وظیفه ها

به این صورت هم کنترل کردم.

Middleware

 public function handle(Request $request, Closure $next, string $scope = '')
    {
        $scopes = json_decode(Auth::user()->role->scope);

        if (!in_array($scope, $scopes))
            abort(403);

        return $next($request);
    }

Route

اینجوری هم صداش زدم

middleware(["role:ads.list"]);

Model

براش یه تابع هم توی مدل user درست کردم

public function may($scope)
    {
        $scopes = json_decode($this->role->scope);

        if (in_array($scope, $scopes))
            return true;

        return false;
    }

نکته

من وظیفه های موجود رو جایی ذخیره نکردم
نقش developer ‌همه رو داره و برای استفاده از این وظیفه ها و اتصالشون به نقش های دیگه هم این کار رو کردم

وظیفه ها

چون به صورت json‌ ذخیره شده وظیفه ها به صورت ارایه میشه ازش استفاده و رندر گرفت ازش

Edited : @yasinTaghavi

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

سلام وقتتون بخیر!

من این کار رو کردم!
هر کاربر یه role_id داره که به جدول role وصل میشه و اونجا برای هر نقش scope هایی تعریف شده که میشه کاربر هارو باهاش محدود هم کرد به صورت dynamic

کیهان
کیهان
@keyhan

تخصص: PHP programmer

خیلی جالب بود برام ، ممنون از نظرت @Rp76
فقط میشه یکم درباره ی نحوه ارتباط جداول به role بیشتر توضیح بدی

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

علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

سلام
من به عنوان یک برنامه نویس بسیار بی تجربه از روش زیر استفاده می کنم :
ثبت نام و ورود همه کاربران در یک صفحه انجام میشه (چه مدیر چه نویسنده و چه کاربر عادی) ،
در database برای همه کاربران یک ستون وجود داره به اسم Level و اگر 1 باشه نشون میده کاربر عای هست و اگر 2 باشه نشون میده نویسنده است و اگر 3 باشه نشون میده مدیر اصلی سایت هست .
به صورت پیش فرض همه کاربران که ثبت نام می کنند در این بخش 1 براشون قرار داده میشه .

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

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

روش بعدی به نظر من میتونه امکانات بیشتری رو بهتون بده و اون اینه که یک جدول درست کنید و در موقع ثبت نام id یا username کاربر رو بگیرید و در اونجا مقادیر و دسترسی های مختلف رو مشخص کنید به عنوان مثال میخواهم فردی را در سایتم استخدام کنم که فقط بتونه نظرات کاربران رو بررسی و در صورت تخلف حذف کنه ، در اینجا میایم و قسمتی اضافه می کنیم در اون جدول برای مدیریت مطالب (با نام Check the comments مثلا) و اونجا اگر مقدار رو مساوی کنیم با true اون کاربر فقط به نظرات دسترسی داره ...

در نهایت روش سوم به خاطر امکانات بیشتر رو من بی تجربه توصیه می کنم ...

امیدوارم براتون مفید بوده باشه اگر چه از من سوال نپرسیدید ...
@yasinTaghavi

کیهان
کیهان
@keyhan

تخصص: PHP programmer

@alirezakefayati1386 بله بنده هم قصد داشتم به این شکل عمل کنم و امیدوارم به یه جمع بندی خوب برسم
نه من سوالم برای همه بود ، در هر صورت ممنون بابت پیشنهادت دوست من

علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

روش بعدی به نظر من میتونه امکانات بیشتری رو بهتون بده و اون اینه که یک جدول درست کنید ،
و در موقع ثبت نام id یا username کاربر رو بگیرید و ثبت کنید
در اونجا دسترسی های مختلف رو کنترل و مشخص کنید
به عنوان مثال میخواهم فردی را در سایتم استخدام کنم که فقط بتونه نظرات کاربران رو بررسی و در صورت تخلف حذف کنه ، در اینجا میاییم و قسمتی اضافه می کنیم در اون جدول برای مدیریت مطالب (با نام Check the comments مثلا) و اونجا اگر مقدار رو مساوی کنیم با true اون کاربر فقط میتونه به نظرات دسترسی داره ...

در نهایت روش سوم به خاطر امکانات بیشتر رو من بی تجربه توصیه می کنم ...

@yasinTaghavi

متین طیبی نیا
متین طیبی نیا
@MatinTayebi

تخصص: backend

این راه شاید اوکی باشه :

شما 3 تا جدول درست کنید users ,permission,role که رابطه چند به چند داشته باشند داخل permission مجوز هایی که یک نویسنده (مثل:نوشتن مقاله ،ویرایش مقاله) یا مسئول دیگه وارد کنیدو در جدول role نقش هایی مد نظرتون هست پیاده سازی کنید (مثل نویسنده و ادمین،و...)
اینطوری شما میتونید چندین نوع نقش با دسترسی های مختلف پیاده سازی کنی

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

کمک خواستی شماره من توی پروفایلم هست واتساپ پیام بدی سریعا جواب میدم.

کیهان
کیهان
@keyhan

تخصص: PHP programmer

@Rp76
ممنونم 🌹

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

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