颐和api

RoleFunctionController.cs 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.Extensions.Logging;
  7. using Microsoft.AspNetCore.Authorization;
  8. using Api.SignToken;
  9. using MadRunFabric.Common;
  10. using System.Threading;
  11. using System.Security.Claims;
  12. using ConfigurationApi.IRepositories;
  13. using MongoDB.Driver;
  14. using MadRunFabric.Model;
  15. // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
  16. namespace ConfigurationApi.Controllers
  17. {
  18. /// <summary>
  19. /// 角色的菜单按钮信息控制器
  20. /// </summary>
  21. [Authorize]
  22. [Route("api/[controller]")]
  23. public class RoleFunctionController : BaseController
  24. {
  25. private readonly ILogger<RoleFunctionController> _logger;
  26. private readonly ISys_Role_InfoRepository _sys_role_infoRepository;
  27. private readonly ISys_Role_FunctionRepository _sys_role_functionRepository;
  28. private readonly ISys_Module_InfoRepository _sys_module_infoRepository;
  29. private readonly ISys_ModuleButton_InfoRepository _sys_modulebutton_infoRepository;
  30. public RoleFunctionController(ISys_Role_InfoRepository sys_role_infoRepository, ISys_Role_FunctionRepository sys_role_functionRepository, ISys_Module_InfoRepository sys_module_infoRepository, ISys_ModuleButton_InfoRepository sys_modulebutton_infoRepository, ILogger<RoleFunctionController> logger)
  31. {
  32. _sys_role_functionRepository = sys_role_functionRepository;
  33. _sys_role_infoRepository = sys_role_infoRepository;
  34. _sys_module_infoRepository = sys_module_infoRepository;
  35. _sys_modulebutton_infoRepository= sys_modulebutton_infoRepository;
  36. _logger = logger;
  37. }
  38. /// <summary>
  39. /// 保存当前选中的权限
  40. /// </summary>
  41. /// <param name="functionIds"></param>
  42. /// <param name="roleId"></param>
  43. /// <returns></returns>
  44. [HttpPost("saverolefunction")]
  45. public async Task<IActionResult> SaveRoleFunctionAsync(string[] ids, string role_id)
  46. {
  47. if (ids == null)
  48. return Error("参数错误");
  49. var list_model = new List<Sys_Role_Function>();
  50. await _sys_role_functionRepository.Remove(x=>x.role_id==role_id);
  51. foreach (var funcId in ids)
  52. {
  53. // Moudle_11 Button_13
  54. string[] _array = funcId.Split('_');
  55. var _enum = (EnumRoleControlType)Enum.Parse(typeof(EnumRoleControlType), _array[0]);
  56. var model = new Sys_Role_Function();
  57. model.role_id = role_id;
  58. model.function_id= _array[1];
  59. model.function_type = (int)_enum;
  60. model.role_type = 1;
  61. list_model.Add(model);
  62. }
  63. if (await _sys_role_functionRepository.AddRange(list_model))
  64. {
  65. return Success("权限设置成功!");
  66. }
  67. else
  68. {
  69. return Error("权限设置失败!");
  70. }
  71. }
  72. /// <summary>
  73. /// 获取用户权限树形结构
  74. /// </summary>
  75. /// <param name="roleId"></param>
  76. /// <returns></returns>
  77. [HttpGet("getrolefunction")]
  78. public async Task<IActionResult> GetRoleFunctionAsync(string role_id)
  79. {
  80. var moduleInfoList = (await _sys_module_infoRepository.Get(x=>x.state_flag==1)).OrderBy(x => x.sort).ThenBy(x=>x.parent_id).ThenByDescending(x=>x.lastmodify_time).ToList();
  81. var moduleInfoButtonList = (await _sys_modulebutton_infoRepository.Get(x => x.state_flag == 1)).OrderBy(x => x.sort).ToList();
  82. var roleFunctionlist = (await _sys_role_functionRepository.Get(x => x.role_id == role_id)).Select(x => new { x.function_id, x.function_type });
  83. var treeList = new List<Models.Dto.RoleFDto>();
  84. foreach (var item in moduleInfoList.ToArray())
  85. {
  86. //判断父菜单是否使用 (循环所有父父,祖宗之上均能判断)
  87. if (item.parent_id != "000000000000000000000000")
  88. {
  89. if (moduleInfoList.Count(t => t.id == item.parent_id) == 0)
  90. {
  91. moduleInfoList.Remove(item);
  92. continue;
  93. }
  94. }
  95. Models.Dto.RoleFDto tree = new Models.Dto.RoleFDto();
  96. tree.id = EnumRoleControlType.Moudle.ToString() + "_" + item.id.ToString();
  97. tree.pid = EnumRoleControlType.Moudle.ToString() + "_" + item.parent_id.ToString();
  98. tree.name = item.module_name;
  99. tree.ischecked = roleFunctionlist.Count(t => (t.function_id == item.id && t.function_type == (int)EnumRoleControlType.Moudle)) == 0 ? false : true;
  100. tree.type = EnumRoleControlType.Moudle.ToString();
  101. treeList.Add(tree);
  102. }
  103. foreach (var item in moduleInfoButtonList)
  104. {
  105. //如果在菜单中找不到按钮归属的菜单id,那么证明此菜单禁用或者被删除,所以不需要显示按钮
  106. if (moduleInfoList.Count(t => t.id == item.moudle_id) == 0) continue;
  107. Models.Dto.RoleFDto tree = new Models.Dto.RoleFDto();
  108. tree.id = EnumRoleControlType.Button.ToString() + "_" + item.id.ToString();
  109. tree.pid = EnumRoleControlType.Moudle.ToString() + "_" + item.moudle_id.ToString();
  110. tree.name = item.full_name;
  111. tree.ischecked = roleFunctionlist.Count(t => (t.function_id == item.id && t.function_type == (int)EnumRoleControlType.Button)) == 0 ? false : true;
  112. tree.type = EnumRoleControlType.Button.ToString();
  113. treeList.Add(tree);
  114. }
  115. return Success("权限树形加载成功", treeList);
  116. }
  117. }
  118. }