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);
// }
//}
}
}