2017-05-01 25 views
2

看起来好像没有方法可以从IAuthRepository中检索列表或者我错过了什么?获取存储在IAuthRepository中的所有用户列表

我使用Redis实现,所以我需要一些哈希或别名键来做一些过滤。任何提示如何在不实现所有这些接口的自定义版本的情况下做到这一点?

我已经实现了我自己的IUserAuth版本,并且有一些我需要的新的道具,我喜欢搜索。那么最好的地方在哪里:

  1. 创建一些别名/哈希以快速访问具有特定属性的用户。我想这需要一些特殊的实施CreateUserAuth(...)方法的,但不知道从哪里开始不破坏其他的东西...
  2. 有什么办法可以快速扩展Redis的实施IAuthRepository来获得
    • 用户与特定标准匹配的
    • 列表(下1存储的密钥)的所有用户的列表

UPDATE:

问题1已解决。创建了我自己的回购并将其注入到服务中。在那里,我可以简单地做:

using (var redis = RedisManager.GetClient()) 
{ 
    var appUsers = redis.As<IUserAuth>(); 
    foundUsers = (List<IUserAuth>)appUsers.GetAll(); 
} 

仍然在那里建立无“破坏”等功能的新用户时,我可以添加其他密钥的问题。

回答

1

将自定义属性添加到User Auth Info的最简单方法是将其存储在UserAuth Meta字典中。

您也可以选择通过扩展USERAUTH表来使用自己的自定义USERAUTH/USERAUTH明细表,例如:

public class CustomUserAuth : UserAuth 
{ 
    public string MyProperty { get; set; } 
} 

然后注册一个使用您的自定义表而不是一个Redis的验证库,如:

container.Register<IAuthRepository>(c => 
    new RedisAuthRepository<CustomUserAuth,UserAuthDetails>(
     c.Resolve<IRedisClientsManager>()); 
+0

我大概没有清楚地表达出问题所在。我需要一些东西来搜索一个属性。假设我在'SYSTEM','SERVICE','USER'的值中添加一个道具'AccountType'。要获取所有'USER'帐户,我需要像'hash:UserAuth:AccountTypes> UserId'这样的东西来轻松地检索USER类型的所有帐号。问题是,在哪里添加这个散列。 – ThommyB

+0

@ThommyB Redis不适合查询,因为您需要维护自己的自定义索引,您可以在[OnRegistered或OnAuthenticated Session或Auth Event]中为不同帐户类型的用户填充集合(http:// docs .servicestack.net /会话)。我也有一个脚本,通过浏览每个用户并在他们各自的AccountType索引中添加他们的id来重新创建索引集。 – mythz

+0

是的你的权利,它的痛苦,如果你有超过两个或三个道具来查询。我使用MongoDB很多,并且从Server V3.x和C#驱动程序2.x开始我真的很喜欢它! MongoDB AuthRepository提供程序实现是否是一个更好的选择,它是否具有所有您提供的RDBMS实现的功能?我还需要一个真正的“角色”对象,其中包含有关角色有效的应用程序的其他信息,而不仅仅是“列表”属性。 – ThommyB

相关问题