美文网首页
Laravel中的用户授权使用

Laravel中的用户授权使用

作者: fireinme | 来源:发表于2017-11-29 21:29 被阅读0次

主要两种方式来实现用户授权: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中的用户授权使用

      本文链接:https://www.haomeiwen.com/subject/lagpbxtx.html