控制用户在应用程序中可以执行或不能执行的操作是构建实际应用程序时需要做的最重要的事情之一。
例如,在待办事项应用程序中,您不希望用户能够编辑或删除其他用户的待办事项。
在本文中,您将学习在 Laravel 中实现此目的的无缝方法之一,即使用策略来控制用户可以通过构建简单的待办事项应用程序执行哪些操作。
要学习本教程,您需要对 Laravel 及其应用程序结构有基本的了解。
创建基础应用程序
运行以下命令在所需文件夹中创建一个新的 Laravel 应用程序并移入其中:
composer create-project laravel/laravel todo-app && cd todo-app
接下来,运行以下命令来安装 Laravel Breeze:
php artisan breeze:install
Breeze 将通过身份验证构建您的新应用程序,以便您的用户可以注册、登录、注销和查看他们的个性化仪表板。
之后,通过运行以下命令编译您的应用程序资产:
npm install && npm run dev
Laravel 默认情况下附带基于文件的 SQLite 数据库,因此您需要做的下一件事是将应用程序数据库文件连接到数据库查看器,例如 TablePlus 或任何其他您喜欢的数据库查看器。
将数据库连接到查看器后,运行以下命令将可用表迁移到数据库中:
php artisan migrate
完成后,运行以下命令在浏览器中查看您的应用程序:
php artisan serve
您现在应该在 localhost:8000 上看到新的 Laravel 应用程序,如下所示:
您现在可以转到注册页面创建用户并访问仪表板,这是此时的整个应用程序。
模型设置
Laravel 中的模型用于控制数据库表。使用以下命令在 App/Models 文件夹中创建 Todo 模型:
php artisan make:model Todo
接下来,在新创建的文件中,将 Todo 类替换为以下代码:
class Todo extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'completed', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }
上面的代码将使用户能够提交具有 $fillable 属性的表单;它还定义了用户和待办事项之间的关系;在这种情况下,待办事项属于用户。让我们通过将以下代码添加到 App/Models/User.php 文件来完成关系设置:
public function todos() { return $this->hasMany(Todo::class); }
上面的代码将 User 模型连接到 Todo 模型,以便它可以有很多待办事项。
迁移设置
Laravel 中的迁移用于指定数据库表中应包含的内容。运行以下命令在 database/migrations 文件夹中创建迁移:
composer create-project laravel/laravel todo-app && cd todo-app
接下来,将新文件中的 up 函数替换为以下内容,该函数会将 todo 表添加到数据库中,其中包含 id、user_id、title、description、completed 和 timestamp 列:
php artisan breeze:install
接下来,运行以下命令将 todos 表添加到数据库中:
npm install && npm run dev
策略设置
Laravel 中的策略允许您定义谁可以使用特定资源(在本例中为待办事项)执行哪些操作。
让我们通过使用以下命令在 App/Policies 文件夹中生成 TodoPolicy 来看看它是如何工作的:
php artisan migrate
接下来,在新创建的 TodoPolicy 文件中,将 TodoPolicy 类替换为以下代码:
php artisan serve
上面的代码指定用户可以创建待办事项,但只能查看、更新或删除属于自己的待办事项。
接下来,让我们在下一节中设置控制器。
控制器设置
Laravel 中的控制器控制应用程序针对特定资源的功能。运行以下命令在 App/Http/Controllers 中生成 TodoController:
php artisan make:model Todo
在新建的TodoController文件顶部添加以下代码,导入用于数据库操作的Todo模型和用于授权的Gate类:
class Todo extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'completed', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }
指数法
将索引方法替换为以下代码,以获取并返回所有登录用户的待办事项:
public function todos() { return $this->hasMany(Todo::class); }
Gate::authorize 方法验证用户是否使用您在上一节中定义的 viewAny 策略方法登录。
创建方法
将 create 方法替换为以下代码,以验证用户是否已登录,然后再将创建待办事项表单返回给用户,以便他们可以创建待办事项:
php artisan make:migration create_todos_table
储存方式
用以下代码替换 store 方法,检查用户是否可以创建待办事项、验证请求、创建待办事项并将用户重定向到待办事项列表页面:
public function up(): void { Schema::create('todos', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->string('title'); $table->text('description')->nullable(); $table->boolean('completed')->default(false); $table->timestamps(); }); }
编辑方法
将编辑方法替换为以下代码,以验证用户是否可以编辑该待办事项,然后将填充了所选待办事项的编辑待办事项表单返回给用户,以便他们可以对其进行编辑:
php artisan migrate
更新方法
用以下代码替换 update 方法,检查用户是否可以更新待办事项、验证请求、更新选定的待办事项并将用户重定向到待办事项列表页面:
php artisan make:policy TodoPolicy --model=Todo
销毁方法
用以下代码替换 destroy 方法,检查用户是否可以删除该待办事项,删除它,并将用户重定向到待办事项列表页面:
class TodoPolicy { /** * Determine if the user can view any todos. */ public function viewAny(User $user): bool { return true; } /** * Determine if the user can view the todo. */ public function view(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } /** * Determine if the user can create todos. */ public function create(User $user): bool { return true; } /** * Determine if the user can update the todo. */ public function update(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } /** * Determine if the user can delete the todo. */ public function delete(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } }
您的 TodoController 文件现在应如下所示:
composer create-project laravel/laravel todo-app && cd todo-app
视图设置
现在您的 TodoController 方法已全部设置完毕,您现在可以通过在 resources/views 文件夹中创建一个新的 todos 文件夹来为您的应用程序创建视图。之后,在新的todos文件夹中创建create.blade.php、edit.blade.php、index.blade.php文件。
索引视图
将以下代码粘贴到index.blade.php中:
php artisan breeze:install
创建视图
将以下代码粘贴到 create.blade.php 中:
npm install && npm run dev
编辑视图
将以下代码粘贴到 edit.blade.php 中:
php artisan migrate
路线设置
使用 Laravel 中的资源方法处理 TodoController 的路由相对简单。通过将以下代码添加到 paths/web.php 文件夹的末尾来实现此目的,如下所示:
php artisan serve
上面的代码使用了 auth 中间件来保护 todos 资源。登录后,您现在应该能够在应用程序中访问以下路线:
- /todos: 列出所有用户的待办事项
- /todos/create: 显示创建待办事项的表单
- /todos/edit/1:显示用于编辑给定 id 的待办事项的表单;在本例中为 1。
您现在可以创建、编辑和删除待办事项,但在编辑和删除时只能以登录用户和所选待办事项的所有者身份进行。
结论
就是这样!您刚刚创建了一个真实的待办事项应用程序,该应用程序允许用户仅创建、查看、编辑和删除自己的待办事项。如果您有任何更正、建议或问题,请在评论中告诉我!
最后,记得在 Dev、LinkedIn 和 Twitter 上关注我。非常感谢您的阅读,我们下一篇再见!
以上是授权:了解 Laravel 中的策略的详细内容。更多信息请关注PHP中文网其他相关文章!

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。