laravel框架创建授权策略实例分析

 更新时间:2019年11月22日 11:09:09   作者:心之所依  
这篇文章主要介绍了laravel框架创建授权策略,结合实例形式分析了laravel框架创建授权策略的相关步骤、实现方法与操作注意事项,需要的朋友可以参考下

本文实例讲述了laravel框架创建授权策略。分享给大家供大家参考,具体如下:

用户只能编辑自己的资料

在完成对未登录用户的限制之后,接下来我们要限制的是已登录用户的操作,当 id 为 1 的用户去尝试更新 id 为 2 的用户信息时,我们应该返回一个 403 禁止访问的异常。在 Laravel 中可以使用 授权策略 (Policy) 来对用户的操作权限进行验证,在用户未经授权进行操作时将返回 403 禁止访问的异常。

1. 创建授权策略

我们可以使用以下命令来生成一个名为 UserPolicy 的授权策略类文件,用于管理用户模型的授权。

php artisan make:policy UserPolicy

所有生成的授权策略文件都会被放置在 app/Policies 文件夹下。

让我们为默认生成的用户授权策略添加 update 方法,用于用户更新时的权限验证。

app/Policies/UserPolicy.php

update 方法接收两个参数,第一个参数默认为当前登录用户实例,第二个参数则为要进行授权的用户实例。当两个 id 相同时,则代表两个用户是相同用户,用户通过授权,可以接着进行下一个操作。如果 id 不相同的话,将抛出 403 异常信息来拒绝访问。

使用授权策略需要注意以下两点:

  1. 我们并不需要检查 $currentUser 是不是 NULL。未登录用户,框架会自动为其 所有权限 返回 false
  2. 调用时,默认情况下,我们 不需要 传递当前登录用户至该方法内,因为框架会自动加载当前登录用户(接着看下去,后面有例子)。

2. 注册授权策略

Laravel 提供两种注册授权策略的方式,第一种是手动指定,第二种是 Laravel 5.8 新增功能 —— 自动授权注册。为了方便起见,我们会使用第二种。

自动授权默认会假设 Model 模型文件直接存放在 app 目录下,鉴于我们已将模型存放目录修改为 app/Models,接下来还需自定义自动授权注册的规则,修改 boot() 方法:

app/Providers/AuthServiceProvider.php

授权策略定义完成之后,我们便可以通过在用户控制器中使用 authorize 方法来验证用户授权策略。默认的 App\Http\Controllers\Controller 类包含了 Laravel 的 AuthorizesRequests trait。此 trait 提供了 authorize 方法,它可以被用于快速授权一个指定的行为,当无权限运行该行为时会抛出 HttpException。authorize 方法接收两个参数,第一个为授权策略的名称,第二个为进行授权验证的数据。

我们需要为 edit 和 update 方法加上这行:

这里 update 是指授权类里的 update 授权方法,$user 对应传参 update 授权方法的第二个参数。正如上面定义 update 授权方法时候提起的,调用时,默认情况下,我们 不需要 传递第一个参数,也就是当前登录用户至该方法内,因为框架会自动加载当前登录用户。

书写的位置如下:

app/Http/Controllers/UsersController.php

更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

相关文章

  • Laravel 5框架学习之用户认证

    Laravel 5框架学习之用户认证

    本文给大家分享的是Laravel5框架中用户认证系统的使用方法,十分的详细,附上示例,推荐给小伙伴们,有需要的朋友可以参考下。
    2015-04-04
  • Yii2中SqlDataProvider用法示例

    Yii2中SqlDataProvider用法示例

    这篇文章主要介绍了Yii2中SqlDataProvider用法,结合实例形式分析了Yii2框架中使用SqlDataProvider类操作数据库的相关技巧,需要的朋友可以参考下
    2016-09-09
  • 织梦sitemap地图实时推送给百度的教程

    织梦sitemap地图实时推送给百度的教程

    这篇文章主要介绍了织梦sitemap地图实时推送给百度的教程,需要的朋友可以参考下
    2015-08-08
  • php连接mssql数据库的几种方法

    php连接mssql数据库的几种方法

    数据库查询不外乎4个步骤,1、建立连接。2、输入查询代码。3、建立查询并取出数据。4、关闭连接。 php连接mssql数据库有几个注意事项,尤其mssql的多个版本、32位、64位都有区别。
    2013-02-02
  • Laravel源码解析之路由的使用和示例详解

    Laravel源码解析之路由的使用和示例详解

    这篇文章主要介绍了Laravel源码解析之路由的使用和示例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • php获取数据库结果集方法(推荐)

    php获取数据库结果集方法(推荐)

    下面小编就为大家带来一篇php获取数据库结果集方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 实例讲解PHP表单验证功能

    实例讲解PHP表单验证功能

    在本文中我们给大家分享了关于PHP表单验证功能以及相关的实例代码内容,有需要的朋友们学习下。
    2019-02-02
  • php实现简易计算器

    php实现简易计算器

    这篇文章主要为大家详细介绍了php实现简易计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • PHP实现QQ登录的开原理和实现过程

    PHP实现QQ登录的开原理和实现过程

    本文主要给大家讲述了PHP实现QQ登录的开原理以及相关的代码实现过程,对此有兴趣和需要的朋友参考下吧。
    2018-02-02
  • Yii2中多表关联查询hasOne hasMany的方法

    Yii2中多表关联查询hasOne hasMany的方法

    这篇文章主要介绍了Yii2中多表关联查询hasOne hasMany的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02

最新评论