Ejemplo n.º 1
0
        /// <summary>
        /// 获取到用户可用module
        /// </summary>
        /// <param name="userId">用户id</param>
        /// <param name="orgId">当前组织机构</param>
        /// <param name="moduleEname">模块英文名称,如果不为空则返回该模块的所有子集,如果为空则返回所有</param>
        /// <returns>json</returns>
        public object GetUserModules(string userId, string orgId, string moduleEname)
        {
            try
            {
                List <Base_ModuleInfo> moduleList;
                //缓存Key值
                string cacheKey = userId + orgId + "_UserAuthModule";
                //判断缓存是否存在
                #region 缓存存在数据,取出缓存数据
                //缓存中存在菜单字典取出数据,如果字典中不存在该用户键值,取出数据存入
                object info = CacheHelper.GetLocalCache(cacheKey);
                if (info != null)
                {
                    moduleList = (List <Base_ModuleInfo>)info;
                }
                #endregion

                #region 缓存不存在,取出数据存入创建缓存
                else
                {
                    // 缓存中不存在菜单字典,创建字典存入缓存
                    moduleList = _authBll.GetAllowModuleByUser(userId, orgId);
                    if (moduleList.Count > 0)
                    {
                        CacheHelper.SaveLocalCache(null, TimeSpan.FromHours(_authBll.CacheHour), moduleList, cacheKey);
                    }
                    else
                    {
                        throw new PermissionLimittedException("noAuth");
                    }
                }
                #endregion

                #region 过滤结果集合
                if (moduleList != null & moduleList.Count > 0)
                {
                    //转化成json串
                    if (!string.IsNullOrEmpty(moduleEname))//如果moduleEname不为空值,代表请求某菜单下的按钮
                    {
                        Base_ModuleInfo parentObj      = moduleList.Where(op => op.EName == moduleEname).FirstOrDefault();
                        string          parentModuleId = Guid.NewGuid().ToString().ToUpper();//默认给一个新创建的Guid
                        if (parentObj != null)
                        {
                            parentModuleId = parentObj.OID; //更改Guid值
                        }
                        moduleList = moduleList.Where(op => op.Flag == 1 || op.Flag == 3 || op.Flag == 4).Where(op => op.ParentOID == parentModuleId.ToString()).OrderBy(op => op.LT).ToList();
                    }
                    else//如果moduleEname为空值,代表请求整个权限菜单
                    {
                        moduleList = moduleList.Where(op => op.Flag == 0).OrderBy(op => op.LT).ToList();
                    }
                }
                #endregion

                #region 过滤结果字段
                object        delresult;
                List <string> removeCols = new List <string>();
                removeCols.Add("Buttons");
                removeCols.Add("Orgs");
                removeCols.Add("Permissions");
                delresult = Common.NewtonJsonHelper.Deserialize <object>(Common.NewtonJsonHelper.Serialize(moduleList, removeCols), null);
                #endregion

                return(delresult);
            }
            catch (Exception err)
            {
                throw new PermissionLimittedException("noAuth", err);
            }
        }