laravel5.6之权限策略

在用户登录之后,可以使用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传递的第一个参数是模型对应的策略类里的方法名称,第二个参数是需要授权的实例

猜你喜欢

转载自blog.csdn.net/weixin_41767780/article/details/80917763