Rookey.Frame v1.0快速开发平台-用户登录

上一次介绍的了.Frame v1.0快速开发平台的整体功能 , 接下来会对各个功能点进行解析说明 , 今天给大家介绍下系统登录功能 。
用户登录
系统中基本上所有功能页面都是从后台代码拼接后返回的 , 登录页面也不例外 , 请看下图:

Rookey.Frame v1.0快速开发平台-用户登录

文章插图
接下来看下后台登录的HTML:
/// /// 获取登录页面/// /// public override string GetLoginHTML(){StringBuilder sb = new StringBuilder();sb.Append("");sb.Append("
");sb.Append("");sb.Append("
Rookey.Frame v1.0快速开发平台-用户登录

文章插图
下面为登录方法:
Rookey.Frame v1.0快速开发平台-用户登录

文章插图

Rookey.Frame v1.0快速开发平台-用户登录

文章插图

Rookey.Frame v1.0快速开发平台-用户登录

文章插图

Rookey.Frame v1.0快速开发平台-用户登录

文章插图
接下来看下后台登录处理 , 系统中基本上每个控制器都有同步和异步两个 , 不管采用哪个都可以 , 用户控制器也一样
/// /// 用户控制器(异步)/// public class UserAsyncController : AsyncController/// /// 用户控制器/// public class UserController : Controller
登录代码见下图:
Rookey.Frame v1.0快速开发平台-用户登录

文章插图

Rookey.Frame v1.0快速开发平台-用户登录

文章插图

Rookey.Frame v1.0快速开发平台-用户登录

文章插图
登录扩展
【Rookey.Frame v1.0快速开发平台-用户登录】在上一节中有一个Demo程序 , 是基于.Frame 1.0开发的一个示例应用程序.Demo , 在.Demo只需要引用相关的DLL和简单的配置即可拥有.Frame 1.0所有功能 , 同时也是完全独立的系统 , 这样框架的复用性就比较强 , 同时就要示框架扩展性比较强;对于每个系统都会缓存一些全局信息如用户信息 , 同时每个系统要求缓存的用户信息可能是不一样的 , 有的需要显示用户的部门、岗位等信息 , 有的却不需要显示 , 这时就需要系统具有对用户扩展能力才能保证框架适用于各种不同的系统 , 在.Frame 1.0框架中除了基本的用户信息类外还提供了扩展用户类 , 下面为框架的用户信息类:
/// /// 用户类/// public sealed class UserInfo{#region 当前账户/// /// 互斥锁/// private static object locker = new object();/// /// 当前账户信息/// public static UserInfo CurrentUserInfo{get{lock (locker){FormsIdentity identity = ApplicationObject.CurrentHttpContext.User.Identity as FormsIdentity;if (identity != null){string[] token = identity.Ticket.UserData.Split("___".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);//取用户基本信息UserInfo userInfo = JsonHelper.Deserialize(token[0]);if (token.Length > 1){//取用户扩展信息Type extendType = null;ICacheProvider cacheFactory = CacheFactory.GetCacheInstance(CacheProviderType.LOCALMEMORYCACHE);if (cacheFactory == null || cacheFactory.Get("UserExtendType") == null){string binPath = Globals.GetBinPath();string dllPath = string.Format(@"{0}{1}", binPath, token[2]);if (File.Exists(dllPath)){Assembly assembly = Assembly.LoadFrom(dllPath);extendType = assembly.GetTypes().Where(x => x.Name == token[3]).FirstOrDefault();if (extendType != null){cacheFactory.Set("UserExtendType", extendType); //扩展对象类型存入缓存}}}else //扩展对象类型从缓存中取{extendType = cacheFactory.Get("UserExtendType");}if (extendType != null){//反序列化用户扩展对象object obj = Globals.Deserialize(extendType, token[1]);userInfo.ExtendUserObject = obj as UserExtendBase;}}return userInfo;}return null;}}}#endregion#region 构造函数public UserInfo(){ClientBrowserWidth = 0;ClientBrowserHeight = 0;}#endregion#region 属性/// /// 用户Id/// public long UserId { get; set; }/// /// 用户名/// public string UserName { get; set; }/// /// 用户别名/// public string AliasName { get; set; }/// /// 所属组织/// public long? OrganizationId { get; set; }/// /// 客户端IP/// public string ClientIP { get; set; }/// /// 扩展用户对象/// public UserExtendBase ExtendUserObject { get; set; }#region 客户端参数/// /// 客户端浏览器可见区域宽/// public int ClientBrowserWidth { get; set; }/// /// 客户端浏览器可见区域高/// public int ClientBrowserHeight { get; set; }#endregion#endregion#region 静态方法/// /// 获取当前用户别名/// ///