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