Laravel角色和权限管理工具Bouncer有什么功能

这篇文章主要介绍了Laravel角色和权限管理工具Bouncer有什么功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Laravel角色和权限管理工具Bouncer有什么功能文章都会有所收获,下面我们一起来看看吧。

创新互联公司成都企业网站建设服务,提供成都网站建设、做网站网站开发,网站定制,建网站,网站搭建,网站设计,成都响应式网站建设公司,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:18980820575

什么是 Bouncer?#

Bouncer 是一个开源包,用于动态管理数据库中的角色和权限,与 Laravel 的 Gate完全集成。

在不深入细节的情况下,以下是其一些主要功能的简短列表:

  • Simple abilities:

    Bouncer::allow($user)->to('access-dashboard');
  • Model abilities:

    Bouncer::allow($user)->to('view', Invoice::class);
    Bouncer::allow($user)->to('delete', $invoice);
  • Flexible roles:

    Bouncer::allow('admin')->everything();
    Bouncer::assign('admin')->to($user);
  • Forbidding abilities:

    Bouncer::allow($user)->to('view', Invoice::class);
    Bouncer::forbid($user)->to('view', $confidentialInvoice);
  • Powerful ownership:

    Bouncer::allow($user)->toOwn(Post::class);
  • Straighforward multi-tenancy:

    Bouncer::scope()->to($tenantId);
  • Built-in caching

    Bouncer::cache();

Bouncer 最初的想法

早在 2015 年 8 月,Taylor 添加了一个 Laravel 5.2 中的新授权系统,称为 Gate。这提供了一个很好用的 API,用于应用程序中定义各种操作的权限检查,简单 定义 回调 和完整的 policies,以及根据您定义的内容在 整个系统中挂接检查权限。

当我开始使用它时,我就知道这将是所有 Laravel 应用程序的 ACL 的未来。 真是太好了,Taylor 对清晰和直观的 API 有这种惊人的感觉,而「Gate」抽象真正地揭示了这一点。

然而,内置授权系统缺少一件事:动态权限,存储在数据库中。 构建 Gate 的方式,所有检查都由应用程序中定义的硬编码函数执行,因此无法让您的管理员在运行时通过某些仪表板 UI 控制其中任何一个。 正如泰勒的 原始提交 明确指出:

[内置 Gate] 为组织逻辑提供了一种结构,该逻辑授权对实体进行操作。 它没有对「用户角色」的定义做出任何决定。

当时,还有许多其他流行的 ACL 操作系统支持在运行时调整权限,但它们有一个主要缺点:它们都是在 Laravel 的 Gate 之前构建的。它们是完全分离的系统;如果您决定使用它们,你将放弃 Laravel 的 gate 提供的所有细节和漂亮的集成。

因此,我决定构建一个开源包,它可以让您两全其美:动态数据库驱动的权限,与 Laravel 的 gate 完全集成。我们在 Laravel 5.3 中对 gate 检查做了一些改进,使其更加简化和可预测,从而更容易将这些功能存储在数据库中。

技术基础

Bouncer's 的存在理由是与 Laravel 的 gate 无缝集成的。为了实现这一点,我心中的只有一个目标:在为用户分配角色和能力时,您只需和 Bouncer 进行交互。对于实际的授权检查,整个系统中 Laravel 的钩子应该自动工作,而不需任何特殊的 Bouncer 语法。ically, without any special Bouncer syntax.

将 Bouncer 挂钩到 Laravel 的 gate 检查方式是相当简单的。Gate 让你定义 一个全局的 before 回调,它将会在任何您定义的检查之前被调用:如果您的 before 回调允许或不许与某个操作,则不会运行进一步检查。

虽然 before 回调最初是为 「允许管理员执行所有操作」之类的东西而设计的,但我立即意识到这将是连接动态检查的理想场所,允许我查询数据库以获得任何权限。这就是它最初的工作方式(我们后来将其切换为使用 after 回调 - 你可以阅读更多关于 在此线程)

文档

从一开始,文档对我来说就非常重要。 开源项目的生死取决于他们的文档,所以我希望 Bouncer 的文档尽可能做到最好。尤其是在 Laravel 生态系统中,Taylor 为细致的文档设定了极高的标准。

在某种程度上,清晰的文档有时甚至比代码本身更重要。如果不告诉你的用户如何使用你的工具,他们中很少有人会使用源代码来解决这个问题。他们只会继续做下一件事。

我将 Bouncer 的成功很大程度上归功于清晰的文档,但在这方面还有很多工作要做。作为创建者,对整个谜题有一个清晰的了解,很容易忘记刚接触该工具的人会遇到什么困难。

例如:如前所述,Bouncer 仅用于为用户分配角色和权限。实际的授权检查将像在任何标准 Laravel 应用程序中一样处理。所以我想我不必重复所有这些,因为 Laravel 文档中清楚地概述了它。尽管如此,我仍然看到人们为此苦苦挣扎。他们设置了自己的角色和权限,然后不知道从哪里开始。这是我仍然想在文档中充实的一个领域。

准备发布

将 1.0 版本推迟到现在对我的用户造成了伤害。 Bouncer 多年来一直很稳定,并在世界各地的生产中积极使用。 然而,我总是犹豫要不要发布它,因为我知道我想添加的东西太多了。 我在 播客 上与 Matt 详细讨论了这个问题:我掉进了想要在发布之前让它变得完美的陷阱,这显然是 不可能的。 正如伏尔泰 已警告:「完美是良好的敌人」。

因此,当我发布 Bouncer 1.0 版时,我仍然希望在初始版本中包含 2 个出色的功能,但没有成功:

  • 每个模型的角色。 很长一段时间以来,人们一直在吵着要一种方法,只为给定的模型(或模型类)分配角色给用户。 这是该代码的样子:

  • // 注意:这还没有实现
    Bouncer::allow('editor')->to(['view', 'edit'])->everything();
    Bouncer::assign('editor')->to($user)->for(Invoice:class);
  • 这样,用户就可以查看和编辑所有发票,但不能做其他任何事情。 当然,这现在可以在没有角色的情况下直接完成,但通过角色来完成会提供另一层灵活性。

    我已经尝试过多次解决这个问题,但结果非常棘手,因为缓存变成了一场真正的噩梦。 我仍然希望有一天能解决它。 走着瞧。

  • 能力限制。 允许对给定能力进行任意限制将增加更精细的控制:

  • // 注意:这还没有实现
    Bouncer::allow($user)
    ->to('view', Post::class)
    ->where('is_confidential', false);

关于“Laravel角色和权限管理工具Bouncer有什么功能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Laravel角色和权限管理工具Bouncer有什么功能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。

本文标题:Laravel角色和权限管理工具Bouncer有什么功能
当前链接:https://www.cdcxhl.com/article10/ipesgo.html

成都网站建设公司_创新互联,为您提供小程序开发网页设计公司手机网站建设自适应网站网站导航品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设