using System.Threading.Tasks; using Abp; using Abp.Authorization; using Abp.Dependency; using Abp.Domain.Uow; using Abp.Runtime.Session; using Castle.Core.Logging; using IwbZero.Authorization.Roles; using IwbZero.Authorization.Users; namespace IwbZero.Authorization.Permissions { /// /// Application should inherit this class to implement . /// public abstract class IwbPermissionChecker : IPermissionChecker, ITransientDependency, IIocManagerAccessor where TRole : IwbSysRole, new() where TUser : IwbSysUser, new() { private readonly IwbUserManager _userManager; public IIocManager IocManager { get; set; } public ILogger Logger { get; set; } public IAbpSession AbpSession { get; set; } public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; } /// /// Constructor. /// protected IwbPermissionChecker(IwbUserManager userManager) { _userManager = userManager; Logger = NullLogger.Instance; AbpSession = NullAbpSession.Instance; } public async Task IsGrantedAsync(string permissionName) { if (AbpSession.UserId.HasValue) { if (AbpSession.UserId == 1) return true; return await _userManager.IsGrantedAsync(AbpSession.UserId.Value, permissionName); } return false; } public async Task IsGrantedAsync(long userId, string permissionName) { return await _userManager.IsGrantedAsync(userId, permissionName); } [UnitOfWork] public 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); } } } }