1. 第一步 建立迁移文件
Post 表
id
user_id
title
body
外键 $table->foreign(‘user_id‘)->references(‘id‘)->(‘users‘)->onDelete(‘cascade‘)
然后执行迁移
2.第二步模型工厂生成测试数据
$factory->define(App\Models\Post::class, function (Faker\Generator $faker) {
return [ ‘user_id‘ => factary(\App\User::class)->create()->id, ‘title‘ => $faker->sentence, ‘body‘ => $faker->paragraph, ];});通过seeder 或者 tinker 生成数据
3.ACL权限实现
定义Posts资源路由并定义该Controllers
App\Providers\AuthServiceProvider
boot 方法中Gate::define(‘show-post‘, function ($user, $post) {
return $user->id == $post->user_id;
});
代码优化
return $user->owns(‘$post‘);
User模型中 定义 owns
return $user->id == $post->user_id;
show方法中 public function show($id){ $post = Post::findorFail($id); \Auth::loginUsingId(1); //或者$this->authorize(‘show-post‘,$post) if(Gate::denies(‘show-post‘,$post)){ abort(403,‘sorry‘); } return $post->title; //5.1的新特性 return view(‘posts.show‘,compact(‘post‘));} show 的视图文件 <p1 > {{ $post ->title}} </p1> 现在只有有权限的用户 才可以看到 编辑的a标签@can(‘show-post‘,$post)<a href="#"> 编辑文章</a>@endcan
4.Policy权限规则实现
php artisan make:policy PostPolicy
在
Policy中
public function update(User $user,Post $post){
return $user->owns($post);
}
AuthServiceProvider 中注册该策略 使用它
public function show($id){ $post = Post::findorFail($id);
\Auth::loginUsingId(1);
//或者$this->authorize(‘show-post‘,$post)
if(Gate::denies(‘update‘,$post)){ abort(403,‘sorry‘); }
return view(‘posts.show‘,compact(‘post‘));}
show 的视图文件
<p1 > {{ $post ->title}} </p1>
现在只有有权限的用户 才可以看到 编辑的a标签@can(‘update‘,$post)<a href="#"> 编辑文章</a>@endcan
原文地址:https://www.cnblogs.com/gorgeous/p/8404831.html
时间: 2024-10-21 16:33:47