using Abp; using Abp.Authorization; using Abp.Dependency; using Abp.Domain.Uow; using Castle.Core.Logging; using VberZero.Authorization.Users; using VberZero.Session; using ILogger = Castle.Core.Logging.ILogger; namespace VberZero.Authorization; /// /// 应用程序应该继承这个类来实现。 /// public class VzPermissionChecker : IPermissionChecker, ITransientDependency, IIocManagerAccessor { private readonly VzUserManager _userManager; public IIocManager IocManager { get; set; } public ILogger Logger { get; set; } public IVzSession AbpSession { get; set; } public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; } public IUnitOfWorkManager UnitOfWorkManager { get; set; } public VzPermissionChecker(VzUserManager userManager) { _userManager = userManager; Logger = NullLogger.Instance; AbpSession = NullVzSession.Instance; } public virtual async Task IsGrantedAsync(string permissionName) { return AbpSession.UserId.HasValue && await IsGrantedAsync(AbpSession.UserId.Value, permissionName); } public virtual bool IsGranted(string permissionName) { return AbpSession.UserId.HasValue && IsGranted(AbpSession.UserId.Value, permissionName); } public virtual async Task IsGrantedAsync(long userId, string permissionName) { return await _userManager.IsGrantedAsync(userId, permissionName); } public virtual bool IsGranted(long userId, string permissionName) { return _userManager.IsGranted(userId, permissionName); } public virtual async Task IsGrantedAsync(UserIdentifier user, string permissionName) { return await UnitOfWorkManager.WithUnitOfWorkAsync(async () => { if (CurrentUnitOfWorkProvider.Current == null) { return await IsGrantedAsync(user.UserId, permissionName); } using (CurrentUnitOfWorkProvider.Current.SetTenantId(user.TenantId)) { return await IsGrantedAsync(user.UserId, permissionName); } }); } public virtual bool IsGranted(UserIdentifier user, string permissionName) { return UnitOfWorkManager.WithUnitOfWork(() => { if (CurrentUnitOfWorkProvider.Current == null) { return IsGranted(user.UserId, permissionName); } using (CurrentUnitOfWorkProvider.Current.SetTenantId(user.TenantId)) { return IsGranted(user.UserId, permissionName); } }); } }