@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 بود باز بشه
امیدوارم تونسته باشم با این توضیحات دست و پا شکسته بهت کمک کنم ، اگر خواستی بهم بگو یه نمونه بهت ارائه بدم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟