Laravel中的用户授权使用

主要两种方式来实现用户授权:gatespolicy

policy

创建

命令行方式
php artisan make:policy PostPolicy --model=Post
可以通过--model指定对应的模型

注册

AuthServiceProviderpolicies属性中

class AuthServiceProvider extends ServiceProvider
{
.....
    /**
     * 应用的策略映射。
     *
     * @var array
     */
    protected $policies = [
        Post::class => PostPolicy::class,
    ];
    
......
                                 
}

编写认证方法

在生成的XXXPolicy类中中编写方法,

  • 该方法的返回值只能是布尔类型,
  • 传入方法的参数中有一个User类型

策略过滤器before方法

before 方法会在策略中其它所有方法之前执行,这样提供了一种方式来授权动作而不是指定的策略方法来执行判断。这个功能最常见的场景是授权应用的管理员可以访问所有动作:

public function before($user, $ability)
{
    if ($user->isSuperAdmin()) {
        return true;
    }
}

如果你想拒绝用户所有的授权,你应该在 before 方法中返回 false。如果返回的是 null,则通过其它的策略方法来决定授权与否。

使用

1.通过User模型
User模型的实例有两个方法cancant

if ($user->can('update', $post)) {
    //
}

2.中间件

->middleware('can:update,post');

3.在控制器中

$this->authorize('update', $post);

4.blade中
使用@can@cant指令

@can('update', $post)
    
@elsecan('create', $post)
    
@endcan

@cannot('update', $post)
    
@elsecannot('create', $post)
    
@endcannot

Gate

待续。。。。

你可能感兴趣的:(Laravel中的用户授权使用)