آشنایی با متد userProviderModel در کلاس PolicyMakeCommand در Laravel 11
سلام! امروز میخواهیم در مورد یکی از ویژگیهای جدید لاراول 11 صحبت کنیم، یعنی متد userProviderModel()
در کلاس PolicyMakeCommand
. لاراول یکی از محبوبترین فریمورکهای PHP است و هر نسخه جدید ویژگیهای بیشتری به آن افزوده میشود. این متد به ما امکان میدهد نوع مدل کاربری که میخواهیم با سیاستهای دسترسیمان استفاده کنیم را مشخص کنیم. این قابلیتی است که به توسعهدهندگان کمک میکند تا کنترل دقیقتری بر روی دسترسیها داشته باشند.
حالا فکر میکنید این متد چه کاربردی دارد؟ با استفاده از این متد، شما میتوانید مدلهایی که بهطور معمول در اپلیکیشن خود استفاده میکنید را راحتتر مدیریت کنید. به ویژه در پروژههایی که چندین مدل کاربری دارند و نیاز به سیاستهای دسترسی متفاوت است، این قابلیت میتواند کمک بزرگی باشد. به طور خلاصه، این متد به ما این امکان را میدهد که مطمئن شویم سیاستهای دسترسی ما با مدلهای کاربری که داریم سازگار هستند.
بیایید کمی بیشتر در مورد نحوه استفاده از این متد صحبت کنیم. زمانی که شما از دستور make:policy
در لاراول برای ایجاد یک سیاست جدید استفاده میکنید، این متد به طور خودکار اسم مدل کاربری شما را پیدا میکند و به آن سیاست اضافه میکند. این کار به شما اجازه میدهد تا سریعتر قوانین دسترسی را تعریف و پیادهسازی کنید.
حالا بیایید به سراغ قسمت کد برویم. در زیر نمونهای از نحوه استفاده از userProviderModel()
آورده شده است که در آن میتوانیم یک سیاست جدید بسازیم و از این متد استفاده کنیم:
php
namespace App\Policies;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class ArticlePolicy
{
use HandlesAuthorization;
public function before($user)
{
// چک میکند که آیا کاربر ادمین است
if ($user->isAdmin()) {
return true;
}
}
public function view(User $user, Article $article)
{
return $user->id === $article->user_id;
}
}
// استفاده از PolicyMakeCommand
public function model()
{
return $this->userProviderModel();
}
توضیحات کد
بیایید هر بخش از این کد را بررسی کنیم:
namespace App\Policies;
این خط نام فضا را تعریف میکند که در آن کلاس ArticlePolicy
قرار دارد.
use App\Models\User;
در اینجا ما مدل کاربری User
را وارد میکنیم تا بتوانیم از آن در سیاستهای خود استفاده کنیم.
public function before($user)
این متد قبل از بررسی سایر متدها در این کلاس فراخوانی میشود. اگر کاربر ادمین باشد، به طور خودکار اجازه دسترسی میگیرد.
public function view(User $user, Article $article)
این متد بررسی میکند آیا کاربر اجازه مشاهده یک مقاله خاص را دارد یا نه. اینجا از $user->id === $article->user_id
مطمئن میشویم که فقط نویسنده مقاله از آن مطلع باشد.
public function model()
در اینجا ما متد userProviderModel()
را فراخوانی میکنیم تا مدل کاربری مناسب را برگرداند.