librelist archives

« back to archive

Bamboo的用户系统的一些改动

Bamboo的用户系统的一些改动

From:
Tang Daogang
Date:
2011-08-01 @ 08:20
今天,刚子提出了一个使用用户系统的场合:在同一个应用中,有两个模型(比如:AAUser,

BBUser)都继承自User模型,这个时候,两个模型存储在redis中的时候,默认都按User:这个前缀存储。这本是为了制作通用用户系统的设计。但同时也有一个缺点,就是,AAUser:all()会把BBUser的实例也取出来,然而,AAUser与BBUser是应该要区分的,合在一起要多别扭有多别扭。这个问题应该严肃对待。

基于这种要求,今天我做了些改动,实现了如下效果:

   1. 用户AAUser的实例aa 登录的时候,在Session中,写入如下字段:user_id,值为"AAUser:10",而之前为"10";
   2. 在Session中,根据"AAUser:10"获取到模型AAUser(需要AAUser在应用中注册),并使用getById() 获取到实例
   aa,将这个aa实例赋予req.user做引用;
   3. 在上层应用代码中,如果req.user不为nil,则req.user本身已经是一个对象,且正是你估计的那个模型。


好了,现在我们给Bamboo的用户模型的存储增加了一种选择性:允许是否选择加入通用用户系统,而这个选择的通道正是在定义模型时__name变量是否指定为"User"。对于不加入通用用户系统的模型,__name应该写此模型的名称,比如“AAUser”。如果写"User",则表明是加入通用用户系统。


目前已经能正确处理上述两种选择了。现在的登录能够准确找到您用的哪种用户登录,并且,req.user中已经包含了您所需的,所以,不再需要AAUser:getFromReq()及AAUser:pick()了。





-- 
Nothing is impossible.