[电子商务网站设计] 之 Passport

从所承担的功能上来说,Passport 是一个系统级别的服务,而不仅仅用来进行用户管理。对于任何一个网站而言,随着业务的发展,多业务的网站群整合不可避免,那么作为整合的通道之一,用户数据共享自然就是一个关键点。

Passport 在设计之初就应该独立于业务逻辑。一般情况下它担负如下任务:

1. 用户统一注册、管理。提供页面或者相关接口供其它业务站点调用。
2. 单点登录 (Single Sign On)。为多个站点共享登录票据,实现站点群之间的无限漫游。
3. 提供用户角色管理。这个角色后台管理员角色有所不同,它无需权限管理,仅用来区分用户的 VIP 级别。
4. 用户活跃度跟踪管理。定期清理和提醒睡眠账号对于网站而言也是非常重要的。

下图是一个简单的 Passport 架构设计

uploads/200608/21_153515_passport.png


1. 将用户分为 UserBase、User 两个类,因为多数时候我们只需获取用户基本信息即可。
2. Passport、Roles 采取静态类设计,封装了所需的全部方法。
3. Passport.Web 封装 SSO 的相关操作。
4. 采取 IoC 体系,便于升级和数据库迁移。

另外,在用户标识设计上,建议采取"内部ID"和"外部ID"两种方式。

如:
public class UserBase
{
  public Guid Id { get; }
  
  public string Username { get; set; }
}

"内部ID"采取GUID表示其唯一性,由系统注册用户账号时自动生成,所有与Passport关联的业务逻辑都是用该ID作为用户唯一识别符号。而"外部ID"—— Username,则是"内部ID"的一个助记符,一般是用户注册时输入的个人用户名,多使用电子邮件账号。用户使用"外部ID"进行注册、登录、找回密码等操作。如此设计的好处就是用户可以随时更改其 Username。在由于离职等原因造成用户更换邮箱时,能更换新的用户名就显得设计上的人性化了。当然,在数据库中Username也应该是唯一,不可重复的。
posted @ 2008-09-30 09:04  wenanry  阅读(1097)  评论(0编辑  收藏  举报