Laravel用户授权系统的使用方法示例

 更新时间:2018年09月16日 16:18:13   作者:深 呼吸  
这篇文章主要给大家介绍了关于Laravel用户授权系统使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

本文主要给大家介绍的是关于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

总结

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

相关文章

  • 基于MySQL到MongoDB简易对照表的详解

    基于MySQL到MongoDB简易对照表的详解

    本篇文章是对从MySQL到MongoDB的简易对照表进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP使用mysqli同时执行多条sql查询语句的实例

    PHP使用mysqli同时执行多条sql查询语句的实例

    今天小编就为大家分享一篇关于PHP使用mysqli同时执行多条sql查询语句的实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • laravel5.6 框架操作数据 Eloquent ORM用法示例

    laravel5.6 框架操作数据 Eloquent ORM用法示例

    这篇文章主要介绍了laravel5.6 框架操作数据 Eloquent ORM用法,结合实例形式详细分析了laravel5.6 框架使用Eloquent ORM操作数据增删改查相关实现技巧,需要的朋友可以参考下
    2020-01-01
  • Zend Framework教程之Application用法实例详解

    Zend Framework教程之Application用法实例详解

    这篇文章主要介绍了Zend Framework教程之Application用法,详细分析了Zend_Application的功能,定义,参数含义及相关使用技巧,需要的朋友可以参考下
    2016-03-03
  • PHP模板引擎Smarty内置变量调解器用法详解

    PHP模板引擎Smarty内置变量调解器用法详解

    这篇文章主要介绍了PHP模板引擎Smarty内置变量调解器用法,结合实例形式详细分析了Smarty中的常用内置变量调节器定义与使用技巧,需要的朋友可以参考下
    2016-04-04
  • php设计模式之工厂模式用法经典实例分析

    php设计模式之工厂模式用法经典实例分析

    这篇文章主要介绍了php设计模式之工厂模式用法,结合具体实例形式分析了php工厂模式相关原理、定义、用法及操作注意事项,需要的朋友可以参考下
    2019-09-09
  • thinkphp5.1 中使用自定义异常处理类进行接管

    thinkphp5.1 中使用自定义异常处理类进行接管

    这篇文章主要介绍了thinkphp5.1 中使用自定义异常处理类进行接管,本文通过配置文件的修改和具体代码实现详细展开的讲解了如何使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • php将html转为图片的实现方法

    php将html转为图片的实现方法

    下面小编就为大家带来一篇php将html转为图片的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • PHP 根据IP地址控制访问的代码

    PHP 根据IP地址控制访问的代码

    有时需要根据 IP 地址控制访问,以限制或引导某些访问请求。比如允许局域网段中的访客正常访问,但禁止外网访问。芒果简单介绍用 PHP 脚本实现此功能的方法。
    2010-04-04
  • PHP生成word文档的三种实现方式

    PHP生成word文档的三种实现方式

    本篇文章主要介绍了PHP生成word的三种实现方式,利用php将内容写入Word中,有需要的可以了解一下。
    2016-11-11

最新评论