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');
<?php namespace App\Policies; use App\User; use App\Models\Article; class ArticlePolicy { public function update(User $user, Article $article) { return $user->id == $article->author_id; } }
laravel授权使用
Gate 门面:
Gate::allows('update articles', $article)
和Gate::denies('update articles', $article)
。Controller 引入了
trait AuthorizesRequests
$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, ];
<?php namespace App\Policies; use App\User; use App\Models\Article; use Illuminate\Auth\Access\HandlesAuthorization; class ArticlePolicy { use HandlesAuthorization; public function create(User $user) { return true; } public function delete(User $user, Article $article) { return $user->id == $article->author_id; } public function before($user, $ability) { if($user->isSuperAdmin()){ return true; } } }
注意:
Policy 只是在普通 PHP 类基础上添加了一个 HandlesAuthorization
trait。
在 Policy 中会在所有方法执行前调用,经常用到的地方就是处理管理员授权逻辑。
相关推荐:
以上是Laravel 权限控制 Gate Policy的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel邮件发送失败时的退信代码获取方法在使用Laravel开发应用时,经常会遇到需要发送验证码的情况。而在实�...

详细介绍芝麻开门交易所网页版登入口操作,含登录步骤、找回密码流程,还针对登录失败、无法打开页面、收不到验证码等常见问题提供解决方法,助你顺利登录平台。

需下载 Gate.io 应用程序以开启加密货币之旅?本指南详细列出适用于 iOS、Android 和 Windows 设备的最新版本下载步骤。只需访问官方网站,找到下载链接并根据您的设备选择相应选项。对于 iOS,将直接转到 App Store,而 Android 和 Windows 用户将下载 APK 或安装程序进行手动安装。完成安装后,您就可以启动应用程序并设置您的帐户,踏入加密货币世界。

本文提供2025年最新版比特币历史价格明细回顾,详细梳理了比特币自2009年诞生以来的价格走势。从最初的默默无闻到如今成为全球瞩目的数字资产,比特币价格经历了多次暴涨暴跌,本文将回顾其关键里程碑事件,例如2010年“披萨事件”、2013年突破千美元、2017年突破两万美元以及随后的市场调整。 我们将分析影响比特币价格波动的主要因素,包括技术发展、监管政策、市场情绪和宏观经济环境等,并对未来发展趋势进行展望,为读者了解比特币价格变化提供全面参考,帮助投资者更好地进行风险评估。

Laravel计划任务运行无响应排查在使用Laravel的计划任务调度时,不少开发者会遇到这样的问题:schedule:run...

芝麻开门交易所 app 官方下载步骤,涵盖安卓、iOS 系统下载流程,以及常见问题解决方法,助你安全、快速下载,开启加密货币便捷交易。

本文介绍了免费的数字资产行情软件APP和网站,它们能为投资者提供实时价格、价格图表、交易量、涨跌幅、市场深度和新闻资讯等关键信息,帮助投资者做出明智的决策。 与收费软件相比,免费软件具有无需成本、功能丰富、操作简便等优势。 文章还指导用户如何选择合适的行情软件,并提醒用户注意数据来源、信息准确性和避免过度依赖等问题,最终助力投资者更好地把握数字资产市场动向。 想要了解如何高效利用免费行情软件?赶紧阅读全文!
