【问题标题】:Can i give a role only permissions to update a column by +1?我可以只授予角色通过 +1 更新列的权限吗?
【发布时间】:2021-08-12 05:28:46
【问题描述】:

我在 Postgres 中使用 Hasura

是否可以允许用户将表中的列只增加一而不让他们更改整数?

例如,我害怕让用户“更新”“喜欢”

mutation update_likes {
  update_article(
    where: {id: {_eq: 1}},
    _inc: {likes: 1}
  ) {
    affected_rows
    returning {
      id
      likes
    }
  }
}

我害怕用户将能够修改查询并将喜欢更新为他想要的数字。

谢谢!

P.S 代码是来自 hasura 官方网站的示例: https://hasura.io/blog/updating-data-using-mutations-on-hasura-graphql-87c7e22503bc/

【问题讨论】:

  • 不要简单地通过用户输入来改变数字的值,而是简单地增加现有值。查看您的代码,您需要在 graphql 之外增加值才能进行自定义处理。至于用户角色的不同增量,那么只需获取他们的角色并有条件地允许他们根据他们的角色类型“incrementBy”。
  • 在这种类型的用例中,我认为你应该考虑使用 hasura 动作。

标签: graphql hasura


【解决方案1】:

我最终使用了 postgres 函数和触发器来实现这一点。

我希望它对尝试做同样事情的人有用:

CREATE OR REPLACE FUNCTION inc_entries()
    RETURNS trigger AS $BODY$
    BEGIN
    -- We increment the total entries on giveaway id
    UPDATE giveaways SET total_entries = total_entries + 1 WHERE id = NEW.giveaway;
    -- We increment the entries on current user id
    UPDATE participants SET entries = entries + 1 WHERE id = NEW.user;
    RETURN NEW;
    END;
    $BODY$ LANGUAGE plpgsql;

CREATE TRIGGER inc_entries BEFORE INSERT ON "entries" FOR EACH ROW EXECUTE PROCEDURE inc_entries();

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2019-04-13
    • 2018-10-11
    • 1970-01-01
    • 2021-11-04
    • 2017-04-07
    • 2018-11-12
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多