Bladeren bron

增加权限控制

TANG JIANG 2 jaren geleden
bovenliggende
commit
66ff1226bf

+ 14 - 0
src/Hotline.Api/Controllers/KnowledgeApplyController.cs

@@ -1,4 +1,5 @@
 using Hotline.KnowledgeBase;
+using Hotline.Permissions;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Knowledge;
@@ -44,6 +45,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeApplyAdd)]
         [HttpPost("apply-add")]
         public async Task<string> ApplyAdd([FromBody] KnowledgeApplyDto dto)
         {
@@ -58,6 +60,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeUpdateAdd)]
         [HttpPost("apply-update")]
         public async Task UpdateAdd([FromBody] UpdateKnowledgeApplyDto dto)
         {
@@ -70,6 +73,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowApplyHandle)]
         [HttpPost("apply-handle")]
         public async Task ApplyHandle(string Id)
         {
@@ -88,6 +92,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeApplyRevoke)]
         [HttpPost("apply-handle/{Id}")]
         public async Task ApplyRevoke(string Id)
         {
@@ -103,6 +108,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeApplyReturn)]
         [HttpPost("apply-return")]
         public async Task ApplyReturn(string Id)
         {
@@ -143,6 +149,7 @@ namespace Hotline.Api.Controllers
         /// 我的知识申请--全部
         /// </summary>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeAllApply)]
         [HttpPost("apply-allapply")]
         public async Task<PagedDto<KnowledgeApply>> AllApply([FromQuery] KnowledgeApplyPagedDto dto)
         {
@@ -167,6 +174,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeProcessingApply)]
         [HttpPost("apply-processingapply")]
         public async Task<PagedDto<KnowledgeApply>> ProcessingApply([FromQuery] KnowledgeApplyPagedDto dto)
         {
@@ -191,6 +199,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeEndApply)]
         [HttpPost("apply-endapply")]
         public async Task<PagedDto<KnowledgeApply>> EndApply([FromQuery] KnowledgeApplyPagedDto dto)
         {
@@ -215,6 +224,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeReturnApply)]
         [HttpPost("apply-returnapply")]
         public async Task<PagedDto<KnowledgeApply>> ReturnApply([FromQuery] KnowledgeApplyPagedDto dto)
         {
@@ -239,6 +249,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeRevokeApply)]
         [HttpPost("apply-revokeapply")]
         public async Task<PagedDto<KnowledgeApply>> RevokeApply([FromQuery] KnowledgeApplyPagedDto dto)
         {
@@ -294,6 +305,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeProcessingHandle)]
         [HttpPost("apply-processinghandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> ProcessingHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {
@@ -325,6 +337,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeEndHandle)]
         [HttpPost("apply-endhandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> EndHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {
@@ -356,6 +369,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeReturnHandle)]
         [HttpPost("apply-returnhandle")]
         public async Task<PagedDto<KnowledgeApplyPageDto>> ReturnHandle([FromQuery] KnowledgeHandlePagedDto dto)
         {

+ 75 - 8
src/Hotline.Api/Controllers/KnowledgeCommonController.cs

@@ -1,5 +1,7 @@
 using Hotline.KnowledgeBase;
+using Hotline.Permissions;
 using Hotline.Share.Dtos.Knowledge;
+using Hotline.Share.Enums.KnowledgeBase;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
@@ -44,6 +46,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.AddKnowledgeType)]
         [HttpPost("type-add")]
         public async Task<string> TypeAdd([FromBody] AddKnowledgeTypeDto dto)
         {
@@ -60,6 +63,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.UpdateKnowledgeType)]
         [HttpPost("type-update")]
         public async Task TypeUpdate([FromBody] UpdateKnowledgeTypeDto dto)
         {
@@ -133,6 +137,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.RemoveKnowledgeType)]
         [HttpDelete("type-delete")]
         public async Task TypeDelete(string Id)
         {
@@ -162,6 +167,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeTypeChangeState)]
         [HttpGet("type-changestate")]
         public async Task TypeChangeState(string Id)
         {
@@ -171,11 +177,22 @@ namespace Hotline.Api.Controllers
                 throw UserFriendlyException.SameMessage("分类不存在!");
             if (type.IsEnable)//禁用
             {
-                //查询是否有子级,如果有子级启用,则不能禁用
-                var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id && p.IsEnable == true);
-                if (checkChild > 0)
-                    throw UserFriendlyException.SameMessage("请先禁用子级分类!");
-                type.IsEnable = false;
+                //查询子级数据
+                var getChild = await _knowledgeTypeRepository.GetChild(Id);
+                //禁用子级数据
+                if (getChild != null && getChild.Count > 0)
+                {
+                    foreach (var item in getChild)
+                    {
+                        item.IsEnable = false;
+                        await _knowledgeTypeRepository.UpdateAsync(item);
+                    }
+                }
+                ////查询是否有子级,如果有子级启用,则不能禁用
+                //var checkChild = await _knowledgeTypeRepository.CountAsync(p => p.ParentId == Id && p.IsEnable == true);
+                //if (checkChild > 0)
+                //    throw UserFriendlyException.SameMessage("请先禁用子级分类!");
+                //type.IsEnable = false;
             }
             else //启用
             {
@@ -188,16 +205,63 @@ namespace Hotline.Api.Controllers
 
                 //将状态修改为启用
                 type.IsEnable = true;
+                await _knowledgeTypeRepository.UpdateAsync(type);
+            }
+
+        }
+
+        /// <summary>
+        /// 知识分类-禁用,并且下架知识
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [Permission(EPermission.KnowledgeTypeChangeStateAndOffShelf)]
+        [HttpGet("type-changestateandoffshelf")]
+        public async Task TypeChangeStateAndOffShelf(string Id)
+        {
+            //查询数据是否存在
+            var type = await _knowledgeTypeRepository.GetAsync(Id);
+            if (type is null)
+                throw UserFriendlyException.SameMessage("分类不存在!");
+            if (type.IsEnable)//启用状态
+            {
+                //查询子级数据
+                var getChild = await _knowledgeTypeRepository.GetChild(Id);
+                //禁用子级数据
+                if (getChild != null && getChild.Count > 0)
+                {
+                    foreach (var item in getChild)
+                    {
+                        item.IsEnable = false;
+                        await _knowledgeTypeRepository.UpdateAsync(item);
+                        //下架知识
+                        //查询当前分类下的知识(查询条件:此分类下/状态为成功/未删除/已上架)
+                        var knowList = _knowledgeRepository.Queryable().Where(p => p.KnowledgeTypeId == item.Id && p.Status == EKnowledgeStatus.Succeed && p.IsDeleted == false && p.IsOnShelf == true).ToList();
+                        if (knowList != null && knowList.Count > 0)
+                        {
+                            //修改知识为下架状态
+                            foreach (var itemKnow in knowList)
+                            {
+                                itemKnow.IsOnShelf = false;
+                                itemKnow.OffShelfTime = DateTime.Now;
+                                await _knowledgeRepository.UpdateAsync(itemKnow);
+                            }
+                        }
+                    }
+                }
+            }
+            else
+            {
+                throw UserFriendlyException.SameMessage("禁用分类失败!");
             }
-            await _knowledgeTypeRepository.UpdateAsync(type);
         }
 
         /// <summary>
         ///知识分类- 获取层级分类
         /// </summary>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeTypeMange)]
         [HttpPost("type-treelist")]
-        [AllowAnonymous]
         public async Task<List<KnowledgeType>> GetTreeList(string id)
         {
             return await _knowledgeTypeRepository.GetTree(Guid.Empty.ToString());
@@ -228,6 +292,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.RemoveKnowledgeStandard)]
         [HttpDelete("standard-delete")]
         public async Task StandardDelete(string Id)
         {
@@ -243,6 +308,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeStandardAdd)]
         [HttpPost("standard-add")]
         public async Task StandardAdd([FromBody] AddKnowledgeStandardDto dto)
         {
@@ -252,10 +318,11 @@ namespace Hotline.Api.Controllers
         }
 
         /// <summary>
-        /// 编写规范-编辑
+        /// 编写规范-修改
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeStandardUpdate)]
         [HttpPost("standard-update")]
         public async Task StandardUpdate([FromBody] UpdateKnowledgeStandardDto dto)
         {

+ 86 - 2
src/Hotline.Api/Controllers/KnowledgeController.cs

@@ -1,5 +1,6 @@
 using Google.Rpc;
 using Hotline.KnowledgeBase;
+using Hotline.Permissions;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
@@ -54,6 +55,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeTempAdd)]
         [HttpPost("knowledgetemp-add")]
         public async Task<string> KnowledgeTempAdd([FromBody] AddKnowledgeDto dto)
         {
@@ -70,6 +72,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeTempUpdate)]
         [HttpPost("knowledgetemp-update")]
         public async Task KnowledgeTempUpdate([FromBody] UpdateKnowledgeDto dto)
         {
@@ -96,6 +99,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="Id"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeTempDelete)]
         [HttpGet("knowledgetemp-delete")]
         public async Task KnowledgeTempDelete(string Id)
         {
@@ -114,7 +118,6 @@ namespace Hotline.Api.Controllers
         /// <param name="Id"></param>
         /// <returns></returns>
         [HttpGet("knowledge-updateinfo")]
-        [AllowAnonymous]
         public async Task<Knowledge> KnowledgeUpdateInfo(string Id)
         {
             var know = await _knowledgeRepository.GetAsync(Id);
@@ -160,6 +163,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.AddKnowledge)]
         [HttpPost("knowledge-add")]
         public async Task<string> KnowledgeAdd([FromBody] AddKnowledgeDto dto)
         {
@@ -190,6 +194,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeUpdate)]
         [HttpPost("knowledge-update")]
         public async Task KnowledgeUpdate([FromBody] UpdateKnowledgeDto dto)
         {
@@ -219,6 +224,27 @@ namespace Hotline.Api.Controllers
             //await _knowledgeRepository.RemoveAsync(knowledge);
         }
 
+        /// <summary>
+        /// 知识库-删除
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [Permission(EPermission.KnowledgeDelete)]
+        [HttpGet("knowledge-delete")]
+        public async Task KnowledgeDelete(string Id)
+        {
+            var know = await _knowledgeRepository.GetAsync(Id);
+            if (know != null && know.IsDeleted==false)
+            {
+                know.DeletionTime = DateTime.Now;
+                await _knowledgeRepository.RemoveAsync(know,true);
+            }
+            else
+            {
+                throw UserFriendlyException.SameMessage("知识删除失败");
+            }
+        }
+
         /// <summary>
         /// 审批操作
         /// </summary>
@@ -255,6 +281,52 @@ namespace Hotline.Api.Controllers
             }
         }
 
+        /// <summary>
+        /// 知识库-知识下架
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [Permission(EPermission.KnowledgeOffShelf)]
+        [HttpGet("knowledge-offshelf")]
+        public async Task KnowledgeOffShelf(string Id)
+        {
+            var know = await _knowledgeRepository.GetAsync(Id);
+            if (know != null && know.IsOnShelf == true)
+            {
+                know.IsOnShelf = false;
+                know.OnShelfTime = null;
+                know.OffShelfTime = DateTime.Now;
+                await _knowledgeRepository.AddAsync(know);
+            }
+            else
+            {
+                throw UserFriendlyException.SameMessage("知识下架失败");
+            }
+        }
+
+        /// <summary>
+        /// 知识库-知识上架
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [Permission(EPermission.KnowledgeOnTheShelf)]
+        [HttpGet("knowledge-ontheshelf")]
+        public async Task KnowledgeOnTheShelf(string Id)
+        {
+            var know = await _knowledgeRepository.GetAsync(Id);
+            if (know != null && know.IsOnShelf == false)
+            {
+                know.IsOnShelf = true;
+                know.OnShelfTime = DateTime.Now;
+                know.OffShelfTime = null;
+                await _knowledgeRepository.AddAsync(know);
+            }
+            else
+            {
+                throw UserFriendlyException.SameMessage("知识上架失败");
+            }
+        }
+
         #endregion
 
         #region 知识列表
@@ -263,6 +335,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeMyDraftsList)]
         [HttpPost("knowledge-mydraftslist")]
         public async Task<PagedDto<KnowledgeDataDto>> MyDraftsList([FromBody] MyDraftsListPagedDto pagedDto)
         {
@@ -337,6 +410,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeAllList)]
         [HttpPost("knowledge-alllist")]
         public async Task<PagedDto<KnowledgeDataDto>> AllList([FromBody] AllKnowledgePagedListDto pagedDto)
         {
@@ -401,6 +475,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.OnTheShelfKnowledge)]
         [HttpPost("knowledge-ontheshelf")]
         public async Task<PagedDto<KnowledgeDataDto>> OnTheShelf([FromBody] KnowledgePagedListDto pagedDto)
         {
@@ -457,6 +532,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.OffShelfKnowledge)]
         [HttpPost("knowledge-offshelf")]
         public async Task<PagedDto<KnowledgeDataDto>> OffShelf([FromBody] KnowledgePagedListDto pagedDto)
         {
@@ -514,6 +590,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.UnderApprovalKnowledge)]
         [HttpPost("knowledge-underapproval")]
         public async Task<PagedDto<KnowledgeDataDto>> UnderApproval([FromBody] KnowledgePagedListDto pagedDto)
         {
@@ -545,6 +622,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.ApprovedKnowledge)]
         [HttpPost("knowledge-approved")]
         public async Task<PagedDto<KnowledgeDataDto>> Approved([FromBody] KnowledgePagedListDto pagedDto)
         {
@@ -576,6 +654,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.ApprovalFailedKnowledge)]
         [HttpPost("knowledge-approvalfailed")]
         public async Task<PagedDto<KnowledgeDataDto>> ApprovalFailed([FromBody] KnowledgePagedListDto pagedDto)
         {
@@ -610,6 +689,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeRetrieval)]
         [HttpPost("knowledge-knowretrieval")]
         public async Task<PagedDto<KnowledgeRetrievalDataDto>> KnowRetrieval([FromBody] KnowledgeRetrievalPagedListDto pagedDto)
         {
@@ -627,7 +707,7 @@ namespace Hotline.Api.Controllers
               .Queryable()
               .Where(p => p.IsDeleted == false && p.Status == EKnowledgeStatus.Succeed)
               .Where(p => bmList.Contains(p.CreatorOrgId!)) //是否需要验证本部门以及下级部门的数据,不要注释此行
-              .WhereIF(!string.IsNullOrEmpty(pagedDto.RetrievalType) || pagedDto.RetrievalType == EKnowledgeRetrievalType.All.ToString(), 
+              .WhereIF(!string.IsNullOrEmpty(pagedDto.RetrievalType) || pagedDto.RetrievalType == EKnowledgeRetrievalType.All.ToString(),
                         d => d.Title.Contains(pagedDto.Keyword) || d.Content.Contains(pagedDto.Keyword) || d.Additions.Contains(pagedDto.Keyword))
               .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Title.ToString(), d => d.Title.Contains(pagedDto.Keyword))
               .WhereIF(pagedDto.RetrievalType == EKnowledgeRetrievalType.Content.ToString(), d => d.Content.Contains(pagedDto.Keyword))
@@ -657,6 +737,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeApprovedAllList)]
         [HttpPost("knowledge-approvedalllist")]
         public async Task<PagedDto<KnowledgeApprovalDataDto>> ApprovedAllList([FromBody] KnowledgeApprovalPagedListDto pagedDto)
         {
@@ -681,6 +762,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeToBeReviewed)]
         [HttpPost("knowledge-tobereviewed")]
         public async Task<PagedDto<KnowledgeApprovalDataDto>> ToBeReviewed([FromBody] KnowledgeApprovalPagedListDto pagedDto)
         {
@@ -709,6 +791,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeApprovedList)]
         [HttpPost("knowledge-approvedlist")]
         public async Task<PagedDto<KnowledgeApprovalDataDto>> ApprovedList([FromBody] KnowledgeApprovalPagedListDto pagedDto)
         {
@@ -735,6 +818,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
+        [Permission(EPermission.KnowledgeApprovedFailedList)]
         [HttpPost("knowledge-approvedfailedlist")]
         public async Task<PagedDto<KnowledgeApprovalDataDto>> ApprovedFailedList([FromBody] KnowledgeApprovalPagedListDto pagedDto)
         {

+ 366 - 41
src/Hotline.Api/Permissions/EPermission.cs

@@ -13,7 +13,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 首页
         /// </summary>
-        [Display(GroupName ="首页",Name ="首页",Description ="首页")]
+        [Display(GroupName = "首页", Name = "首页", Description = "首页")]
         Home = 000000,
 
         #region 系统管理相关接口(100)
@@ -27,7 +27,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 机构用户
         /// </summary>
-        [Display(GroupName ="系统管理",Name ="机构用户",Description ="机构用户")]
+        [Display(GroupName = "系统管理", Name = "机构用户", Description = "机构用户")]
         UserManage = 100100,
         #region 用户管理
         /// <summary>
@@ -38,7 +38,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 新增用户
         /// </summary>
-        [Display(GroupName = "用户管理",Name ="新增用户",Description ="新增用户")]
+        [Display(GroupName = "用户管理", Name = "新增用户", Description = "新增用户")]
         AddUser = 100102,
         /// <summary>
         /// 更新用户
@@ -53,12 +53,12 @@ namespace Hotline.Permissions
         /// <summary>
         /// 设置用户角色
         /// </summary>
-        [Display(GroupName = "用户管理", Name ="设置用户角色",Description ="设置用户角色")]
+        [Display(GroupName = "用户管理", Name = "设置用户角色", Description = "设置用户角色")]
         SetUserRoles = 100105,
         /// <summary>
         /// 分页查询用户角色
         /// </summary>
-        [Display(GroupName = "用户管理",Name ="分页查询用户角色",Description ="分页查询用户角色")]
+        [Display(GroupName = "用户管理", Name = "分页查询用户角色", Description = "分页查询用户角色")]
         GetUserRoles = 100106,
         #endregion
         #region 角色管理
@@ -86,12 +86,12 @@ namespace Hotline.Permissions
         /// <summary>
         /// 分配权限
         /// </summary>
-        [Display(GroupName ="角色管理",Name ="分配权限",Description ="分配权限")]
+        [Display(GroupName = "角色管理", Name = "分配权限", Description = "分配权限")]
         AllocationAuthority = 100204,
         /// <summary>
         /// 获取角色权限
         /// </summary>
-        [Display(GroupName ="角色管理",Name ="获取角色权限",Description ="获取角色权限")]
+        [Display(GroupName = "角色管理", Name = "获取角色权限", Description = "获取角色权限")]
         GetAuthority = 100205,
 
         #endregion
@@ -99,22 +99,22 @@ namespace Hotline.Permissions
         /// <summary>
         /// 新增数据权限
         /// </summary>
-        [Display(GroupName = "角色管理",Name ="新增数据权限",Description ="新增数据权限")]
+        [Display(GroupName = "角色管理", Name = "新增数据权限", Description = "新增数据权限")]
         AddDataAuthority = 100206,
         /// <summary>
         /// 修改数据权限
         /// </summary>
-        [Display(GroupName = "角色管理",Name="修改数据权限",Description ="修改数据权限")]
+        [Display(GroupName = "角色管理", Name = "修改数据权限", Description = "修改数据权限")]
         UpdateDataAuthority = 100207,
         /// <summary>
         /// 删除数据权限
         /// </summary>
-        [Display(GroupName ="角色管理",Name ="删除数据权限",Description ="删除数据权限")]
+        [Display(GroupName = "角色管理", Name = "删除数据权限", Description = "删除数据权限")]
         RemoveDataAuthority = 100208,
         /// <summary>
         /// 获取数据权限
         /// </summary>
-        [Display(GroupName ="角色管理",Name ="获取数据权限",Description ="获取数据权限")]
+        [Display(GroupName = "角色管理", Name = "获取数据权限", Description = "获取数据权限")]
         GetDataAuthorityByRole = 100209,
         #endregion
         #endregion
@@ -136,108 +136,108 @@ namespace Hotline.Permissions
         /// <summary>
         /// 菜单管理
         /// </summary>
-        [Display(GroupName = "系统设置",Name = "菜单管理",Description ="菜单管理")]
+        [Display(GroupName = "系统设置", Name = "菜单管理", Description = "菜单管理")]
         GetMenuJson = 100400,
         /// <summary>
         /// 新增菜单
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="新增菜单",Description ="新增菜单")]
+        [Display(GroupName = "系统设置", Name = "新增菜单", Description = "新增菜单")]
         AddMenu = 100401,
         /// <summary>
         /// 修改菜单
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="修改菜单",Description ="修改菜单")]
+        [Display(GroupName = "系统设置", Name = "修改菜单", Description = "修改菜单")]
         UpdateMenu = 100402,
         /// <summary>
         /// 删除菜单
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="删除菜单",Description ="删除菜单")]
+        [Display(GroupName = "系统设置", Name = "删除菜单", Description = "删除菜单")]
         RemoveMenu = 100403,
         /// <summary>
         /// 获取菜单对象
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="获取菜单对象",Description ="获取菜单对象")]
+        [Display(GroupName = "系统设置", Name = "获取菜单对象", Description = "获取菜单对象")]
         GetMenu = 100408,
         #endregion
         #region 按钮管理
         /// <summary>
         /// 获取菜单按钮
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="获取菜单按钮",Description ="获取菜单按钮")]
+        [Display(GroupName = "系统设置", Name = "获取菜单按钮", Description = "获取菜单按钮")]
         GetButtonByMenu = 100404,
         /// <summary>
         /// 新增按钮
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="新增按钮",Description ="新增按钮")]
+        [Display(GroupName = "系统设置", Name = "新增按钮", Description = "新增按钮")]
         AddButton = 100405,
         /// <summary>
         /// 编辑按钮
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="编辑按钮",Description ="编辑按钮")]
+        [Display(GroupName = "系统设置", Name = "编辑按钮", Description = "编辑按钮")]
         UpdateButton = 100406,
         /// <summary>
         /// 删除按钮
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="删除按钮",Description ="删除按钮")]
+        [Display(GroupName = "系统设置", Name = "删除按钮", Description = "删除按钮")]
         RemoveButton = 100407,
         /// <summary>
         /// 获取按钮对象
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="获取按钮对象",Description ="获取按钮对象")]
+        [Display(GroupName = "系统设置", Name = "获取按钮对象", Description = "获取按钮对象")]
         GetButton = 100409,
         #endregion
         #region 组织架构管理
         /// <summary>
         /// 组织架构树形列表
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="组织架构树形列表",Description ="组织架构树形列表")]
+        [Display(GroupName = "系统设置", Name = "组织架构树形列表", Description = "组织架构树形列表")]
         GetOrgJson = 100500,
         /// <summary>
         /// 新增组织
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="新增组织",Description ="新增组织")]
+        [Display(GroupName = "系统设置", Name = "新增组织", Description = "新增组织")]
         AddOrg = 100501,
         /// <summary>
         /// 修改组织
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="修改组织",Description ="修改组织")]
+        [Display(GroupName = "系统设置", Name = "修改组织", Description = "修改组织")]
         UpdateOrg = 100502,
         /// <summary>
         /// 获取组织
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="获取组织",Description ="获取组织")]
-        GetOrg =  100503,
+        [Display(GroupName = "系统设置", Name = "获取组织", Description = "获取组织")]
+        GetOrg = 100503,
         /// <summary>
         /// 获取可用组织架构树形
         /// </summary>
-        [Display(GroupName ="系统设置",Name = "获取可用组织架构树形",Description = "获取可用组织架构树形")]
+        [Display(GroupName = "系统设置", Name = "获取可用组织架构树形", Description = "获取可用组织架构树形")]
         GetCanUseOrg = 100504,
         #endregion
         #region 字典管理
         /// <summary>
         /// 字典类型列表
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="字典类型列表",Description ="字典类型列表")]
+        [Display(GroupName = "系统设置", Name = "字典类型列表", Description = "字典类型列表")]
         GetSysDicType = 100600,
         /// <summary>
         /// 字典数据列表
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="字典数据列表",Description ="字典数据列表")]
+        [Display(GroupName = "系统设置", Name = "字典数据列表", Description = "字典数据列表")]
         GetSysDicData = 100601,
         /// <summary>
         /// 获取字典对象
         /// </summary>
-        [Display(GroupName = "系统设置",Name = "获取字典对象",Description = "获取字典对象")]
+        [Display(GroupName = "系统设置", Name = "获取字典对象", Description = "获取字典对象")]
         SysDicDataModel = 100602,
         /// <summary>
         /// 新增字典数据
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="新增字典数据",Description ="新增字典数据")]
+        [Display(GroupName = "系统设置", Name = "新增字典数据", Description = "新增字典数据")]
         AddDicData = 100603,
         /// <summary>
         /// 修改字典数据
         /// </summary>
-        [Display(GroupName ="系统设置",Name ="修改字典数据",Description ="修改字典数据")]
+        [Display(GroupName = "系统设置", Name = "修改字典数据", Description = "修改字典数据")]
         UpdateDicData = 100604,
         #endregion
         #endregion
@@ -247,7 +247,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 电话记录
         /// </summary>
-        [Display(GroupName = "电话记录",Name ="电话记录",Description ="电话记录")]
+        [Display(GroupName = "电话记录", Name = "电话记录", Description = "电话记录")]
         CallManager = 200000,
 
         #region 通话记录
@@ -261,7 +261,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 分页未接通话记录列表
         /// </summary>
-        [Display(GroupName = "通话",Name ="分页未接通话记录列表",Description = "分页未接通话记录列表")]
+        [Display(GroupName = "通话", Name = "分页未接通话记录列表", Description = "分页未接通话记录列表")]
         GetCallListMissed = 200101,
         #endregion
 
@@ -293,7 +293,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 设备管理
         /// </summary>
-        [Display(GroupName ="设备管理",Name ="设备管理",Description ="设备管理")]
+        [Display(GroupName = "设备管理", Name = "设备管理", Description = "设备管理")]
         DeviceManager = 300000,
 
         #region 话机
@@ -305,8 +305,8 @@ namespace Hotline.Permissions
         /// <summary>
         /// 同步分机
         /// </summary>
-        [Display(GroupName ="话机管理",Name ="同步分机",Description ="同步分机")]
-        SyncTelsAsync =300101,
+        [Display(GroupName = "话机管理", Name = "同步分机", Description = "同步分机")]
+        SyncTelsAsync = 300101,
         #endregion
 
         #region 分机组
@@ -318,7 +318,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 页面基础信息
         /// </summary>
-        [Display(GroupName = "分机组管理",Name ="页面基础信息",Description ="页面基础信息")]
+        [Display(GroupName = "分机组管理", Name = "页面基础信息", Description = "页面基础信息")]
         GetBaseInfoGroup = 300201,
         /// <summary>
         /// 新增分机组
@@ -405,6 +405,331 @@ namespace Hotline.Permissions
         #endregion
         #endregion
 
+        #endregion
+
+        #region 知识库
+        /// <summary>
+        /// 知识库
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识库", Description = "知识库")]
+        KnowledgeBase = 400000,
+
+        #region 知识库管理-已完成
+        /// <summary>
+        /// 知识库管理
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识库管理", Description = "知识库管理")]
+        KnowledgeMange = 400100,
+
+        #region 创建知识
+        /// <summary>
+        /// 创建知识
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "创建知识", Description = "创建知识")]
+        EstablishKnowledge = 400110,
+        /// <summary>
+        /// 提交审核按钮
+        /// </summary>
+        [Display(GroupName = "创建知识", Name = "提交审核按钮", Description = "提交审核按钮")]
+        AddKnowledge = 400111,
+        /// <summary>
+        /// 保存草稿箱
+        /// </summary>
+        [Display(GroupName = "创建知识", Name = "保存草稿箱", Description = "保存草稿箱")]
+        AddKnowledgeTemp = 400112,
+        /// <summary>
+        /// 知识预览
+        /// </summary>
+        [Display(GroupName = "创建知识", Name = "知识预览", Description = "知识预览")]
+        KnowledgePreview = 400113,
+        #endregion
+
+        #region 知识列表
+        /// <summary>
+        /// 全部知识
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "全部知识", Description = "全部知识")]
+        KnowledgeAllList = 400120,
+        /// <summary>
+        /// 知识修改
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "知识修改", Description = "知识修改")]
+        KnowledgeUpdate = 400121,
+        /// <summary>
+        /// 知识删除
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "知识删除", Description = "知识删除")]
+        KnowledgeDelete = 400122,
+
+        /// <summary>
+        /// 已上架知识
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "已上架知识", Description = "已上架知识")]
+        OnTheShelfKnowledge = 400130,
+        /// <summary>
+        /// 知识下架
+        /// </summary>
+        [Display(GroupName = "已上架知识", Name = "知识下架", Description = "知识下架")]
+        KnowledgeOffShelf = 400131,
+
+        /// <summary>
+        /// 已下架知识
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "已下架知识", Description = "已下架知识")]
+        OffShelfKnowledge = 400140,
+        /// <summary>
+        /// 知识上架
+        /// </summary>
+        [Display(GroupName = "已下架知识", Name = "知识上架", Description = "知识上架")]
+        KnowledgeOnTheShelf = 400141,
+
+        /// <summary>
+        /// 审核中
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "审核中", Description = "审核中")]
+        UnderApprovalKnowledge = 400150,
+
+        /// <summary>
+        /// 审批完成
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "审批完成", Description = "审批完成")]
+        ApprovedKnowledge = 400160,
+
+        /// <summary>
+        /// 审批不通过
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "审批不通过", Description = "审批不通过")]
+        ApprovalFailedKnowledge = 400170,
+
+        /// <summary>
+        /// 我的草稿箱
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "我的草稿箱", Description = "我的草稿箱")]
+        KnowledgeMyDraftsList = 400180,
+        /// <summary>
+        /// 新增草稿
+        /// </summary>
+        [Display(GroupName = "我的草稿箱", Name = "新增草稿", Description = "新增草稿")]
+        KnowledgeTempAdd = 400181,
+        /// <summary>
+        /// 修改草稿
+        /// </summary>
+        [Display(GroupName = "我的草稿箱", Name = "修改草稿", Description = "修改草稿")]
+        KnowledgeTempUpdate = 400182,
+        /// <summary>
+        /// 删除草稿
+        /// </summary>
+        [Display(GroupName = "我的草稿箱", Name = "删除草稿", Description = "删除草稿")]
+        KnowledgeTempDelete = 400183,
+
+        /// <summary>
+        /// 我的知识删除申请
+        /// </summary>
+        [Display(GroupName = "知识库管理", Name = "我的知识删除申请", Description = "我的知识删除申请")]
+        KnowledgeDeleteApply = 400190,
+        #endregion
+        #endregion
+
+        #region 知识库基础设置-已完成
+        /// <summary>
+        /// 知识库基础设置
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识库基础设置", Description = "知识库基础设置")]
+        KnowledgeBasicSettings = 400200,
+
+        #region 类型管理
+        /// <summary>
+        /// 类型管理
+        /// </summary>
+        [Display(GroupName = "知识库基础设置", Name = "类型管理", Description = "类型管理")]
+        KnowledgeTypeMange = 400210,
+        /// <summary>
+        /// 添加分类
+        /// </summary>
+        [Display(GroupName = "类型管理", Name = "添加分类", Description = "添加分类")]
+        AddKnowledgeType = 400211,
+        /// <summary>
+        /// 修改分类
+        /// </summary>
+        [Display(GroupName = "类型管理", Name = "修改分类", Description = "修改分类")]
+        UpdateKnowledgeType = 400212,
+        /// <summary>
+        /// 删除分类
+        /// </summary>
+        [Display(GroupName = "类型管理", Name = "删除分类", Description = "删除分类")]
+        RemoveKnowledgeType = 400213,
+        /// <summary>
+        /// 知识分类-启用、禁用切换
+        /// </summary>
+        [Display(GroupName = "类型管理", Name = "知识分类-启用、禁用切换", Description = "知识分类-启用、禁用切换")]
+        KnowledgeTypeChangeState = 400214,
+        /// <summary>
+        ///  知识分类-禁用,并且下架知识
+        /// </summary>
+        [Display(GroupName = "类型管理", Name = " 知识分类-禁用,并且下架知识", Description = " 知识分类-禁用,并且下架知识")]
+        KnowledgeTypeChangeStateAndOffShelf = 400215,
+        #endregion
+
+        #region 知识规范
+        /// <summary>
+        /// 知识规范
+        /// </summary>
+        [Display(GroupName = "知识库基础设置", Name = "知识规范", Description = "知识规范")]
+        KnowledgeStandard = 400220,
+        /// <summary>
+        /// 新增知识规范
+        /// </summary>
+        [Display(GroupName = "知识规范", Name = "新增知识规范", Description = "新增知识规范")]
+        KnowledgeStandardAdd = 400221,
+        /// <summary>
+        /// 修改知识规范
+        /// </summary>
+        [Display(GroupName = "知识规范", Name = "修改知识规范", Description = "修改知识规范")]
+        KnowledgeStandardUpdate = 400222,
+        /// <summary>
+        /// 删除知识规范
+        /// </summary>
+        [Display(GroupName = "知识规范", Name = "删除知识规范", Description = "删除知识规范")]
+        RemoveKnowledgeStandard = 400223,
+
+        #endregion
+        #endregion
+
+        #region 知识库审核管理
+        /// <summary>
+        /// 知识库审核管理
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识库审核管理", Description = "知识库审核管理")]
+        KnowledgeApprovalMange = 400300,
+
+        /// <summary>
+        /// 审核管理全部
+        /// </summary>
+        [Display(GroupName = "知识库审核管理", Name = "审核管理全部", Description = "审核管理全部")]
+        KnowledgeApprovedAllList = 400310,
+
+        /// <summary>
+        /// 审核管理待审核
+        /// </summary>
+        [Display(GroupName = "知识库审核管理", Name = "审核管理待审核", Description = "审核管理待审核")]
+        KnowledgeToBeReviewed = 400320,
+
+        /// <summary>
+        /// 审核管理审核通过
+        /// </summary>
+        [Display(GroupName = "知识库审核管理", Name = "审核管理审核通过", Description = "审核管理审核通过")]
+        KnowledgeApprovedList = 400330,
+
+        /// <summary>
+        /// 审核管理审核不通过
+        /// </summary>
+        [Display(GroupName = "知识库审核管理", Name = "审核管理审核不通过", Description = "审核管理审核不通过")]
+        KnowledgeApprovedFailedList = 400340,
+        #endregion
+
+        #region 知识库申请管理-已完成
+        /// <summary>
+        /// 知识库申请管理
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识库申请管理", Description = "知识库申请管理")]
+        KnowledgeApplyMange = 400400,
+
+        #region 我的知识申请
+        /// <summary>
+        /// 我的知识申请
+        /// </summary>
+        [Display(GroupName = "知识库申请管理", Name = "我的知识申请", Description = "我的知识申请")]
+        MyKnowledgeApply = 400410,
+
+        /// <summary>
+        /// 我的全部知识申请
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "我的全部知识申请", Description = "我的全部知识申请")]
+        KnowledgeAllApply = 400411,
+        /// <summary>
+        /// 我的知识申请处理中
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "我的知识申请处理中", Description = "我的知识申请处理中")]
+        KnowledgeProcessingApply = 400412,
+        /// <summary>
+        /// 我的知识申请已处理
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "我的知识申请已处理", Description = "我的知识申请已处理")]
+        KnowledgeEndApply = 400413,
+        /// <summary>
+        /// 我的知识申请退回
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "我的知识申请退回", Description = "我的知识申请退回")]
+        KnowledgeReturnApply = 400414,
+        /// <summary>
+        /// 我的知识申请已撤销
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "我的知识申请已撤销", Description = "我的知识申请已撤销")]
+        KnowledgeRevokeApply = 400415,
+        /// <summary>
+        /// 发起申请按钮
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "发起申请按钮", Description = "发起申请按钮")]
+        KnowledgeApplyAdd = 400416,
+        /// <summary>
+        /// 修改申请按钮
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "修改申请按钮", Description = "修改申请按钮")]
+        KnowledgeUpdateAdd = 400417,
+        /// <summary>
+        /// 撤销操作按钮
+        /// </summary>
+        [Display(GroupName = "我的知识申请", Name = "撤销操作按钮", Description = "撤销操作按钮")]
+        KnowledgeApplyRevoke = 400418,
+        #endregion
+
+        #region 知识申请处理
+        /// <summary>
+        /// 知识申请处理
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识申请处理", Description = "知识申请处理")]
+        KnowledgeApplyHandle = 400420,
+
+        /// <summary>
+        ///待处理
+        /// </summary>
+        [Display(GroupName = "知识申请处理", Name = "待处理", Description = "待处理")]
+        KnowledgeProcessingHandle = 400421,
+        /// <summary>
+        ///处理完成
+        /// </summary>
+        [Display(GroupName = "知识申请处理", Name = "处理完成", Description = "处理完成")]
+        KnowledgeEndHandle = 400422,
+        /// <summary>
+        ///已退回
+        /// </summary>
+        [Display(GroupName = "知识申请处理", Name = "已退回", Description = "已退回")]
+        KnowledgeReturnHandle = 400423,
+        /// <summary>
+        ///知识申请办理按钮
+        /// </summary>
+        [Display(GroupName = "知识申请处理", Name = "知识申请办理按钮", Description = "知识申请办理按钮")]
+        KnowApplyHandle = 400424,
+        /// <summary>
+        ///知识申请退回按钮
+        /// </summary>
+        [Display(GroupName = "知识申请处理", Name = "知识申请退回按钮", Description = "知识申请退回按钮")]
+        KnowledgeApplyReturn = 400425,
+
+
+        #endregion
+
+        #endregion
+
+        #region 知识检索-已完成
+        /// <summary>
+        /// 知识检索
+        /// </summary>
+        [Display(GroupName = "知识库", Name = "知识检索", Description = "知识检索")]
+        KnowledgeRetrieval = 400500,
+        #endregion
+
+
         #endregion
 
         #region 公用(999)
@@ -547,7 +872,7 @@ namespace Hotline.Permissions
         /// <summary>
         /// 坐席面板
         /// </summary>
-        [Display(GroupName = "公用",Name ="坐席面板",Description ="坐席面板")]
+        [Display(GroupName = "公用", Name = "坐席面板", Description = "坐席面板")]
         TelPanel = 999125,
 
         #endregion
@@ -556,12 +881,12 @@ namespace Hotline.Permissions
         /// <summary>
         /// 静音
         /// </summary>
-        [Display(GroupName ="公用",Name ="静音",Description ="静音")]
+        [Display(GroupName = "公用", Name = "静音", Description = "静音")]
         Mute = 999126,
         /// <summary>
         /// 取消静音
         /// </summary>
-        [Display(GroupName ="公用",Name ="取消静音",Description ="取消静音")]
+        [Display(GroupName = "公用", Name = "取消静音", Description = "取消静音")]
         UnMute = 999127,
         #endregion