| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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
- {
- /// <summary>
- /// Application should inherit this class to implement <see cref="IPermissionChecker"/>.
- /// </summary>
- /// <typeparam name="TRole"></typeparam>
- /// <typeparam name="TUser"></typeparam>
- public abstract class PermissionChecker<TRole, TUser> : IPermissionChecker, ITransientDependency, IIocManagerAccessor
- where TRole : IwbSysRole<TUser>, new()
- where TUser : IwbSysUser<TUser>
- {
- private readonly IwbUserManager<TRole, TUser> _userManager;
- public IIocManager IocManager { get; set; }
- public ILogger Logger { get; set; }
- public IIwbSession AbpSession { get; set; }
- public ICurrentUnitOfWorkProvider CurrentUnitOfWorkProvider { get; set; }
- /// <summary>
- /// Constructor.
- /// </summary>
- protected PermissionChecker(IwbUserManager<TRole, TUser> userManager)
- {
- _userManager = userManager;
- Logger = NullLogger.Instance;
- AbpSession = NullIwbSession.Instance;
- }
- public virtual async Task<bool> IsGrantedAsync(string permissionName)
- {
- return AbpSession.UserId.HasValue && await _userManager.IsGrantedAsync(AbpSession.UserId.Value, permissionName);
- }
- public virtual async Task<bool> IsGrantedAsync(long userId, string permissionName)
- {
- return await _userManager.IsGrantedAsync(userId, permissionName);
- }
- [UnitOfWork]
- public virtual async Task<bool> 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);
- }
- }
- }
- }
|