【问题标题】:How do I implement row-level permissions using blueprint routes in SailsJS 1.x?如何在 SailsJS 1.x 中使用蓝图路由实现行级权限?
【发布时间】:2019-11-08 21:10:10
【问题描述】:

我正在使用 Sails 版本 1.2.3 来构建其余 API。我们的应用程序需要某些实体的行级权限。例如,对于相同的 API,某些用户/角色其余 API 应返回数据的子集。对于提升的用户,其余 API 应返回完整的数据集。

我不想为我们的应用程序构建自定义路线/操作,而是使用sails 蓝图路线,并将必要的行级权限应用于蓝图路线。

我已尝试查看sails-auth 和sails-permissions npm 包,但它们不适用于sails 1.x。

在当前版本的 SailsJS 中有没有办法做到这一点?

谢谢!

【问题讨论】:

    标签: sails.js


    【解决方案1】:

    好吧,您的应用似乎不是教程阶段的应用,您应该考虑完全禁用蓝图,这是一种安全风险。然后,您可以处理控制器或服务中给定的角色/数据的逻辑。

    sails: disable `blueprints actions` in production, since it creates a huge security footprint?

    【讨论】:

    • 谢谢!后续问题 - 如果我禁用蓝图路由并切换到自定义控制器/操作,那么仍然利用蓝图路由中提供的查询选项的最佳方法是什么。例如,在蓝图路由中,我可以执行以下操作: /populates=false,&elect=name,abbreviation&where=... 创建具有动态查询选项的通用路由可以让我的前端团队更有效率,并允许我们的后端 API 不那么复杂。再次感谢!
    • 在这种情况下,当今最好的解决方案可能是 GraphQL。它可以满足您的需求。
    【解决方案2】:

    我同意@mansim。但是,如果您想这样做,您必须根据要求覆盖 find 和 findOne 控制器。

    步骤如下:

    1. 创建将在“req”对象中设置权限标志的策略。
    2. 在 findOne/find 方法中从“req”中读取标志。
    3. 使用 _.omit(或任何 javascript 方法)删除您不想发送的详细信息。

    【讨论】:

    • 感谢您的帮助!后续问题,使用 _.omit 方法,数据库是否将所有数据返回给sails,然后sails 过滤掉不应该传递给前端应用程序的数据?
    • @sbenner 在控制器中你会得到数据,控制器会在过滤后返回 JSON 作为响应。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2019-03-25
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多