要实现此策略,您可以使用AWS Cognito的Lambda触发器,在用户池中创建一个前置触发器,在管理员查看用户列表之前验证他们的权限并过滤结果。
以下是一个示例前置触发器Lambda函数,它将检查调用者是否具有管理Cognito用户的权限,并且仅在用户池中包含他们自己创建的用户时才返回。
'use strict'
exports.handler = (event, context, callback) => {
const userID = event.userName;
const userPoolID = event.userPoolId;
// Check if user is an admin
if (event.requestContext.authorizer.claims['cognito:groups'] && event.requestContext.authorizer.claims['cognito:groups'].includes('Admin')) {
// Verify admin only views own created users
event.response = {
claimsOverrideDetails: {
claimsToAddOrOverride: {
'custom:allowedUsers': userID
}
}
};
callback(null, event);
}
else {
// Not an admin, return only own created users
event.response = {
claimsOverrideDetails: {
claimsToAddOrOverride: {
'custom:allowedUsers': userID
},
claimsToSuppress: [
'custom:createdBy'
]
}
};
callback(null, event);
}
};
在此示例中,管理员用户将包含其自己创建的所有用户,并且非管理员用户将仅包含其自己创建的用户。要实现此策略,请确保在用户池中启用Lambda触发器,并将其配置为启用前置触发器。