using System; using System.Collections.Generic; using System.Text; using NOVA.DevFx.Security.Model; using NOVA.DevFx.Cache; using System.Collections; using NOVA.DevFx.OnlineManagement; namespace NOVA.DevFx.Security.Handler { /// /// 系统用户数据处理类 /// public class UserHandler { private static string m_CachePrefix = "cache"; private static string m_UserCacheName = "user"; private static string m_PermissionCacheName = "permission"; private static string m_userCacher = "userCacher"; /// /// 获取用户缓存器名称 /// public static string UserCacherName { get { return m_userCacher; } } /// /// 系统用户信息缓存器 /// public static ICache UserCacher { get { ICache cacher = CacheHelper.GetCache(m_userCacher); if (cacher == null) return CacheHelper.CreateCache(m_userCacher); else return cacher; } } #region 用户资料 /// /// 根据用户ID获取用户资料(从缓存中获取) /// /// 用户ID /// public static User GetUser(int UserID) { string CacheKey = string.Format("{0}-{1}-{2}", m_CachePrefix,m_UserCacheName, UserID); if (UserCacher[CacheKey] != null) { return (User)UserCacher[CacheKey]; } else { //根据用户编码获取实体信息 User sUT = DataHandler.UserHandler.GetItem(UserID); //添加用户信息到缓存中 UserCacher.Add(CacheKey, sUT); return sUT; } } /// /// 根据用户登陆名,获取用户资料 /// /// 用户名 /// 用户实体类 public static User GetUser(string u_Name) { return DataHandler.UserHandler.GetItemByName(u_Name); } /// /// 根据用户ID移除用户资料Cache /// /// public static void RemoveUserCache(int UserID) { UserCacher.Remove(string.Format("{0}-{1}-{2}", m_CachePrefix, m_UserCacheName, UserID)); } #endregion #region 用户权限 /// /// 根据用户ID,模块ID判断用户是否拥有指定模块权限 /// /// 用户ID /// 应用ID /// public static bool CheckPermission(int UserID, int ModuleId) { bool bBool = false; //获取用户权限 Hashtable UserPermission = GetUserPermission(UserID); if (UserPermission.Count > 0) { //判断当前用户是否有当前模块权限 if (UserPermission.ContainsKey(ModuleId)) { bBool = true; } } return bBool; } /// /// 根据用户ID,模块ID,要检测权限数值 /// /// 用户ID /// 应用ID /// PageCode /// 权限值 /// public static bool CheckPermission(int UserID, int ModuleId, int PermissionId) { bool bBool = false; //获取用户权限列表 Hashtable UserPermission = GetUserPermission(UserID); if (UserPermission.Count > 0) { string Key = string.Format("{0}-{1}", ModuleId, PermissionId); if (UserPermission.ContainsKey(Key)) { bBool = true; } } return bBool; } /// /// 获取用户权限Hashtable /// /// 用户ID /// private static Hashtable GetUserPermission(int UserID) { string Key = string.Format("{1}-{2}-{0}", UserID, m_CachePrefix, m_PermissionCacheName); if (UserCacher[Key] != null) { return (Hashtable)UserCacher[Key]; } else { //从数据库中加载用户的所有权限信息 Hashtable _Temp = GetUserPermissionFromDataBase(UserID); //添加权限信息到缓存中 UserCacher.Add(Key, _Temp); return _Temp; } } /// /// 移除用户权限Cache /// /// 用户ID public static void RemoveUserPermissionCache(int UserID) { UserCacher.Remove(string.Format("{1}-{2}-{0}", UserID, m_CachePrefix, m_PermissionCacheName)); } /// /// 移除某个角色的用户权限Cache /// /// public static void RemoveRolePermissionCache(int RoleID) { //获取属于该角色的所有用户列表 List lst = DataHandler.UserHandler.GetUserListByRoleID(RoleID); //循环移除所有用户的权限缓存 foreach (User var in lst) { RemoveUserPermissionCache(var.id); } } /// /// 根据用户ID,获取用户模块权限列表 /// /// 用户ID /// private static Hashtable GetUserPermissionFromDataBase(int UserID) { Hashtable hsPermissionListCache = new Hashtable(); List lsRolePermission = new List(); //获取指定用户所拥有的所有角色 List lst = DataHandler.UserRoleHandler.GetRoleListByUserID(UserID); foreach (User_In_Role var in lst) { //获取每个角色的权限 lsRolePermission = GetRolesPermission(var.role_id); //循环添加所有用户权限 for (int i = 0; i < lsRolePermission.Count; i++) { string Key = string.Format("{0}-{1}", lsRolePermission[i].module_id, lsRolePermission[i].permission_id); if (!hsPermissionListCache.ContainsKey(Key)) { hsPermissionListCache.Add(Key, lsRolePermission[i]); } } } return hsPermissionListCache; } /// /// 根据用户角色ID,获取权限列表 /// /// 角色ID /// 权限列表 private static List GetRolesPermission(int RoleID) { List lst = DataHandler.RolePermissionHandler.GetPermissionListByRoleID(RoleID); return lst; } #endregion ///// ///// 获取当前登陆用户信息 ///// //public static User CurrentUser //{ // get // { // return GetUser(Authenticator.UserID); // } //} } }