如何保护 SharePoint 托管加载项中的 SharePoint 列表内容?
How to protect SharePoint-List-Contents in SharePoint-hosted Add-In?
我有以下场景:
我的加载项允许写入 posts。任何用户都可以 "Like" 即 post。正在将点赞保存到列表中。
当然,加载项需要权限才能将该条目写入列表。但是(恕我直言)我不能在 SharePoint 中使用任何提升的权限 - 托管加载项,用户需要拥有该权限,对吧?
所以:我如何保护我的列表,使用户不只是进入列表并自己修改值并增加 "likes"?
(备注:这不是真实世界的场景。我知道有更好的方法来使用社交网络功能。只是想分解我更复杂的应用程序)
我会让每个用户的 'like' 单击在列表中创建一个新项目,Item-level 权限 设置为:
Create items and edit items that were created by the user
这样即使他们确实以某种方式进入后端并开始在列表中胡闹,他们也只能更改他们创建的项目。
您只需要根据应用的规模管理列表随时间增长的方式。
SharePoint-hosted add-in 不能使用仅应用策略,因为 provider-hosted add-in 可以使用 add-in 具有比用户更多权限的上下文。 SharePoint-hosted add-in 是 运行 完全在当前用户的上下文中。
我看到 3 种可能的解决方案:
- 将 add-in 重新设计为 provider-hosted)
- 实施自定义 Web 服务并从您的 add-in 调用此 Web 服务。该 Web 服务可以将敏感信息存储在自定义数据库中,也可以使用自定义权限在应用程序 Web 中列出。但请记住,SP 管理员可以修改这些权限。
- 将 semi-sensitive 信息存储到项目的扩展属性中。没有 UI 允许用户对其进行操作,但这不如许可安全。这样做的好处是这个信息直接连接到 "affected" 项目,你不必担心失去项目和类似存储之间的连接。缺点是扩展属性只能包含有限数量的数据,并且用户必须具有更新项目的权限。您还可以将此方法与您的列表结合使用。
你是对的。用户需要 "Contribute" 之类的权限才能完成您正在谈论的内容。就个人而言,这是我会做的...
1) 确保我要保护的列表有一个不起眼的名字。请记住,UI 与主机网站(即网站内容)中的不同。用户永远不必知道此类数据存储在哪个列表中。更进一步,列表之间的联系可以通过 GUID 之类的东西而不是像 "Title" 这样明显的东西来建立,这使得确定数据的确切关系变得更加困难。
https://sharepoint.stackexchange.com/questions/96360/hide-list-from-browser-site-lists-lisname
2) 删除敏感列表中的所有视图。这将阻止浏览器中的导航。这些列表将通过 REST 或 CSOM 进行修改,因此您不需要它们。
3)我还没有测试过这个可能的解决方案,但它可能有效。您应该能够配置 edit.aspx(或创建您自己的自定义),这样即使用户以某种方式通过了步骤 1 和 2,也没有可用的字段可编辑...
这些方法不会以任何方式操纵对列表的权限,最后,所有这些都是通过默默无闻的权限。
我有以下场景: 我的加载项允许写入 posts。任何用户都可以 "Like" 即 post。正在将点赞保存到列表中。
当然,加载项需要权限才能将该条目写入列表。但是(恕我直言)我不能在 SharePoint 中使用任何提升的权限 - 托管加载项,用户需要拥有该权限,对吧?
所以:我如何保护我的列表,使用户不只是进入列表并自己修改值并增加 "likes"?
(备注:这不是真实世界的场景。我知道有更好的方法来使用社交网络功能。只是想分解我更复杂的应用程序)
我会让每个用户的 'like' 单击在列表中创建一个新项目,Item-level 权限 设置为:
Create items and edit items that were created by the user
这样即使他们确实以某种方式进入后端并开始在列表中胡闹,他们也只能更改他们创建的项目。
您只需要根据应用的规模管理列表随时间增长的方式。
SharePoint-hosted add-in 不能使用仅应用策略,因为 provider-hosted add-in 可以使用 add-in 具有比用户更多权限的上下文。 SharePoint-hosted add-in 是 运行 完全在当前用户的上下文中。
我看到 3 种可能的解决方案:
- 将 add-in 重新设计为 provider-hosted)
- 实施自定义 Web 服务并从您的 add-in 调用此 Web 服务。该 Web 服务可以将敏感信息存储在自定义数据库中,也可以使用自定义权限在应用程序 Web 中列出。但请记住,SP 管理员可以修改这些权限。
- 将 semi-sensitive 信息存储到项目的扩展属性中。没有 UI 允许用户对其进行操作,但这不如许可安全。这样做的好处是这个信息直接连接到 "affected" 项目,你不必担心失去项目和类似存储之间的连接。缺点是扩展属性只能包含有限数量的数据,并且用户必须具有更新项目的权限。您还可以将此方法与您的列表结合使用。
你是对的。用户需要 "Contribute" 之类的权限才能完成您正在谈论的内容。就个人而言,这是我会做的...
1) 确保我要保护的列表有一个不起眼的名字。请记住,UI 与主机网站(即网站内容)中的不同。用户永远不必知道此类数据存储在哪个列表中。更进一步,列表之间的联系可以通过 GUID 之类的东西而不是像 "Title" 这样明显的东西来建立,这使得确定数据的确切关系变得更加困难。
https://sharepoint.stackexchange.com/questions/96360/hide-list-from-browser-site-lists-lisname
2) 删除敏感列表中的所有视图。这将阻止浏览器中的导航。这些列表将通过 REST 或 CSOM 进行修改,因此您不需要它们。
3)我还没有测试过这个可能的解决方案,但它可能有效。您应该能够配置 edit.aspx(或创建您自己的自定义),这样即使用户以某种方式通过了步骤 1 和 2,也没有可用的字段可编辑...
这些方法不会以任何方式操纵对列表的权限,最后,所有这些都是通过默默无闻的权限。