@ali.bayat
@mhyeganeh
@sina.it91
@milad
من میخوام برای سایتم نقش مدیر -کاربر-نویسنده ایجاد کنم جدولش رو هم ساختم اما نمیدونم چطوری بگم که مثلا نویسنده فقط به صفحه create ,edit پست وارد بشه و به روتها چطور بفهمونم ایا با gate ها این کار رو انجام میدن میشه.
نمونه مثال معرفی کنید
در صورتی که 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@ وجود دارند که برای توضیحات بیشتر و بسیار دقیق تر اونها پیشنهاد میکنم حتما خود متسندات لاراول مربوط به بخش اجازه دسترسی رو مطالعه کنید.
در صورتی که 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@ وجود دارند که برای توضیحات بیشتر و بسیار دقیق تر اونها پیشنهاد میکنم حتما خود متسندات لاراول مربوط به بخش اجازه دسترسی رو مطالعه کنید.
فصل سیزدهم از دوره Laravel 6 From Scratch لاراکست با تدریس Jeffrey Way رو تماشا کنید. پاسخ تمامی سوال هاتون رو در زمینه Authorization خواهید گرفت:
اومم چیزی که در ذهن من هست اینه که شما بیای با میدل ور این کار رو انجام بدی بر فرض مثال
ما یه جدول کار بران داریم که یک فیلدش مربوط به نقش کاربره : مثلا admin , auther , user
حالا روت هایی ک تعریف کردی هم درواقع تو در توعه (میتونه اینطوری نباشه )
مثال : add/newpost
میتونی بیای برای روتت یه میدل ور بسازی که اگر نقش این کاربر برابر با auther بود باز بشه
امیدوارم تونسته باشم با این توضیحات دست و پا شکسته بهت کمک کنم ، اگر خواستی بهم بگو یه نمونه بهت ارائه بدم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟