• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Laravel用户授权系统的使用方法示例
    POST TIME:2021-10-18 04:51

    前言

    本文主要给大家介绍的是关于Laravel用户授权系统使用的相关内容

    首先两个概念分清楚:

    用户身份认证 Authentication - 处理用户登录, 退出, 注册, 找回密码, 重置密码, 用户邮箱认证 etc..

    权限管理 Authorization - 负责 用户 与 权限, 用户组 三者之间的对应, 以及管理.

    下面话不多说了,来一起看看详细的介绍吧

    基本用法

    示例

    $this->authorize('update', $post);

    第一个参数 $ability,表示具备什么权限。第二个参数 $post,是一个模型实例。

    不需指定模型的动作,比如 create,不需要指定的模型。第二个参数传一个类名。如:

    $this->authorize('create', Post::class);

    使用的场景有:控制器辅助方法,中间件,Blade模板,User 模型的 can 和 can't 方法。

    authorize方法:

    public function authorize($ability, $arguments = [])
    {
     list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments);
     
     return app(Gate::class)->authorize($ability, $arguments);
    }

    有两种方式实现用户授权

    Gates

    编写 Gates

    一般在 app\Providers\AuthServiceProvider 的 boot 方法中定义。

    Gate::define('update-post', function ($user, $post) {
     return $user->id == $post->user_id;
    });

    第一个参数是权限的名称,第二个参数是满足权限的条件,可以是闭包,控制器方法。

    授权动作

    allows 和 denies 两种方法,表示允许和否定。

    第一个参数是权限的名称,第二个参数是模型,可以为空。这里不需要传入用户,框架会自动处理。

    if (Gate::allows('update-post', $post)) {
     // 指定用户可以更新博客...
    }
     
    if (Gate::denies('update-post', $post)) {
     // 指定用户不能更新博客...
    }

    如果需要指定特定用户,可以使用 Gate Facade 中的 forUser 方法:

    if (Gate::forUser($user)->allows('update-post', $post)) {
     // 指定用户可以更新博客...
    }
     
    if (Gate::forUser($user)->denies('update-post', $post)) {
     // 指定用户不能更新博客...
    }

    策略

    生成策略

    artisan 命令:

    php artisan make:policy PostPolicy

    也可以指定 model,生成包含 CURD 的策略方法。

    注册策略

    在 AuthServiceProvider 的 policies 属性,可以将模型和策略对应起来。如:

    protected $policies = [
     Post::class => PostPolicy::class,
    ];

    策略方法

    public function update(User $user, Post $post)
    {
     return $user->id === $post->user_id;
    }

    策略方法,就是权限名称,$this->authorize(‘update', $post) 的第一个参数就对应同名的策略方法,第二个参数 $post 代表它是一个 Post 模型,框架会根据参数判断采用 Post::class => PostPolicy::class 这个策略。

    当 authorize 方法调用的时候,实际上会自动注入 User 和 Post 类型的两个参数,也因此使用授权系统必须是用户登录的情况下。

    使用策略也不一定要和模型绑定,比如这样也可以:

    protected $policies = [
     Travel::class => TravelPolicy::class,
     'aaa'=>TravelPolicy::class,
    ];

    这个 aaa 字符串对应策略类为 TravelPolicy::class,在控制器使用 authorize 判断授权:

    $this->authorize('update','aaa');

    此时也是可行的,第二个参数这个时候就必须是字符串 aaa 了,然后 authorize 方法只会自动注入 User 参数。

    官方文档

    Laravel 5.5 文档

    https://laravel-china.org/docs/laravel/5.5/authorization/1310

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • Laravel实现用户注册和登录
    • Laravel 5框架学习之用户认证
    • Laravel重写用户登录简单示例
    • Laravel框架用户登陆身份验证实现方法详解
    • Laravel实现用户多字段认证的解决方法
    • Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
    • 解决laravel5中auth用户登录其他页面获取不到登录信息的问题
    • laravel-admin 管理平台获取当前登陆用户信息的例子
    • Laravel多用户认证系统示例详解
    • Laravel6.2中用于用户登录的新密码确认流程详解
    • Laravel 微信小程序后端实现用户登录的示例代码
    • laravel利用中间件防止未登录用户直接访问后台的方法
    • Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
    上一篇:Laravel中错误与异常处理的用法示例
    下一篇:PHP htmlspecialchars() 函数实例代码及用法大全
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信