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);
        }
예제 #3
0
        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 }));
        }
예제 #4
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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));
                }
            }
        }