IdentityService.cs 2.9 KB

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