PermissionChecker.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Threading.Tasks;
  2. using Abp;
  3. using Abp.Authorization;
  4. using Abp.Dependency;
  5. using Abp.Domain.Uow;
  6. using Abp.Runtime.Session;
  7. using Castle.Core.Logging;
  8. using IwbZero.Authorization.Roles;
  9. using IwbZero.Authorization.Users;
  10. namespace IwbZero.Authorization.Permissions
  11. {
  12. /// <summary>
  13. /// Application should inherit this class to implement <see cref="IPermissionChecker"/>.
  14. /// </summary>
  15. public abstract class IwbPermissionChecker<TRole, TUser> : IPermissionChecker, ITransientDependency, IIocManagerAccessor
  16. where TRole : IwbSysRole<TUser>, new()
  17. where TUser : IwbSysUser<TUser>, new()
  18. {
  19. private readonly IwbUserManager<TRole, TUser> _userManager;
  20. public IIocManager IocManager { get; set; }
  21. public ILogger Logger { get; set; }
  22. public IAbpSession AbpSession { get; set; }
  23. public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; }
  24. /// <summary>
  25. /// Constructor.
  26. /// </summary>
  27. protected IwbPermissionChecker(IwbUserManager<TRole, TUser> userManager)
  28. {
  29. _userManager = userManager;
  30. Logger = NullLogger.Instance;
  31. AbpSession = NullAbpSession.Instance;
  32. }
  33. public async Task<bool> IsGrantedAsync(string permissionName)
  34. {
  35. if (AbpSession.UserId.HasValue)
  36. {
  37. if (AbpSession.UserId == 1)
  38. return true;
  39. return await _userManager.IsGrantedAsync(AbpSession.UserId.Value, permissionName);
  40. }
  41. return false;
  42. }
  43. public async Task<bool> IsGrantedAsync(long userId, string permissionName)
  44. {
  45. return await _userManager.IsGrantedAsync(userId, permissionName);
  46. }
  47. [UnitOfWork]
  48. public async Task<bool> IsGrantedAsync(UserIdentifier user, string permissionName)
  49. {
  50. if (CurrentUnitOfWorkProvider == null || CurrentUnitOfWorkProvider.Current == null)
  51. {
  52. return await IsGrantedAsync(user.UserId, permissionName);
  53. }
  54. using (CurrentUnitOfWorkProvider.Current.SetTenantId(user.TenantId))
  55. {
  56. return await _userManager.IsGrantedAsync(user.UserId, permissionName);
  57. }
  58. }
  59. }
  60. }