protected internal virtual void OnOptionsChange(ExtendedAuthorizationOptions options, string name)
        {
            this.Logger.LogDebugIfEnabled($"Options-change in \"{this.GetType()}\", options of type \"{options?.GetType()}\" and name {(name != null ? $"\"{name}\"" : "null")}. Setting permission-providers and role-providers to null.");

            lock (this.PermissionProvidersLock)
            {
                this._permissionProviders = null;
            }

            lock (this.RoleProvidersLock)
            {
                this._roleProviders = null;
            }
        }
 protected internal virtual async Task <WindowsRoleProvider> CreateWindowsRoleProviderAsync(LoggerFactoryMock loggerFactory, ExtendedAuthorizationOptions options = null)
 {
     return(await Task.FromResult(new WindowsRoleProvider(await this.CreateMemoryCacheAsync(), new ClaimsPrincipalHelper(), loggerFactory, await this.CreateOptionsMonitorAsync(options))));
 }
 protected internal virtual async Task <IOptionsMonitor <ExtendedAuthorizationOptions> > CreateOptionsMonitorAsync(ExtendedAuthorizationOptions options = null)
 {
     return(await Task.FromResult(Mock.Of <IOptionsMonitor <ExtendedAuthorizationOptions> >(optionsMonitor => optionsMonitor.CurrentValue == (options ?? new ExtendedAuthorizationOptions()))));
 }
        protected internal virtual async Task GetRolesAsyncTest(bool builtInRolesEnabled, string domain, string errorMessage, bool machineRolesEnabled, IPrincipal principal, IdentityReferenceCollection windowsGroups)
        {
            if (domain == null)
            {
                throw new ArgumentNullException(nameof(domain));
            }

            if (principal == null)
            {
                throw new ArgumentNullException(nameof(principal));
            }

            if (windowsGroups == null)
            {
                throw new ArgumentNullException(nameof(windowsGroups));
            }

            var options = new ExtendedAuthorizationOptions
            {
                Roles =
                {
                    Windows                 =
                    {
                        BuiltInRolesEnabled = builtInRolesEnabled,
                        MachineRolesEnabled = machineRolesEnabled
                    }
                }
            };

            var expectedRoles = windowsGroups.AsRoles(options.Roles.Windows);

            using (var loggerFactory = new LoggerFactoryMock())
            {
                var windowsRoleProvider = await this.CreateWindowsRoleProviderAsync(loggerFactory, options);

                var roles = (await windowsRoleProvider.GetRolesAsync(principal)).ToArray();
                Assert.AreEqual(expectedRoles.Count, roles.Length, errorMessage);

                for (var i = 0; i < roles.Length; i++)
                {
                    var role = roles[i];

                    // ReSharper disable All
                    if (!builtInRolesEnabled && !machineRolesEnabled)
                    {
                        Assert.IsTrue(role.StartsWith($"{domain}\\", StringComparison.OrdinalIgnoreCase), errorMessage);
                    }
                    else if (builtInRolesEnabled && !machineRolesEnabled)
                    {
                        Assert.IsFalse(role.StartsWith(Environment.MachineName, StringComparison.OrdinalIgnoreCase), errorMessage);
                    }
                    else if (!builtInRolesEnabled && machineRolesEnabled)
                    {
                        Assert.IsTrue(role.StartsWith($"{domain}\\", StringComparison.OrdinalIgnoreCase) || role.StartsWith(Environment.MachineName, StringComparison.OrdinalIgnoreCase), errorMessage);
                    }
                    // ReSharper restore All

                    Assert.AreEqual(expectedRoles.ElementAt(i), role, errorMessage);
                }
            }
        }