本次是在原有ApiTemplate项目之上,增加一个用户登录权限控制模块,用于验证ApiTemplate项目在面对一些简单问题时,如何抽象并支持未来的扩展。用户登录权限控制模块看上去很简单,但由于业余时间总是有限的。所以借助此机会实践一次用户敏捷开发。首先拆分模块,本次只实现用户登录和登出。
apitemplate项目地址:https://github.com/cqhaibin/ApiTemplate
像本次就只列出了任务的期限,而没有列出每个子阶段的期限,如:一个需求必须要经过需求分析、模块设计、代码实现等阶段。这些子阶段也需要给出具体的期限。
实现根据用户名的登录、登出接口。
接口统一使用rest api, 实现登录、登出两个接口
{ isSuccess<bool>, //请求是否成功 resultCode<number>, //请求状态Code 200006:账号不存在;200001:账号被禁用;200002:密码错误 data<object>:{ token<string> //登录成功后,返回的token user<object>:{ //用户对象 realName<string>, //用户名 userName<string>, //登录名 id<int>, //用户Id config<string>, //用户扩展信息,json字符串 mobilePhone<string>, //电话号码 } } }
{
userName<string>, //用户名
password<string> //密码
}
{
isSuccess<bool>, //请求是否成功
resultCode<number>, //请求状态Code
}
class IUserEntity{ UserInfo UserInfo { get; } string Token { get; } /// <summary> /// 客户端信息 /// </summary> RequestClientInfo ClientInfo { get; } DateTime LoginTime { get; } DateTime ExpiredTime { get; } /// <summary> /// 用户登录配置 /// </summary> UserAuthOption Option { get; } TokenEntity GetTokenEntity(); }
class IOnlineUserMgr{
/// <summary>
/// 将用户添加到在线用户列表,此方法需要对登入信息持久化
/// </summary>
/// <param name="entity"></param>
void Add(IUserEntity entity);
/// <summary>
/// 根据token移除对应的用户,此方法需要对登出信息持久化
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
bool Remove(string token);
/// <summary>
/// 根据用户Id移除用户,此方法需要对登出信息持久化
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
bool Remove(int id);
/// <summary>
/// 从持久化层恢复在线用户
/// </summary>
void Load();
/// <summary>
/// 获取所有在线用户
/// </summary>
IList<IUserEntity> GetAll();
IUserEntity Get(int userId);
}