目前,事件条目始终是日历 UI 元素的一部分,该元素可以添加到某个类别中。目前没有办法将事件限制在特定的用户组内。如果您使用的是多社区(multi-community)Discourse 配置,所有社区都能看到其他所有社区的所有事件。如果您通过 API 调用(例如
https://example.discourse.org/discourse-post-event/events.ics?user_api_key=[xxxxx])
在外部网站上显示 Discourse 事件,它将显示所有事件。
应该提供一个选项,用于创建“内部”事件,这些事件仅在特定用户组内显示。这些事件不应通过“通用” ICS API 请求读取。相反,它们应仅通过特殊的额外“组 API 密钥”或某种其他安全限制机制访问。其用例是在“公开”事件和“私有”事件之间进行选择,后者仅对特定用户组可见且可编辑。
更正:看起来在组内创建的事件似乎已经遵守了组内受限类别中显示的日历的组权限。唯一缺少的是通过“https://example.discourse.org/discourse-post-event/events.ics?user_api_key=[xxxxx]”进行 API 调用时的某种限制。
1 个赞
在你的情况下,创建一个仅属于所需组的用户,并从该用户的偏好设置中生成日历订阅 URL,这样可行吗?该订阅源将仅包含该用户可见的事件。
1 个赞
嗯,我不太确定。这听起来更像是一个临时解决方案,而不是真正的“解决方案” 
所有属于特定社区组的人都应该能够创建事件。当他们进入“自己”的社区分类时,也应该能看到这些事件。在我们当前由 5 个不同社区组成的设置中,这一切已经运行得很好了。我们使用了以下分类权限:
- 每个社区组对应一个分类。该分类具有“全局只读”和“社区读/创建/回复”权限。该分类通过 AP 进行联邦化,以便没有 Discourse 账户的人也能看到事件,并允许将 Discourse 日历集成到第三方系统中(例如带有 ICS 插件的 WordPress)。
- 若干内部子分类。这些子分类仅具有“社区读/创建/回复”权限。如果没有相应的组权限,它们是隐藏的。
目前唯一的缺口是:
- 当前的 ICS 请求会返回所有事件。
- 需要一种通过 ICS/API 请求仅获取特定社区事件的方式。
Moin
4
是所有事件,还是指使用某个 API 密钥的用户有权访问的所有事件?
您设想中,在特定请求中筛选应包含哪些事件的过程是怎样的?
说得有道理。
API 密钥有两个用户级别:“单个用户”或“所有用户”。我们目前用于 ICS 请求的 API 密钥属于“所有用户”级别。
因此,要解决这个问题,我们可能需要使用“单个用户”级别的 API 密钥。并且,所选用户只能拥有“社区”权限组,不能拥有其他任何权限。
让我确认一下。也许这样就能解决这个问题……
1 个赞
一些测试结果:
- 使用用户级别为“单用户”(single user)创建了 API 密钥
- 我首先查看了“细粒度”(granular)范围设置,但未能找到针对“事件”(events)端点的限制。尽管在 Discourse API Docs 中,“events” 被列为一个查询组
- 我改用了“只读”(read only)。结果是:“您没有权限查看所请求的资源。”
curl -kv https://xxx/discourse-post-event/events.ics?user_api_key=xxx 在使用“单用户”级别的 API 密钥时不会返回 ics 文件。而使用“所有用户”(all users)级别时,则会返回完整的事件列表。我找不到任何方法来“筛选”特定用户组的事件。
我还检查了 https:[xxxx]/admin/plugins/discourse-events/settings 中任何可能配置错误的 API 相关设置,但没有发现任何问题
有什么建议吗?