Laravel 权限管理总结(一)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值