美文网首页
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