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);
}
}
}
}