如何限制用户对其自己的用户API的访问权限:仅限ID?

时间:2018-02-26 20:12:27

标签: strapi

我创建了一个API,其中包含与每个" User"相关的许多信息。默认情况下"用户"只有一个包含电子邮件,密码,用户名和语言的模型。 所以我创建了一个" UserInfo" API / Model包含firstName,lastName,age,address等。 我想让非管理员用户访问它自己的用户信息"数据,这意味着用户可以使用localhost / userinfo /:id访问api。但每个用户只能获得授权,可以使用自己的ID而不是其他用户ID。 如何为最终用户"角色"?创建这样一个"策略" /限制? 希望我已经足够清楚了。我的问题可能很简单。

2 个答案:

答案 0 :(得分:1)

您必须使用角色的权限或政策。 我认为这个问题非常接近你想要的问题:https://github.com/strapi/strapi/issues/624

答案 1 :(得分: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);
},