在 WSO2 API 管理器中以两种方式创建新用户。
- 通过 API Manager 的管理控制台
- 自行注册
在第一种方式中,您可以在创建用户时分配角色。
对于自行注册的用户,已经存在 handler 将内部/订阅者角色分配给具有内部/自行注册角色的新用户。
要分配角色:内部/订阅者给新用户或现有角色未分配用户,我们有以下两个选项:
选项 1
如果您希望使用管理控制台将订阅者角色分配给未分配用户的现有角色,那么您可以转到那里的角色列表页面:
有一个选项:Assign Users 在与内部/订阅者角色相关的角色列表中的操作列中。
它将列出所有未分配内部/订阅者角色的用户,并且有多个选项可以一次选择多个用户并分配角色。
选项 2
您可以编写自定义用户操作事件侦听器并将其添加为 OSGI 包。
在这种情况下,您可以参考此WSO2 IS doc 并编写一个扩展 AbstractIdentityUserOperationEventListener 的事件侦听器。
这个示例代码对我有用:
public class SampleEventListener extends AbstractIdentityUserOperationEventListener {
private static final String EVENT_LISTENER_TYPE = "org.wso2.carbon.user.core.listener.UserOperationEventListener";
private static final String SUBSCRIBER_ROLE = "Internal/subscriber";
@Override
public boolean doPreAddUser(String userName, Object credential, String[] roleList, Map<String, String> claims,
String profile, UserStoreManager userStoreManager) throws UserStoreException {
List<String> roles = new ArrayList<>(Arrays.asList(roleList));
if (!roles.isEmpty() && !roles.contains(SUBSCRIBER_ROLE)) {
userStoreManager.updateRoleListOfUser(userName, new String[]{}, new String[] { SUBSCRIBER_ROLE });
}
return true;
}
这将为每个新添加的用户添加内部/订阅者角色,如果用户在添加新用户的过程中没有该角色。
Here 提到了多个接口,您可以使用这些接口实现用户存储侦听器。
对于 OSGI 包的创建和部署过程,您可以找到this sample GitHub project。您可以按照那里提到的步骤将构建的 jar 文件复制到目录<APIM_HOME>/repository/components/dropins/。 (由于 WSO2 API Manager 也使用 WSO2 IS 组件,您可以按照README 中提到的相同步骤使用 API Manger)
您可以通过this blog post 了解有关 OSGI 捆绑的完整信息。