首页 后端开发 php教程 Laravel 权限控制 Gate Policy

Laravel 权限控制 Gate Policy

Jun 05, 2018 am 09:46 AM
gate laravel

这篇文章主要介绍了关于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');
登录后复制
<?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授权使用

  1. Gate 门面:Gate::allows(&#39;update articles&#39;, $article)Gate::denies(&#39;update articles&#39;, $article)

  2. Controller 引入了

    trait AuthorizesRequests

    $this->authorize(&#39;update articles&#39;, $article)

  3. Blade 模板:@can(&#39;update articles&#39;, $article)@cannot(&#39;update articles&#39;, $article) 指令。

  4. User Model 实例:$user->can(&#39;update articles&#39;, $article)$user->cannot(&#39;update articles&#39;, $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,
];
登录后复制
<?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利用gulp如何构建前端资源

以上是Laravel 权限控制 Gate Policy的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中如何获取邮件发送失败时的退信代码? 在Laravel中如何获取邮件发送失败时的退信代码? Apr 01, 2025 pm 02:45 PM

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

芝麻开门交易所网页版登入口 最新版gateio官网入口 芝麻开门交易所网页版登入口 最新版gateio官网入口 Mar 04, 2025 pm 11:48 PM

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

gate.io最新版本下载 gate.io最新版本下载 Mar 05, 2025 pm 07:51 PM

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

比特币最全历史价格明细回顾(2025年最新版) 比特币最全历史价格明细回顾(2025年最新版) Mar 05, 2025 pm 08:42 PM

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

Laravel计划任务不执行:schedule:run命令后任务未运行怎么办? Laravel计划任务不执行:schedule:run命令后任务未运行怎么办? Mar 31, 2025 pm 11:24 PM

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

在 Laravel 中,如何处理邮件发送验证码失败的情况? 在 Laravel 中,如何处理邮件发送验证码失败的情况? Mar 31, 2025 pm 11:48 PM

Laravel邮件发送验证码失败时的处理方法在使用Laravel...

芝麻开门交易所app官方下载 芝麻开门交易所官方版下载 芝麻开门交易所app官方下载 芝麻开门交易所官方版下载 Mar 04, 2025 pm 11:54 PM

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

免费的行情软件app网站 免费的行情软件app网站 Mar 05, 2025 pm 09:03 PM

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

See all articles