Laravel 11 / Foundation PolicyMakeCommand::userProviderModel()

laravel 11 policymakecommand userprovidermodel
29 فروردین 1404

آشنایی با متد 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() را فراخوانی می‌کنیم تا مدل کاربری مناسب را برگرداند.


سوالات متداول

؟

متد userProviderModel چطور کار می‌کند؟

؟

چرا باید از سیاست‌های دسترسی استفاده کنیم؟

؟

چطور می‌توانم یک سیاست جدید ایجاد کنم؟

؟

چگونه می‌توانم چک کنم که آیا کاربر ادمین است؟