| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using System.Collections.Generic;
- using System.Collections.Immutable;
- using System.Linq;
- using Abp.Application.Features;
- using Abp.Collections.Extensions;
- using Abp.Configuration.Startup;
- using Abp.Dependency;
- using Abp.MultiTenancy;
- using Abp.Runtime.Session;
- namespace Abp.Authorization
- {
- /// <summary>
- /// Permission manager.
- /// </summary>
- internal class PermissionManager : PermissionDefinitionContextBase, IPermissionManager, ISingletonDependency
- {
- public IAbpSession AbpSession { get; set; }
- private readonly IIocManager _iocManager;
- private readonly IAuthorizationConfiguration _authorizationConfiguration;
- /// <summary>
- /// Constructor.
- /// </summary>
- public PermissionManager(
- IIocManager iocManager,
- IAuthorizationConfiguration authorizationConfiguration)
- {
- _iocManager = iocManager;
- _authorizationConfiguration = authorizationConfiguration;
- AbpSession = NullAbpSession.Instance;
- }
- public void Initialize()
- {
- foreach (var providerType in _authorizationConfiguration.Providers)
- {
- using (var provider = _iocManager.ResolveAsDisposable<AuthorizationProvider>(providerType))
- {
- provider.Object.SetPermissions(this);
- }
- }
- Permissions.AddAllPermissions();
- }
- public Permission GetPermission(string name)
- {
- var permission = Permissions.GetOrDefault(name);
- if (permission == null)
- {
- throw new AbpException("There is no permission with name: " + name);
- }
- return permission;
- }
- public IReadOnlyList<Permission> GetAllPermissions(bool tenancyFilter = true)
- {
- using (var featureDependencyContext = _iocManager.ResolveAsDisposable<FeatureDependencyContext>())
- {
- var featureDependencyContextObject = featureDependencyContext.Object;
- return Permissions.Values
- .WhereIf(tenancyFilter, p => p.MultiTenancySides.HasFlag(AbpSession.MultiTenancySide))
- .Where(p =>
- p.FeatureDependency == null ||
- AbpSession.MultiTenancySide == MultiTenancySides.Host ||
- p.FeatureDependency.IsSatisfied(featureDependencyContextObject)
- ).ToImmutableList();
- }
- }
- public IReadOnlyList<Permission> GetAllPermissions(MultiTenancySides multiTenancySides)
- {
- using (var featureDependencyContext = _iocManager.ResolveAsDisposable<FeatureDependencyContext>())
- {
- var featureDependencyContextObject = featureDependencyContext.Object;
- return Permissions.Values
- .Where(p => p.MultiTenancySides.HasFlag(multiTenancySides))
- .Where(p =>
- p.FeatureDependency == null ||
- AbpSession.MultiTenancySide == MultiTenancySides.Host ||
- (p.MultiTenancySides.HasFlag(MultiTenancySides.Host) &&
- multiTenancySides.HasFlag(MultiTenancySides.Host)) ||
- p.FeatureDependency.IsSatisfied(featureDependencyContextObject)
- ).ToImmutableList();
- }
- }
- }
- }
|