1

我创建了一个 API,其中包含与每个“用户”相关的许多信息。默认情况下,“用户”只有一个包含电子邮件、密码、用户名和语言的模型。因此,我创建了一个“UserInfo”API/模型,其中包含名字、姓氏、年龄、地址等。我想让非管理员用户访问它自己的“UserInfo”数据,这意味着用户将能够使用 localhost/userinfo/:id 访问 api。但是每个用户只能被授权调用它自己的 ID 而不是其他用户的 ID。如何为最终用户“角色”创建这样的“政策”/限制?希望我已经足够清楚了。我的问题可能很琐碎。

4

2 回答 2

1

在认证后的 Strapi 中,ctx.state.user.id 被分配了用户实体,因此您可以使用它来验证。

您可以创建一个策略

module.exports = async (ctx, next) => {
  const { params } = ctx;
  if (ctx.state.user.id === params.id) {
    return next();
  } else {
    return ctx.badRequest(
      'Not Authorized'
    );
  }
};

并在路由文件中设置策略

{
      "method": "GET",
      "path": "/userinfo/:id",
      "handler": "userinfo.findOne",
      "config": {
        "policies": [ 
            "admin::hasPermissions",
"isOwner"]
      }
    }

或者自定义编写 findOne 方法

async findOne(ctx) {
  const { query, params } = ctx;
  if (ctx.state.user.id === params.id) {
    const entity = await service.findOne({ ...query, id: params.id });
  }
  else {
    return ctx.badRequest(
      'Not Authorized'
    )
  }

  return sanitize(entity);
},
于 2021-03-30T09:15:26.470 回答
1

您将不得不使用角色的权限或策略。我认为这个问题真的很接近你想要的:https ://github.com/strapi/strapi/issues/624

于 2018-02-27T14:45:42.610 回答