跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Laravel 权限控制 Gate Policy

这篇文章主要介绍了关于Laravel 权限控制 Gate Policy,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 关于权限 本质 针对一段可执行的逻辑单元描述是否开启生产的判断。 定义 必定有一用户实例或唯一标识参数,以及与之关联的使用资源。通常使用闭包或函数或方法 使用 调用权限逻辑单元句柄,参数 权限操作对象,用户信息。 源起 最基本的权限控制,三元运算符 ?:。很显然条件判断,后面跳到相应的执行逻辑。 laravel 的思路是将执行逻辑(生产代码),授权(条件判断逻辑)进行分离。重点关注条件的产生,通俗讲强化授权逻辑(这对复杂的授权十分有用)。公设:所有的代码在服务注册完毕后,启动。所以下面这段代码会被注册。其目的是找到真正授权判断的逻辑体。
Gate::define('update articles', 'ArticlePolicy@update')
其中第一个参数显然只是一个授权标识符(用来调用的句柄参数),第二个参数才为授权的逻辑执行体。 laravel授权定义 在
AuthServiceProvider
的
boot
方法里定义授权
Gate::define('update articles', function ($user, $article) { return $user->id == $article->user_id; }); Gate::define('update articles', 'ArticlePolicy@edit');
id == $article->author_id; } }
laravel授权使用 Gate 门面:
Gate::allows('update articles', $article)
和
Gate::denies('update articles', $article)
。 Controller 引入了 trait AuthorizesRequests Laravel 13.2.0 PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。 下载
$this->authorize('update articles', $article)
。 Blade 模板:
@can('update articles', $article)
和
@cannot('update articles', $article)
指令。 User Model 实例:
$user->can('update articles', $article)
和
$user->cannot('update articles', $article)
。 Laravel Policy 为了方便地定义和使用授权,Laravel 在Gate的基础上引入了 Policy。policy内部的每一个方法,都会被用 gate ::define方法的描述注册。所以这就是为什么使用了策略类注册之后,即便没有用Gate门面定义授权逻辑,在控制器内仍然可以使用Gate::allow('策略类方法')的形式来进行授权判断 。 在
AuthServiceProvider
的
policies
数组属性里先定义授权映射关系
/** * 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如何构建前端资源

相关文章