0

0

Laravel 权限控制 Gate Policy

不言

不言

发布时间:2018-06-05 09:46:04

|

2348人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了关于Laravel 权限控制 Gate Policy,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

关于权限

本质 针对一段可执行的逻辑单元描述是否开启生产的判断。

定义 必定有一用户实例或唯一标识参数,以及与之关联的使用资源。通常使用闭包或函数或方法

使用 调用权限逻辑单元句柄,参数 权限操作对象,用户信息。

源起

最基本的权限控制,三元运算符 ?:。很显然条件判断,后面跳到相应的执行逻辑。

laravel的思路是将执行逻辑(生产代码),授权(条件判断逻辑)进行分离。重点关注条件的产生,通俗讲强化授权逻辑(这对复杂的授权十分有用)。公设:所有的代码在服务注册完毕后,启动。所以下面这段代码会被注册。其目的是找到真正授权判断的逻辑体。

Gate::define('update articles', 'ArticlePolicy@update')

其中第一个参数显然只是一个授权标识符(用来调用的句柄参数),第二个参数才为授权的逻辑执行体。

laravel授权定义

AuthServiceProviderboot 方法里定义授权

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

Gate::define('update articles', 'ArticlePolicy@edit');
id == $article->author_id;
    }
}

laravel授权使用

  1. Gate 门面:Gate::allows('update articles', $article)Gate::denies('update articles', $article)

  2. Controller 引入了

    trait AuthorizesRequests

    西安网上购物网店系统
    西安网上购物网店系统

    西安网上购物网店系统的主要亮点:(1)商品的分类更加细化和明朗,可以三级分类,价格可以多层次\多级别,按照后台设置的,吸引会员加入。(2)会员和非会员购物并存,订单直接支付和会员帐户支付并存,电话支付与网上支付多种支付方式。(3)自定义商品扩展属性,多种扩展属性定义模式,强大的商品管理功能,多重分类功能(4)灵活的会员积分系统,灵活的会员权限控制,模版丰富多彩,模版代码分离,方便修改模版(5)支付

    下载

    $this->authorize('update articles', $article)

  3. Blade 模板:@can('update articles', $article)@cannot('update articles', $article) 指令。

  4. User Model 实例:$user->can('update articles', $article)$user->cannot('update articles', $article)

Laravel Policy

为了方便地定义和使用授权,Laravel 在Gate的基础上引入了 Policy。policy内部的每一个方法,都会被用gate::define方法的描述注册。所以这就是为什么使用了策略类注册之后,即便没有用Gate门面定义授权逻辑,在控制器内仍然可以使用Gate::allow('策略类方法')的形式来进行授权判断 。

AuthServiceProviderpolicies 数组属性里先定义授权映射关系

/**
 * The policy mappings for the application.
 *
 * @var array
 */
protected $policies = [
    Article::class => ArticlePolicy::class,
];
id == $article->author_id;
    }

     public function before($user, $ability)
    {
        if($user->isSuperAdmin()){
            return true;
        }
    }
 }

注意

Policy 只是在普通 PHP 类基础上添加了一个 HandlesAuthorization trait。

在 Policy 中会在所有方法执行前调用,经常用到的地方就是处理管理员授权逻辑。

相关推荐:

Laravel利用gulp如何构建前端资源

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号