IdentityService.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. using System.Security.Claims;
  5. namespace Admin.NET.Core.Service;
  6. public class IdentityService : ITransient
  7. {
  8. private readonly IHttpContextAccessor _context;
  9. private readonly List<APIJSON_Role> _roles;
  10. public IdentityService(IHttpContextAccessor context, IOptions<APIJSONOptions> roles)
  11. {
  12. _context = context ?? throw new ArgumentNullException(nameof(context));
  13. _roles = roles.Value.Roles;
  14. }
  15. /// <summary>
  16. /// 获取当前用户Id
  17. /// </summary>
  18. /// <returns></returns>
  19. public string GetUserIdentity()
  20. {
  21. return _context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
  22. }
  23. /// <summary>
  24. /// 获取当前用户权限名称
  25. /// </summary>
  26. /// <returns></returns>
  27. public string GetUserRoleName()
  28. {
  29. return _context.HttpContext.User.FindFirstValue(ClaimTypes.Role);
  30. }
  31. /// <summary>
  32. /// 获取当前用户权限
  33. /// </summary>
  34. /// <returns></returns>
  35. public APIJSON_Role GetRole()
  36. {
  37. var role = new APIJSON_Role();
  38. if (string.IsNullOrEmpty(GetUserRoleName())) // 若没登录默认取第一个
  39. {
  40. role = _roles.FirstOrDefault();
  41. }
  42. else
  43. {
  44. role = _roles.FirstOrDefault(it => it.RoleName.Equals(GetUserRoleName(), StringComparison.CurrentCultureIgnoreCase));
  45. }
  46. return role;
  47. }
  48. /// <summary>
  49. /// 获取当前表的可查询字段
  50. /// </summary>
  51. /// <param name="table"></param>
  52. /// <returns></returns>
  53. public (bool, string) GetSelectRole(string table)
  54. {
  55. var role = GetRole();
  56. if (role == null || role.Select == null || role.Select.Table == null)
  57. {
  58. return (false, $"appsettings.json权限配置不正确!");
  59. }
  60. string tablerole = role.Select.Table.FirstOrDefault(it => it == "*" || it.Equals(table, StringComparison.CurrentCultureIgnoreCase));
  61. if (string.IsNullOrEmpty(tablerole))
  62. {
  63. return (false, $"表名{table}没权限查询!");
  64. }
  65. int index = Array.IndexOf(role.Select.Table, tablerole);
  66. string selectrole = role.Select.Column[index];
  67. return (true, selectrole);
  68. }
  69. /// <summary>
  70. /// 当前列是否在角色里面
  71. /// </summary>
  72. /// <param name="col"></param>
  73. /// <param name="selectrole"></param>
  74. /// <returns></returns>
  75. public bool ColIsRole(string col, string[] selectrole)
  76. {
  77. if (selectrole.Contains("*"))
  78. {
  79. return true;
  80. }
  81. else
  82. {
  83. if (col.Contains("(") && col.Contains(")"))
  84. {
  85. Regex reg = new Regex(@"\(([^)]*)\)");
  86. Match m = reg.Match(col);
  87. return selectrole.Contains(m.Result("$1"), StringComparer.CurrentCultureIgnoreCase);
  88. }
  89. else
  90. {
  91. return selectrole.Contains(col, StringComparer.CurrentCultureIgnoreCase);
  92. }
  93. }
  94. }
  95. }