如何仅在组件类或插件上创建十月 CMS 上的中间件?

Posted

技术标签:

【中文标题】如何仅在组件类或插件上创建十月 CMS 上的中间件?【英文标题】:How i can create Middleware on October CMS only on Component Class or Plugin? 【发布时间】:2020-02-06 13:43:11 【问题描述】:

我在 10 月的信息上阅读了 doku 并搜索了有关中间件的信息,但没有找到我可以提供的帮助。

我的问题: 我创建了插件并使用 RainLab 用户插件进行内容的前端编辑。 前端内容溢出到部分、组和文章上。 单个用户成为不同的访问权限:隐藏、显示、编辑部分和文章等。 该网站使用一个插件来动态加载内容。

如何通过访问配置为单个用户加载内容?

我的解决方案:

我在后端添加了一些功能,为用户提供访问权限。 rainlab user content access

所有访问配置均已保存并可正常运行。 我的想法是创建中间件来加载内容,但我找不到任何可以帮助我的东西。

Docu 告诉我您可以创建中间件,但中间件始终加载在前端、后端和网站上的所有页面上。这不是一个好的解决方案。 https://octobercms.com/docs/backend/controllers-ajax#controller-middleware

另外,如果我在中间件上调试,那么rainlab 用户功能无法正常工作,没有关于 url 请求的信息。

既然必须自己加载和创建所有的类和函数,为什么还要添加中间件??

我只需要用于前端和插件或组件的中间件。 我希望有人可以帮助我找到另一个解决方案或解决方案。

我认为除了在 onRun 函数的各个组件中实现内容访问外,别无他法。 :( 这个解决方案的问题是:返回重定向在类或函数之外不起作用(仅在 onRun 上)

【问题讨论】:

【参考方案1】:

您的方法存在问题,因为您想要middleware,并且您还想确保它针对特定插件和组件运行。 middleware 基于 request 工作,请求可能包含有关 URL 等的信息,但没有关于插件和组件等的信息,因此它无法根据插件等确定何时运行。`

所以你可以使用不同的方法。它适用于Frontend,也适用于ajax requests

您可以在插件中创建component,如果用户已登录,它将为已登录用户提供assessment所有access。如果用户未登录,您可以提供不同的assessment access

现在您需要将此组件添加到使用this layoutlayoutnow all pages 从一开始就有这个access information

现在这个组件inject access information to page,所以你的页面和插件的组件可以随时获得这些信息。现在从onRun 内的组件中,您可以在最顶部处理重定向。

组件不是定义访问,它只是将预定义的访问信息注入数据库中[正如你所说的你使用用户插件,所以获取它并注入它]到页面

组件将专门将访问信息注入页面。并且该组件将在布局上。它会自动触发该布局页面。所以它会首先执行,然后你可以决定如何使用它。您还可以基于此渲染条件组件。因为您也可以在标记部分访问信息,所以

如果您有任何疑问或问题,请发表评论。

【讨论】:

是的,这是真的,但我的组件是由 slug 内容加载的。内容 a 和 b。一个用户可以看到 a 和 b,另一个用户只能看到 a。但是您在页面上添加一个组件并为所有人添加访问权限或配置,配置不是动态的。 -------------------------------------------------- ------------------ [会话] 安全 = "用户" allowedUserGroups [] = "redaktion" 重定向 = "登录" ------------ -------------------------------------------------- ------ 你的意思是:在同一页面上添加另一个组件并在页面上显示之前挂钩和更改数据? 组件不是定义访问权限,它只是注入预定义的access information which is in database [正如你所说的你使用用户插件所以获取它并注入它]到页面 组件将专门注入access information to page。并且该组件将在布局上。它会自动触发该布局页面。所以它会首先执行,然后你可以决定如何使用它。您还可以基于此渲染条件组件。因为你可以在markup part as well 中有access 信息所以

以上是关于如何仅在组件类或插件上创建十月 CMS 上的中间件?的主要内容,如果未能解决你的问题,请参考以下文章

十月 CMS 组件加载布局

十月 CMS - 如何正确路由

从输入到数据库的十月CMS

会话数据未保存在插件控制器十月 CMS 中

十月 CMS- 语言选择器组件 Twig

十月CMS实时更新数据