public static int RefreshCache(string userId) { int result = 0; // 刷新用户的缓存 BaseUserEntity userEntity = BaseUserManager.GetObjectByCache(userId, true); if (userEntity != null) { // 刷新用户的登录限制 BaseUserManager.ResetIPAddressByCache(userId); BaseUserManager.ResetMACAddressByCache(userId); // 刷新组织机构缓存 BaseOrganizeManager.GetObjectByCache(userEntity.CompanyId, true); // 刷新部门缓存 BaseDepartmentManager.GetObjectByCache(userEntity.DepartmentId, true); // 2016-02-18 吉日嘎拉 刷新拒绝权限(把用户的权限放在一起方便直接移除、刷新) string key = "User:IsAuthorized:" + userId; using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.Remove(key); } // 每个子系统都可以循环一次 string[] systemCodes = BaseSystemManager.GetSystemCodes(); for (int i = 0; i < systemCodes.Length; i++) { BaseUserPermissionManager.ResetPermissionByCache(systemCodes[i], userId); } } return(result); }
public static bool IsAuthorizedByCache(string systemCode, string userId, string permissionCode) { bool result = false; using (var redisReadOnlyClient = PooledRedisHelper.GetPermissionReadOnlyClient()) { // 2016-02-18 吉日嘎拉 这样可以刷新用户权限时,可以把一个用户的权限全去掉。 string hashId = "User:IsAuthorized:" + userId; string key = systemCode + ":" + permissionCode; // 若是缓存里过期了? if (redisReadOnlyClient.HashContainsEntry(hashId, key)) { string isAuthorized = redisReadOnlyClient.GetValueFromHash(hashId, key); result = isAuthorized.Equals(true.ToString()); } else { BasePermissionManager permissionManager = new BasePermissionManager(); result = permissionManager.IsAuthorized(systemCode, userId, permissionCode); #if ReadOnlyRedis using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.SetEntryInHash(hashId, key, result.ToString()); redisClient.ExpireEntryAt(hashId, DateTime.Now.AddMinutes(20)); } #else redisReadOnlyClient.SetEntryInHash(hashId, key, result.ToString()); redisReadOnlyClient.ExpireEntryAt(hashId, DateTime.Now.AddMinutes(20)); #endif } } return(result); }
public static string[] ResetPermissionByCache(string systemCode, string roleId) { string key = "Permission:" + systemCode + ":Role:" + roleId; using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.Remove(key); } return(GetPermissionIdsByCache(systemCode, new string[] { roleId })); }
public static string[] ResetPermissionByCache(string systemCode, string organizeId) { string key = "Permission:" + systemCode + ":Organize:" + organizeId; using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.Remove(key); } return(GetPermissionIdsByCache(systemCode, organizeId)); }
private static void SetListCache(string key, List <BaseModuleEntity> list) { if (!string.IsNullOrWhiteSpace(key) && list != null) { using (var redisClient = PooledRedisHelper.GetPermissionClient()) { // 时间太长了,不太好,能缩短就再缩短一些,而且经常是会被呼叫的,所以时间设置少一些。 redisClient.Set <List <BaseModuleEntity> >(key, list, DateTime.Now.AddMinutes(10)); } } }
public static bool RemoveCache(string key) { bool result = false; if (!string.IsNullOrWhiteSpace(key)) { using (var redisClient = PooledRedisHelper.GetPermissionClient()) { result = redisClient.Remove(key); } } return(result); }
public static string[] GetPermissionIdsByCache(string systemCode, string organizeId) { string[] result = null; string key = string.Empty; key = "Permission:" + systemCode + ":Organize:" + organizeId; List <string> items = null; using (var readOnlyRedisClient = PooledRedisHelper.GetPermissionReadOnlyClient()) { HashSet <string> setItems = readOnlyRedisClient.GetAllItemsFromSet(key); if (setItems.Count == 0) { BaseOrganizePermissionManager organizePermissionManager = new Business.BaseOrganizePermissionManager(); result = organizePermissionManager.GetPermissionIds(organizeId); if (result != null) { if (result.Length > 0) { items = new List <string>(result); } else { // 2016-02-26 吉日嘎拉 这里是为了防止重复读取,数据库被拖、效率低 items = new List <string>(new string[] { string.Empty }); } #if ReadOnlyRedis using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.AddRangeToSet(key, items); redisClient.ExpireEntryAt(key, DateTime.Now.AddMinutes(20)); } #else readOnlyRedisClient.AddRangeToSet(key, items); readOnlyRedisClient.ExpireEntryAt(key, DateTime.Now.AddMinutes(20)); #endif } } else { result = setItems.ToArray(); } } return(result); }
public static string[] GetRoleIdsByCache(string systemCode, string userId, string companyId = null) { // 返回值 string[] result = null; if (!string.IsNullOrEmpty(userId)) { string key = "User:"******":" + systemCode + ":Role"; using (var readOnlyRedisClient = PooledRedisHelper.GetPermissionReadOnlyClient()) { HashSet <string> setItems = readOnlyRedisClient.GetAllItemsFromSet(key); if (setItems.Count == 0) { // 找不到数据进行数据库查询 BaseUserManager userManager = new BaseUserManager(); string[] roleIds = userManager.GetRoleIds(systemCode, userId, companyId); List <string> items = null; if (roleIds.Length > 0) { items = new List <string>(roleIds); } else { // 2016-02-26 吉日嘎拉 这里是为了防止重复读取,数据库被拖、效率低 items = new List <string>(new string[] { string.Empty }); } #if ReadOnlyRedis using (var redisClient = PooledRedisHelper.GetPermissionClient()) { redisClient.AddRangeToSet(key, items); redisClient.ExpireEntryAt(key, DateTime.Now.AddMinutes(20)); } #else readOnlyRedisClient.AddRangeToSet(key, items); readOnlyRedisClient.ExpireEntryAt(key, DateTime.Now.AddMinutes(20)); #endif } else { result = setItems.ToArray(); } } } return(result); }
private static void SetCache(string systemCode, BaseModuleEntity entity) { if (string.IsNullOrWhiteSpace(systemCode)) { systemCode = "Base"; } if (entity != null && !string.IsNullOrEmpty(entity.Id)) { string key = string.Empty; using (var redisClient = PooledRedisHelper.GetPermissionClient()) { key = systemCode + ".Module." + entity.Id.ToString(); redisClient.Set <BaseModuleEntity>(key, entity, DateTime.Now.AddMinutes(10)); key = systemCode + ".Module." + entity.Code; redisClient.Set <BaseModuleEntity>(key, entity, DateTime.Now.AddMinutes(10)); } } }