PermissionChecker.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Abp;
  2. using Abp.Authorization;
  3. using Abp.Dependency;
  4. using Abp.Domain.Uow;
  5. using Castle.Core.Logging;
  6. using VberZero.Authorization.Users;
  7. using VberZero.Session;
  8. using ILogger = Castle.Core.Logging.ILogger;
  9. namespace VberZero.Authorization;
  10. /// <summary>
  11. /// 应用程序应该继承这个类来实现<see cref="IPermissionChecker"/>。
  12. /// </summary>
  13. public class VzPermissionChecker : IPermissionChecker, ITransientDependency, IIocManagerAccessor
  14. {
  15. private readonly VzUserManager _userManager;
  16. public IIocManager IocManager { get; set; }
  17. public ILogger Logger { get; set; }
  18. public IVzSession AbpSession { get; set; }
  19. public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; }
  20. public IUnitOfWorkManager UnitOfWorkManager { get; set; }
  21. public VzPermissionChecker(VzUserManager userManager)
  22. {
  23. _userManager = userManager;
  24. Logger = NullLogger.Instance;
  25. AbpSession = NullVzSession.Instance;
  26. }
  27. public virtual async Task<bool> IsGrantedAsync(string permissionName)
  28. {
  29. return AbpSession.UserId.HasValue && await IsGrantedAsync(AbpSession.UserId.Value, permissionName);
  30. }
  31. public virtual bool IsGranted(string permissionName)
  32. {
  33. return AbpSession.UserId.HasValue && IsGranted(AbpSession.UserId.Value, permissionName);
  34. }
  35. public virtual async Task<bool> IsGrantedAsync(long userId, string permissionName)
  36. {
  37. return await _userManager.IsGrantedAsync(userId, permissionName);
  38. }
  39. public virtual bool IsGranted(long userId, string permissionName)
  40. {
  41. return _userManager.IsGranted(userId, permissionName);
  42. }
  43. public virtual async Task<bool> IsGrantedAsync(UserIdentifier user, string permissionName)
  44. {
  45. return await UnitOfWorkManager.WithUnitOfWorkAsync(async () =>
  46. {
  47. if (CurrentUnitOfWorkProvider.Current == null)
  48. {
  49. return await IsGrantedAsync(user.UserId, permissionName);
  50. }
  51. using (CurrentUnitOfWorkProvider.Current.SetTenantId(user.TenantId))
  52. {
  53. return await IsGrantedAsync(user.UserId, permissionName);
  54. }
  55. });
  56. }
  57. public virtual bool IsGranted(UserIdentifier user, string permissionName)
  58. {
  59. return UnitOfWorkManager.WithUnitOfWork(() =>
  60. {
  61. if (CurrentUnitOfWorkProvider.Current == null)
  62. {
  63. return IsGranted(user.UserId, permissionName);
  64. }
  65. using (CurrentUnitOfWorkProvider.Current.SetTenantId(user.TenantId))
  66. {
  67. return IsGranted(user.UserId, permissionName);
  68. }
  69. });
  70. }
  71. }