美文网首页
laravel5.6之权限策略

laravel5.6之权限策略

作者: 一只码农的成长 | 来源:发表于2018-07-04 19:53 被阅读0次

    在用户登录之后,可以使用laravel中的权限策略(policy)给用户的操作进行权限控制。比方说,当不是管理员登录时,只能看而不能修改别人的信息,也不能删除别人以及自己的用户信息,只有管理员能修改别人的用户信息,以及删除别人的用户信息

    1、生成一个策略文件

    通过如下命令生成策略类文件,比方说用户策略类

    php artisan make:policy UserPolicy
    

    也可以在生成文件的同时指定管理的模型

    php artisan make:policy UserPolicy --model=User
    

    2、在策略类文件中书写我们的授权逻辑

    在文件中,可以使用如下方法在更新时进行权限控制

        public function update(User $user, User $model)
        {
            return $user['is_admin'] || $user->id == $model->id;
        }
    

    判断是否是管理员或者操作的是否是自己的账号
    在策略类的方法中,返回true代表用户被授权,有权限做此操作,如果返回的是false,代表用户不被授权,没有权限做此操作
    update方法的第一个参数是登录的用户,框架会自动帮我们自动加载,不需要我们自己传值,第二个参数是需要授权的用户实例,需要我们自己传值,意思就是$user所代表的用户是否被授权对$model实例进行操作

    3、注册生成的策略

    生成的策略文件需要注册后才能使用,注册的方法:
    app/Providers/目录里面的AuthServiceProvider.php文件中的$policies属性中,进行注册

    'App\User' => UserPolicy::class
    

    键名指的是需要授权管理的模型,键值指的是使用哪种策略类来进行管理

    4、使用策略

    ①在控制器的方法中使用策略,通过框架提供的authorize方法

    $user = User::find($id);
    $this->authorize('update',$user);
    

    authorize方法的第一个参数是该模型对应的策略类中的方法名称,第二个参数需要授权的实例;如果授权通过,那么将继续执行下面的操作,如果不被授权,那么该动作就会抛出一个异常
    ②通过blade模版使用策略

    @can('update', $user)
    <!-- 当前用户可以进行的操作 -->
    @endcan
    

    其中@can传递的第一个参数是模型对应的策略类里的方法名称,第二个参数是需要授权的实例

    相关文章

      网友评论

          本文标题:laravel5.6之权限策略

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