ftp
3 سال پیش توسط ftp مطرح شد
4 پاسخ

ساخت role برای سایت

@ali.bayat
@mhyeganeh
@sina.it91
@milad
من میخوام برای سایتم نقش مدیر -کاربر-نویسنده ایجاد کنم جدولش رو هم ساختم اما نمیدونم چطوری بگم که مثلا نویسنده فقط به صفحه create ,edit پست وارد بشه و به روتها چطور بفهمونم ایا با gate ها این کار رو انجام میدن میشه.
نمونه مثال معرفی کنید


ثبت پرسش جدید
فرهاد یونسی
تخصص : دانشجو
@farhaduneci 3 سال پیش مطرح شد
0

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

برای چک کردن اجازه دسترسی و یا نداشتن اون یک روش به این صورت هست که باید از توابع allows و denies که توسط Gate facade در اختیارتون قرار میگیره استفاده کنید، این کار رو میتونید داخل تابع متصل به route هایی که مد نظرتونه انجام بدید برای مثال:

 public function update(Request $request, Post $post)
    {
        if (! Gate::allows('update-post', $post)) {
            abort(403);
        }

        // Update the post...
    }

اگر بخواید که نسبت به یک کاربر خاص این موارد رو چک کنید هم می‌تونید از forUser استفاده کنید‍!

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

if (Gate::forUser($user)->allows('update-post', $post)) {
    // The user can update the post...
}

اگر بخواید به صورت دسته جمعی اجازه های دسترسی رو چک بکنید می‌تونید از تابع های any و یا none استفاده کنید.

if (Gate::any(['update-post', 'delete-post'], $post)) {
    // The user can update or delete the post...
}

if (Gate::none(['update-post', 'delete-post'], $post)) {
    // The user can't update or delete the post...
}

یک تابع هم به اسم authorize وجود داره که به صورت اتوماتیک وجود دسترسی رو برای کاربر چک میکنه و در صورت نبود اون یک luminate\Auth\Access\AuthorizationException پرتاب میکنه.

Gate::authorize('update-post', $post);

// The action is authorized...

این نکته رو هم توجه کنید که instance های AuthorizationException به صورت اتوماتیک توسط exception handler لاراول به 403 HTTP response تبدیل میشن.

توابع دیگه ای هم مثل check، cannot، can و Blade directive های can، @cannot@ و canany@ وجود دارند که برای توضیحات بیشتر و بسیار دقیق تر اونها پیشنهاد می‌کنم حتما خود متسندات لاراول مربوط به بخش اجازه دسترسی رو مطالعه کنید.


سینا خاقانی
تخصص : توسعه دهنده بک‌اند
@sina.it91 3 سال پیش مطرح شد
1

@mehdisut
برای ایجاد نقشها بهتره از پکیج spatie استفاده کنی

برای کنترل سطح دسترسی ها هم از policy کمک بگیر


فرهاد یونسی
تخصص : دانشجو
@farhaduneci 3 سال پیش مطرح شد
0

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

برای چک کردن اجازه دسترسی و یا نداشتن اون یک روش به این صورت هست که باید از توابع allows و denies که توسط Gate facade در اختیارتون قرار میگیره استفاده کنید، این کار رو میتونید داخل تابع متصل به route هایی که مد نظرتونه انجام بدید برای مثال:

 public function update(Request $request, Post $post)
    {
        if (! Gate::allows('update-post', $post)) {
            abort(403);
        }

        // Update the post...
    }

اگر بخواید که نسبت به یک کاربر خاص این موارد رو چک کنید هم می‌تونید از forUser استفاده کنید‍!

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

if (Gate::forUser($user)->allows('update-post', $post)) {
    // The user can update the post...
}

اگر بخواید به صورت دسته جمعی اجازه های دسترسی رو چک بکنید می‌تونید از تابع های any و یا none استفاده کنید.

if (Gate::any(['update-post', 'delete-post'], $post)) {
    // The user can update or delete the post...
}

if (Gate::none(['update-post', 'delete-post'], $post)) {
    // The user can't update or delete the post...
}

یک تابع هم به اسم authorize وجود داره که به صورت اتوماتیک وجود دسترسی رو برای کاربر چک میکنه و در صورت نبود اون یک luminate\Auth\Access\AuthorizationException پرتاب میکنه.

Gate::authorize('update-post', $post);

// The action is authorized...

این نکته رو هم توجه کنید که instance های AuthorizationException به صورت اتوماتیک توسط exception handler لاراول به 403 HTTP response تبدیل میشن.

توابع دیگه ای هم مثل check، cannot، can و Blade directive های can، @cannot@ و canany@ وجود دارند که برای توضیحات بیشتر و بسیار دقیق تر اونها پیشنهاد می‌کنم حتما خود متسندات لاراول مربوط به بخش اجازه دسترسی رو مطالعه کنید.


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

فصل سیزدهم از دوره Laravel 6 From Scratch لاراکست با تدریس Jeffrey Way رو تماشا کنید. پاسخ تمامی سوال هاتون رو در زمینه Authorization خواهید گرفت:

https://laracasts.com/series/laravel-6-from-scratch


فریبرز شالقونی پور
تخصص : طراح و برنامه نویس حوضه وب
@fariborz0015 3 سال پیش مطرح شد
0

اومم چیزی که در ذهن من هست اینه که شما بیای با میدل ور این کار رو انجام بدی بر فرض مثال

ما یه جدول کار بران داریم که یک فیلدش مربوط به نقش کاربره : مثلا admin , auther , user

حالا روت هایی ک تعریف کردی هم درواقع تو در توعه (میتونه اینطوری نباشه )

مثال : add/newpost
میتونی بیای برای روتت یه میدل ور بسازی که اگر نقش این کاربر برابر با auther بود باز بشه

امیدوارم تونسته باشم با این توضیحات دست و پا شکسته بهت کمک کنم ، اگر خواستی بهم بگو یه نمونه بهت ارائه بدم


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

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