using System.Threading.Tasks; using Abp; using Abp.Authorization; using Abp.Dependency; using Abp.Domain.Uow; using Castle.Core.Logging; using IwbZero.Authorization.Roles; using IwbZero.Authorization.Users; using IwbZero.Runtime.Session; namespace IwbZero.Authorization.Permissions { /// /// Application should inherit this class to implement . /// /// /// public abstract class PermissionChecker : IPermissionChecker, ITransientDependency, IIocManagerAccessor where TRole : IwbSysRole, new() where TUser : IwbSysUser { private readonly IwbUserManager _userManager; public IIocManager IocManager { get; set; } public ILogger Logger { get; set; } public IIwbSession AbpSession { get; set; } public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; } /// /// Constructor. /// protected PermissionChecker(IwbUserManager userManager) { _userManager = userManager; Logger = NullLogger.Instance; AbpSession = NullIwbSession.Instance; } public virtual async Task IsGrantedAsync(string permissionName) { return AbpSession.UserId.HasValue && await _userManager.IsGrantedAsync(AbpSession.UserId.Value, permissionName); } public virtual async Task IsGrantedAsync(long userId, string permissionName) { return await _userManager.IsGrantedAsync(userId, permissionName); } [UnitOfWork] public virtual async Task IsGrantedAsync(UserIdentifier user, string permissionName) { if (CurrentUnitOfWorkProvider == null || CurrentUnitOfWorkProvider.Current == null) { return await IsGrantedAsync(user.UserId, permissionName); } using (CurrentUnitOfWorkProvider.Current.SetTenantId(user.TenantId)) { return await _userManager.IsGrantedAsync(user.UserId, permissionName); } } } }