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