/// <summary>
 /// 获取指定用户例外权限的菜单
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 public IDictionary<long, string> GetAuthorExceptionMenuDict(AuthorMenuRightExceptionEntity authorExceptionMenuEntity)
 {
     IDictionary<long, string> dictAuthorExceptionMap = new Dictionary<long, string>();
     StringBuilder sqlCommandText = new StringBuilder();
     sqlCommandText.Append("SELECT a.MenuID,m.MenuUrl FROM dbo.AuthorMenuRightException a WITH(NOLOCK),dbo.Menu m WITH(NOLOCK) WHERE a.MenuID = m.MenuID AND a.AuthorID=@AuthorID AND a.JournalID=@JournalID");
     DbCommand cmd = db.GetSqlStringCommand(sqlCommandText.ToString());
     db.AddInParameter(cmd, "@JournalID", DbType.Int64, authorExceptionMenuEntity.JournalID);
     db.AddInParameter(cmd, "@AuthorID", DbType.Int64, authorExceptionMenuEntity.AuthorID);
     long MenuID = 0;
     int MenuIDIndex = 0;
     int MenuUrlIndex = 0;
     using (IDataReader dr = db.ExecuteReader(cmd))
     {
         MenuIDIndex = dr.GetOrdinal("MenuID");
         MenuUrlIndex = dr.GetOrdinal("MenuID");
         while (dr.Read())
         {
             MenuID = WKT.Common.Utils.TypeParse.ToLong(dr[MenuIDIndex], 0);
             if (!dictAuthorExceptionMap.ContainsKey(MenuID))
             {
                 dictAuthorExceptionMap.Add(MenuID, dr[MenuUrlIndex].ToString());
             }
         }
         dr.Close();
     }
     return dictAuthorExceptionMap;
 }
 public IDictionary<long, string> GetAuthorExceptionMenu(AuthorMenuRightExceptionEntity authorExcMenu)
 {
     IDictionary<long, string> dictHaveRightMenu = new Dictionary<long, string>();
     IRoleMenuService menuRoleService = ServiceContainer.Instance.Container.Resolve<IRoleMenuService>();
     dictHaveRightMenu = menuRoleService.GetAuthorExceptionMenuDict(authorExcMenu);
     return dictHaveRightMenu;
 }
 public ExecResult SetAuthorExceptionMenuRight(AuthorMenuRightExceptionEntity authorMenuRightException)
 {
     ExecResult result = new ExecResult();
     try
     {
         IRoleMenuService roleMenuService = ServiceContainer.Instance.Container.Resolve<IRoleMenuService>();
         bool flag = roleMenuService.SetAuthorExceptionMenuRight(authorMenuRightException);
         if (flag)
         {
             result.result = EnumJsonResult.success.ToString();
             result.msg = "成功";
         }
         else
         {
             result.result = EnumJsonResult.failure.ToString();
             result.msg = "设置作者菜单权限例外失败,请确认设置信息是否正确";
         }
     }
     catch (Exception ex)
     {
         result.result = EnumJsonResult.error.ToString();
         result.msg = "设置作者菜单权限例外失败:" + ex.Message;
     }
     return result;
 }
        /// <summary>
        /// 获取菜单列表,带有权限标示
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public IList<TreeModel> GetHaveRightMenuAjaxByRole(RoleMenuQuery queryRoleMenu)
        {
            HttpClientHelper clientHelper = new HttpClientHelper();

            // 给指定的作者设置了例外的菜单
            IDictionary<long, string> dictExceptionRightMenu = new Dictionary<long, string>();
            if (queryRoleMenu.AuthorID != null)
            {
                AuthorMenuRightExceptionEntity authorExecEntity = new AuthorMenuRightExceptionEntity();
                authorExecEntity.AuthorID = queryRoleMenu.AuthorID.Value;
                authorExecEntity.JournalID = queryRoleMenu.JournalID;
                dictExceptionRightMenu = clientHelper.PostAuth<IDictionary<long, string>, AuthorMenuRightExceptionEntity>(GetAPIUrl(APIConstant.SYSGETAUTHOREXCEPTIONRIGHTMENU), authorExecEntity);
            }

            IList<MenuEntity> listHaveRightMenuList = clientHelper.Post<IList<MenuEntity>, RoleMenuQuery>(GetAPIUrl(APIConstant.SYSGETHAVERIGHTMENULIST), queryRoleMenu);
            IList<TreeModel> listResult = new List<TreeModel>();
            if (listHaveRightMenuList != null)
            {
                IList<MenuEntity> listRoot = listHaveRightMenuList.Where(item => item.PMenuID == 0).ToList<MenuEntity>();
                TreeModel treeNode = null;
                foreach (MenuEntity item in listRoot)
                {
                    treeNode = new TreeModel();
                    treeNode.key = item.MenuID.ToString();
                    treeNode.text = item.MenuName;
                    treeNode.url = SiteConfig.RootPath + item.MenuUrl;
                    treeNode.icon = SiteConfig.RootPath + item.IconUrl;
                    treeNode.isexpand = queryRoleMenu.IsExpend;
                    treeNode.ischecked = dictExceptionRightMenu.ContainsKey(item.MenuID) ? false : true;

                    IList<MenuEntity> listChild = listHaveRightMenuList.Where(p => p.PMenuID == item.MenuID).ToList<MenuEntity>();
                    if (listChild != null)
                    {
                        // 二级
                        foreach (MenuEntity itemChild in listChild)
                        {

                            TreeModel treeChildNode = new TreeModel();
                            treeChildNode.key = itemChild.MenuID.ToString();
                            treeChildNode.text = itemChild.MenuName;
                            treeChildNode.url = SiteConfig.RootPath + itemChild.MenuUrl;
                            treeChildNode.icon = SiteConfig.RootPath + itemChild.IconUrl;
                            treeChildNode.isexpand = queryRoleMenu.IsExpend;
                            treeChildNode.ischecked = dictExceptionRightMenu.ContainsKey(itemChild.MenuID) ? false : true;
                            treeNode.children.Add(treeChildNode);
                            // 三级
                            IList<MenuEntity> lastListChild = listHaveRightMenuList.Where(p => p.PMenuID == itemChild.MenuID).ToList<MenuEntity>();
                            foreach (MenuEntity lastChild in lastListChild)
                            {

                                TreeModel treeLastNode = new TreeModel();
                                treeLastNode.key = lastChild.MenuID.ToString();
                                treeLastNode.text = lastChild.MenuName;
                                treeLastNode.url = SiteConfig.RootPath + lastChild.MenuUrl;
                                treeLastNode.icon = SiteConfig.RootPath + lastChild.IconUrl;
                                treeLastNode.isexpand = queryRoleMenu.IsExpend;
                                treeLastNode.ischecked = dictExceptionRightMenu.ContainsKey(lastChild.MenuID) ? false : true;
                                treeChildNode.children.Add(treeLastNode);
                            }
                        }
                    }
                    listResult.Add(treeNode);
                }
            }
            return listResult;
        }
        /// <summary>
        /// 获取菜单列表,带有权限标示
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public IList<TreeModel> GetHaveRightMenu(RoleMenuQuery queryRoleMenu)
        {
            if (queryRoleMenu.GroupID == 2)
            {
                MenuQuery query = new MenuQuery();
                query.JournalID = queryRoleMenu.JournalID;
                query.GroupID = 2;
                query.Status = 1;
                return GetTreeNodeList(query);
            }

            # region 找到内容菜单,添加栏目列表

            Func<IList<TreeModel>> funcGetSiteChanneNodes = () =>
            {
                IList<TreeModel> channelTreeList = new List<TreeModel>();
                SiteChannelQuery channelQuery = new SiteChannelQuery();
                channelQuery.JournalID = queryRoleMenu.JournalID;
                channelQuery.Status = 1;
                SiteConfigFacadeAPIService siteConfigAPIService = new SiteConfigFacadeAPIService();
                channelTreeList = siteConfigAPIService.GetSiteChannelTreeList(channelQuery,true);
                TreeModel root = channelTreeList.Single(p => p.Id == 0);
                return root.children;
            };

            # endregion

            IList<TreeModel> listResult = new List<TreeModel>();

            HttpClientHelper clientHelper = new HttpClientHelper();

            // 给指定的作者设置了例外的菜单
            IDictionary<long, string> dictExceptionRightMenu = new Dictionary<long, string>();
            if (queryRoleMenu.AuthorID != null)
            {
                AuthorMenuRightExceptionEntity authorExecEntity = new AuthorMenuRightExceptionEntity();
                authorExecEntity.AuthorID = queryRoleMenu.AuthorID.Value;
                authorExecEntity.JournalID = queryRoleMenu.JournalID;
                dictExceptionRightMenu = clientHelper.PostAuth<IDictionary<long, string>, AuthorMenuRightExceptionEntity>(GetAPIUrl(APIConstant.SYSGETAUTHOREXCEPTIONRIGHTMENU), authorExecEntity);
            }
            IList<MenuEntity> listHaveRightMenuList = clientHelper.Post<IList<MenuEntity>, RoleMenuQuery>(GetAPIUrl(APIConstant.SYSGETHAVERIGHTMENULIST), queryRoleMenu);

            if (listHaveRightMenuList != null)
            {
                IList<MenuEntity> listRoot = listHaveRightMenuList.Where(item => item.PMenuID == 0).ToList<MenuEntity>();
                TreeModel treeNode = null;
                foreach (MenuEntity item in listRoot)
                {
                    if (!dictExceptionRightMenu.ContainsKey(item.MenuID))
                    {
                        bool first = true;

                        treeNode = new TreeModel();
                        treeNode.key = item.MenuID.ToString();
                        treeNode.text = item.MenuName;
                        treeNode.url = SiteConfig.RootPath + item.MenuUrl;
                        treeNode.icon = SiteConfig.RootPath + item.IconUrl;
                        treeNode.isexpand = queryRoleMenu.IsExpend;

                        IList<MenuEntity> listChild = listHaveRightMenuList.Where(p => p.PMenuID == item.MenuID).ToList<MenuEntity>();
                        if (listChild != null)
                        {
                            treeNode.isexpand = (first != queryRoleMenu.IsExpend) && first ? first : queryRoleMenu.IsExpend;
                            // 二级
                            foreach (MenuEntity itemChild in listChild)
                            {
                                if (!dictExceptionRightMenu.ContainsKey(itemChild.MenuID))
                                {
                                    TreeModel treeChildNode = new TreeModel();
                                    treeChildNode.key = itemChild.MenuID.ToString();
                                    treeChildNode.text = itemChild.MenuName;
                                    treeChildNode.url = SiteConfig.RootPath + itemChild.MenuUrl;
                                    treeChildNode.icon = SiteConfig.RootPath + itemChild.IconUrl;
                                    treeChildNode.isexpand = queryRoleMenu.IsExpend;
                                    // 如果是网站内容管理节点,则载入站点栏目设置
                                    if (itemChild.IsContentMenu)
                                    {
                                        treeChildNode.children = funcGetSiteChanneNodes();
                                        treeNode.children.Add(treeChildNode);
                                    }
                                    else
                                    {
                                        treeNode.children.Add(treeChildNode);
                                        // 三级
                                        IList<MenuEntity> lastListChild = listHaveRightMenuList.Where(p => p.PMenuID == itemChild.MenuID).ToList<MenuEntity>();
                                        foreach (MenuEntity lastChild in lastListChild)
                                        {
                                            if (!dictExceptionRightMenu.ContainsKey(lastChild.MenuID))
                                            {
                                                TreeModel treeLastNode = new TreeModel();
                                                treeLastNode.key = lastChild.MenuID.ToString();
                                                treeLastNode.text = lastChild.MenuName;
                                                treeLastNode.url = SiteConfig.RootPath + lastChild.MenuUrl;
                                                treeLastNode.icon = SiteConfig.RootPath + lastChild.IconUrl;
                                                treeLastNode.isexpand = queryRoleMenu.IsExpend;
                                                treeChildNode.children.Add(treeLastNode);
                                            }
                                        }
                                    }
                                }
                            }
                            first = false;
                        }
                        listResult.Add(treeNode);
                    }
                }
            }
            return listResult;
        }
 /// <summary>
 /// 给指定角色内的用户设置例外菜单权限
 /// </summary>
 /// <param name="authorExceptionRight"></param>
 /// <returns></returns>
 public bool SetAuthorExceptionMenuRight(AuthorMenuRightExceptionEntity authorExceptionRight)
 {
     return RoleMenuDataAccess.Instance.SetAuthorExceptionMenuRight(authorExceptionRight);
 }
 /// <summary>
 /// 获取指定用户例外权限的菜单
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 public IDictionary<long, string> GetAuthorExceptionMenuDict(AuthorMenuRightExceptionEntity authorExceptionMenuEntity)
 {
     return RoleMenuDataAccess.Instance.GetAuthorExceptionMenuDict(authorExceptionMenuEntity);
 }
 /// <summary>
 /// 获取指定用户例外权限的菜单
 /// </summary>
 /// <param name="query"></param>
 /// <returns></returns>
 public IDictionary<long, string> GetAuthorExceptionMenuDict(AuthorMenuRightExceptionEntity authorExceptionMenuEntity)
 {
     return RoleMenuBusProvider.GetAuthorExceptionMenuDict(authorExceptionMenuEntity);
 }
 /// <summary>
 /// 给指定角色内的用户设置例外菜单权限
 /// </summary>
 /// <param name="authorExceptionRight"></param>
 /// <returns></returns>
 public bool SetAuthorExceptionMenuRight(AuthorMenuRightExceptionEntity authorExceptionRight)
 {
     return RoleMenuBusProvider.SetAuthorExceptionMenuRight(authorExceptionRight);
 }
        public ActionResult SetAurhorException(long RoleID,long[] AuthorIDArray, long[] IDAarry)
        {
            ExecResult execResult = new ExecResult();

            try
            {
                foreach (long AuthorID in AuthorIDArray)
                {
                    AuthorMenuRightExceptionEntity authorMenuRightExceptionEntity = new AuthorMenuRightExceptionEntity();
                    authorMenuRightExceptionEntity.AuthorID = AuthorID;
                    authorMenuRightExceptionEntity.MenuIDList = IDAarry.ToList<long>();
                    authorMenuRightExceptionEntity.JournalID = JournalID;
                    authorMenuRightExceptionEntity.RoleID = RoleID;
                    IAuthorFacadeService authorService = ServiceContainer.Instance.Container.Resolve<IAuthorFacadeService>();
                    execResult = authorService.SetAurhorMenuRightException(authorMenuRightExceptionEntity);
                    if (execResult.result == EnumJsonResult.error.ToString() || execResult.result == EnumJsonResult.failure.ToString())
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                execResult.result = EnumJsonResult.error.ToString();
                execResult.msg = "设置用户菜单权限例外时现异常:" + ex.Message;
                WKT.Log.LogProvider.Instance.Error("设置用户菜单权限例外时现异常:" + ex.Message);
            }

            return Content(JsonConvert.SerializeObject(execResult));
        }