📅  最后修改于: 2023-12-03 15:17:15.986000             🧑  作者: Mango
在 Laravel 应用程序中,策略(Policy)是一种用于授权用户访问操作的类。
策略类是用于授权和限制用户访问应用程序中各种资源的工具。使用策略类可以在控制器中轻松地定义例如“UserA 可以删除该文章”,“UserB 可以编辑此帖子”,“UserC 可以查看所有评论”等操作。
本篇文章主要介绍 Laravel 策略创建及使用。
首先,在命令行中使用以下命令来创建一个策略:
php artisan make:policy PostPolicy
此命令将在 app/Policies
文件夹中创建一个名称为 PostPolicy
的类。
策略类包含多个方法,每个方法控制着对资源的访问。对于每种操作(例如更新、删除、创建等),您都可以定义单独的方法。
下面是一个简单的策略模板:
class PostPolicy
{
public function view(User $user, Post $post)
{
return true; // 允许用户查看帖子
}
public function update(User $user, Post $post)
{
return $user->id === $post->user_id; // 只有创建者才能更新帖子
}
public function delete(User $user, Post $post)
{
return $user->id === $post->user_id; // 只有创建者才能删除帖子
}
}
在模板中,我们定义了三个方法:
view()
- 允许用户查看帖子update()
- 只有创建者才能更新帖子delete()
- 只有创建者才能删除帖子这些方法将在控制器中调用,以授权用户对资源的访问。
接下来,您需要将策略注册到 Laravel 应用程序中。在 app/Providers/AuthServiceProvider.php
文件中,使用以下代码注册策略:
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
Post::class => PostPolicy::class
];
public function boot()
{
$this->registerPolicies();
}
}
在此示例中,我们将 PostPolicy
策略与 Post
模型相关联。
现在,只要您要授权用户访问某些操作,就可以在控制器中使用策略。在控制器中,调用该策略的方法并传递相关的参数以判断用户是否有权限执行该操作。
public function destroy(Post $post)
{
$this->authorize('delete', $post);
$post->delete();
return redirect('/posts');
}
在此示例中,使用了 authorize()
方法进行授权。该方法将调用 PostPolicy
中的 delete()
方法来判断当前用户是否有权限删除帖子。
以上就是 Laravel 策略创建及使用的基本知识。通过使用策略,您可以轻松控制应用程序中资源的访问和操作。