Покращення авторизації в Laravel за допомогою Backed Enums

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 18 березня, 2025
Laravel нещодавно представив підтримку перерахувань для авторизації, що значно спростило процес перевірки дозволів. Дізнайтеся, як ця нова функція робить вашу кодову базу більш інтуїтивною та легшою у супроводі!

Laravel тепер безпосередньо підтримує back-end enums в авторизації, що усуває потребу у посиланні на властивість значення enum. Цей спрощений підхід робить перевірку прав доступу інтуїтивно зрозумілою та більш зручною в обслуговуванні.

Застосування є простим:

enum ReportPermission: string
{
    case VIEW = 'reports.view';
    case EXPORT = 'reports.export';
    case MANAGE = 'reports.manage';
}
 
public function showReport(): View
{
    $this->authorize(ReportPermission::VIEW);
 
    return view('reports.show');
}

Ця модель елегантно працює в складних системах авторизації:

enum ContentPermission: string
{
    case LIST_ARTICLES = 'content.articles.list';
    case VIEW_ARTICLE = 'content.articles.view';
    case CREATE_ARTICLE = 'content.articles.create';
    case MODIFY_ARTICLE = 'content.articles.update';
    case REMOVE_ARTICLE = 'content.articles.delete';
}
 
class ArticleController extends Controller
{
    public function index()
    {
        $this->authorize(ContentPermission::LIST_ARTICLES);
 
        return Inertia::render('Articles/Index', [
            'articles' => Article::with('author')
                ->latest()
                ->paginate(15)
        ]);
    }
 
    public function store(ArticleRequest $request)
    {
        $this->authorize(ContentPermission::CREATE_ARTICLE);
 
        $article = Article::create(array_merge(
            $request->validated(),
            ['author_id' => auth()->id()]
        ));
 
        return redirect()
            ->route('articles.edit', $article)
            ->with('status', 'Статтю успішно створено');
    }
 
    public function update(ArticleRequest $request, Article $article)
    {
        $this->authorize(ContentPermission::MODIFY_ARTICLE);
 
        $article->update($request->validated());
 
        event(new ArticleUpdated($article));
 
        return back()->with('status', 'Статтю оновлено');
    }
}

Підтримка enumerations створює більш типобезпечний і зручний для розробника підхід до визначення та перевірки прав доступу в усій вашій аплікації.