6.7. 添加/删除用户和查询功能接口
我们还没有通过我们的例子完成某个操作,即允许其添加和删除用户或更改密码。在我们的示例中定义的用户在管理控制台中不可查询或查看。要添加这些增强功能,我们的示例供应商必须实施 UserQueryMethodsProvider (或 UserQueryProvider)和 UserRegistrationProvider 接口。
6.7.1. 实施 UserRegistrationProvider 复制链接链接已复制到粘贴板!
使用此流程实施添加和从特定存储中删除用户,我们必须首先将属性文件保存到磁盘。
PropertyFileUserStorageProvider
然后,addUser () 和 removeUser () 方法的实现变得简单。
PropertyFileUserStorageProvider
请注意,在添加用户时,我们将属性映射的密码值设置为 UNSET_PASSWORD。我们这样做,因为我们在属性值中没有属性的 null 值。我们还必须修改 CredentialInputValidator 方法来反映这一点。
如果供应商实现了 UserRegistrationProvider 接口,则会调用 addUser () 方法。如果您的供应商有一个配置开关来关闭添加用户,从此方法返回 null 将跳过该提供程序并调用下一个提供程序。
PropertyFileUserStorageProvider
由于我们现在可以保存我们的属性文件,因此允许密码更新也很有意义。
PropertyFileUserStorageProvider
现在,我们可以实施禁用密码。
PropertyFileUserStorageProvider
实施这些方法后,您现在可以在管理控制台中更改和禁用用户的密码。
6.7.2. 实施 UserQueryProvider 复制链接链接已复制到粘贴板!
UserQueryProvider 是 UserQueryMethodsProvider 和 UserCountMethodsProvider 的组合。如果没有实现 UserQueryMethodsProvider,则管理控制台将无法查看和管理我们示例供应商加载的用户。让我们来看看这个接口。
PropertyFileUserStorageProvider
searchForUserStream () 的第一个声明采用 String 参数。在本例中,参数代表您要搜索的用户名。此字符串可以是子字符串,它解释了执行搜索时 String.contains () 方法的选择。请注意,使用 * 表示请求所有用户的列表。该方法迭代属性文件的关键集合,委派为 getUserByUsername () 来加载用户。请注意,我们根据 firstResult 和 maxResults 参数索引此调用。如果您的外部存储不支持分页,则必须执行类似的逻辑。
PropertyFileUserStorageProvider
使用 Map 参数的 searchForUserStream () 方法可以根据名字、姓氏、用户名和电子邮件搜索用户。仅存储用户名,因此搜索仅基于用户名,除了 Map 参数不包含 username 属性时除外。在这种情况下,所有用户都会被返回。在这种情况下,使用 searchForUserStream (realm, search, firstResult, maxResults)。
PropertyFileUserStorageProvider
组或属性不会被存储,因此其他方法会返回空流。