【问题标题】:nested complicated ACL in laravel在 laravel 中嵌套复杂的 ACL
【发布时间】:2020-01-23 05:12:48
【问题描述】:

我在我的项目中使用 spatie/laravel-permission 作为 ACL 系统。很好。 我正在向我的项目添加付款/会计/发票,在此级别中,用户工作需要另一个 ACL。

例如,用户 A 有一个特征 F1 作为我们的服务。直到 1 个月,他/她可以使用 F1 中的所有部分。之后,F1 中的某些功能会受到限制,直到新的发票与用户一起支付。

所以在我的控制器中,我只在用户 ACL 级别使用 authorizeForUser 的 Edit 方法。现在我应该在 F 模型中添加另一个 ACL,例如 authorizeForF(F1->id)?! 另一个问题是这很复杂,如果我忘记添加这个,我会错过一些钱!

【问题讨论】:

  • 您是使用权限还是直接使用角色?你能给我们看看代码吗?
  • 两者或它们。用于管理员权限和其他模型角色
  • 最好使用权限并将权限分配给特定模型或角色。在这种情况下,您可以轻松删除权限,直到用户支付发票为止。
  • 我有个主意。在路由中间件中,为每个通过检查任何付款计划的 uri 定义一个情况,如果存在并且用户没有足够的帐户重定向来销售页面,以及是否有重定向到特定 uri。在我看来这更好,因为不需要记住代码中的每个位置并向其中添加新的 acl。我的另一个问题是,如何避免在所需的每个控制器的每种方法中重复多个 acl(对于每种模型在几种情况下:付款、新功能等)。
  • 我会在登录时检查它,如果用户登录到您的平台,您会检查用户是否有未付款项。如果是这种情况,您限制了用户可用的功能

标签: laravel payment acl roles


【解决方案1】:

我有一个解决方案:

种子在表格中保存所有 Uri,methods(foreach on Route::getRoutes())作为一个 unic 行并为它们中的每一个分配一个分数(默认为 0)。在route middllware 中,分析每个请求 uri 并将其与分数进行比较。(例如 uri 是 /profile/advaence 并且管理员为此分配分数 2)

如果 uri 的分数超过零,用户的会计将检查以继续或在需要时重定向到付款。

这使网站管理员能够分配每个 uri 分数,开发人员对此不承担任何责任。

只是我担心 uri。因为管理员通常不会轻易理解它们。所以,我需要另一个种子来解释一些 uri 作为标题。

好吃吗?

【讨论】:

  • 这听起来过于复杂。使用该软件包对您有利。在登录控制器中,运行任何检查并根据需要删除权限。然后重定向到用户仪表板,它应该只显示用户有权限的功能。
  • 我选择这种方式是因为不需要每一种方法都检查。因此,当新开发人员添加新方法时,请向网站管理员解释,他/她决定是否为它的 uri 分配任何分数。
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 2019-08-31
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
相关资源
最近更新 更多