Laravel 权限管理总结

Posted gorgeous

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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






























 












































































































以上是关于Laravel 权限管理总结的主要内容,如果未能解决你的问题,请参考以下文章

Laravel设计RBAC权限管理出API接口

教程4 - 验证和权限

Laravel8.x+Vue+AntDesign低代码后台管理系统开发平台

Vue.js 组件 + Laravel 权限管理

laravel特殊功能代码片段集合

gitlab 权限说明