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\AuthServiceProviderboot 方法中
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