IdentityService.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // 大名科技(天津)有限公司 版权所有
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动
  6. //
  7. // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
  8. using System.Security.Claims;
  9. namespace Admin.NET.Core.Service;
  10. /// <summary>
  11. /// 权限验证
  12. /// </summary>
  13. public class IdentityService : ITransient
  14. {
  15. private readonly IHttpContextAccessor _context;
  16. private readonly List<APIJSON_Role> _roles;
  17. public IdentityService(IHttpContextAccessor context, IOptions<APIJSONOptions> roles)
  18. {
  19. _context = context ?? throw new ArgumentNullException(nameof(context));
  20. _roles = roles.Value.Roles;
  21. }
  22. /// <summary>
  23. /// 获取当前用户Id
  24. /// </summary>
  25. /// <returns></returns>
  26. public string GetUserIdentity()
  27. {
  28. return _context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
  29. }
  30. /// <summary>
  31. /// 获取当前用户权限名称
  32. /// </summary>
  33. /// <returns></returns>
  34. public string GetUserRoleName()
  35. {
  36. return _context.HttpContext.User.FindFirstValue(ClaimTypes.Role);
  37. }
  38. /// <summary>
  39. /// 获取当前用户权限
  40. /// </summary>
  41. /// <returns></returns>
  42. public APIJSON_Role GetRole()
  43. {
  44. var role = string.IsNullOrEmpty(GetUserRoleName())
  45. ? _roles.FirstOrDefault()
  46. : _roles.FirstOrDefault(it => it.RoleName.Equals(GetUserRoleName(), StringComparison.CurrentCultureIgnoreCase));
  47. return role;
  48. }
  49. /// <summary>
  50. /// 获取当前表的可查询字段
  51. /// </summary>
  52. /// <param name="table"></param>
  53. /// <returns></returns>
  54. public (bool, string) GetSelectRole(string table)
  55. {
  56. var role = GetRole();
  57. if (role == null || role.Select == null || role.Select.Table == null)
  58. return (false, $"appsettings.json权限配置不正确!");
  59. var tablerole = role.Select.Table.FirstOrDefault(it => it == "*" || it.Equals(table, StringComparison.CurrentCultureIgnoreCase));
  60. if (string.IsNullOrEmpty(tablerole))
  61. return (false, $"表名{table}没权限查询!");
  62. var index = Array.IndexOf(role.Select.Table, tablerole);
  63. var selectrole = role.Select.Column[index];
  64. return (true, selectrole);
  65. }
  66. /// <summary>
  67. /// 当前列是否在角色里面
  68. /// </summary>
  69. /// <param name="col"></param>
  70. /// <param name="selectrole"></param>
  71. /// <returns></returns>
  72. public bool ColIsRole(string col, string[] selectrole)
  73. {
  74. if (selectrole.Contains("*")) return true;
  75. if (col.Contains('(') && col.Contains(')'))
  76. {
  77. var reg = new Regex(@"\(([^)]*)\)");
  78. var match = reg.Match(col);
  79. return selectrole.Contains(match.Result("$1"), StringComparer.CurrentCultureIgnoreCase);
  80. }
  81. else
  82. {
  83. return selectrole.Contains(col, StringComparer.CurrentCultureIgnoreCase);
  84. }
  85. }
  86. }