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 створює більш типобезпечний і зручний для розробника підхід до визначення та перевірки прав доступу в усій вашій аплікації.