کیهان
4 سال پیش توسط کیهان مطرح شد
9 پاسخ

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

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


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش آپدیت شد
2

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

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

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش مطرح شد
2

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

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


کیهان
تخصص : PHP programmer
@keyhan 4 سال پیش مطرح شد
0

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


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 4 سال پیش آپدیت شد
1

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

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

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

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

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

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


کیهان
تخصص : PHP programmer
@keyhan 4 سال پیش مطرح شد
0

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


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 4 سال پیش مطرح شد
0

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

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

@yasinTaghavi


متین طیبی نیا
تخصص : backend
@MatinTayebi 4 سال پیش آپدیت شد
0

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

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش آپدیت شد
2

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

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

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش مطرح شد
1

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


کیهان
تخصص : PHP programmer
@keyhan 4 سال پیش مطرح شد
0

@Rp76
ممنونم 🌹


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

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