PermissionChecker.cs 2.2 KB

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