* Removed obsoletes from IConfigManipulator. * Removed obsolete models builder extensions. * Removed the obsolete ContentDashboardSettings. * Removed the obsolete InstallMissingDatabase setting on GlobalSettings. * Removed obsolete NuCache settings. * Removed obsolete RuntimeMinificationSettings. * Removed obsolete health check constant. * Removed obsolete icon constant. * Removed obsolete telemetry constant. * Removed obsolete property and constructor on UmbracoBuilder. * Removed obsolete constructor on AuditNotificationsHandler. * Removed obsolete constructor on HTTP header health checks. * Removed obsolete constructor on MediaFileManager. * Removed obsolete GetDefaultFileContent on ViewHelper. * Remove obsoleted methods on embed providers. * Fix tests. * Removed obsolete constructors on BlockEditorDataConverter. * Removed obsolete SeedCacheDuration property on CacheSettings. * Removed obsolete PublishCulture on ContentRepositoryExtensions. * Removed obsolete MonitorLock. * Removed obsolete synchronous HasSavedValues from IDataTypeUsageService and IDataTypeUsageRepository. * Removed obsolete HasSavedPropertyValues from IPropertyTypeUsageService and IPropertyTypeUsageRepository. * Removed obsolete methods in ITrackedReferencesService and ITrackedReferencesRepository. * Removed obsolete DateValueEditor constructors. * Removed obsolete GetAutomaticRelationTypesAliases. * Removed obsolete constructor on TextOnlyValueEditor. * Removed obsolete constructors on RegexValidator and RequiredValidator. * Removed obsolete constructs on SliderValueConverter and TagsValueConverter. * Removed obsolete GetContentType methods from IPublishedCache. * Removed ContentFinderByIdPath. * Removed obsolete constructor on DefaultMediaUrlProvider. * Removed obsolete constructor on Domain. * Removed obsolete constructor on PublishedRequest. * Removed obsolete methods on CheckPermissions. * Removed obsolete GetUserId from IBackOfficeSecurity. * Removed obsolete methods on LegacyPasswordSecurity. * Removed obsolete constructors on AuditService. * Removed obsolete methods on IContentEditingService. * Remove obsolete constructors and methods on ContentService/IContentService. * Removed obsolete constructor in ContentTypeEditingService. * Removed obsolete constructor in MediaTypeEditingService. * Removed obsolete constructor in MemberTypeEditingService. * Removed obsolete constructor in ContentTypeService. * Removed obsolete constructors in ContentTypeServiceBase. * Removed obsolete constructors and methods in ContentVersionService. * Removed obsolete constructor in DataTypeUsageService. * Removed obsolete constructor in DomainService. * Removed obsolete constructor in FileService. * Removes obsolete AttemptMove from IContentService. * Removes obsolete SetPreventCleanup from IContentVersionService. * Removes obsolete GetReferences from IDataTypeService. * Removed obsolete SetConsentLevel from IMetricsConsentService. * Removed obsolete methods from IPackageDataInstallation. * Removed obsolete methods from IPackagingService. * Removed obsolete methods on ITwoFactorLoginService. Removed obsolete ITemporaryMediaService. * Removed obsolete constructor from MediaService, MemberTypeService and MediaTypeService. * More obsolete constructors. * Removed obsoleted overloads on IPropertyValidationService. * Fixed build for tests. * Removed obsolete constructor for PublicAccessService, UserService and RelationService. * Removed GetDefaultMemberType. * Removed obsolete user group functionality from IUserService. * Removed obsolete extension methods on IUserService. * Removed obsolete method from ITelemetryService. * Removed obsolete UdiParserServiceConnectors. * Removed obsolete method on ICookieManager. * Removed obsolete DynamicContext. * Removed obsolete XmlHelper. * Fixed failing integration tests. * Removed obsoletes in Umbraco.Cms.Api.Common * Removed obsoletes in Umbraco.Cms.Api.Delivery * Removed obsoletes in Umbraco.Cms.Api.Management * Removed obsoletes in Umbraco.Examine.Lucene * Removed obsoletes in Umbraco.Infrastructure * Fix failing delivery API contract integration test. * Made integration tests internal. * Removed obsoletes from web projects. * Fix build. * Removed Twitter OEmbed provider * Removed obsolete constructor on PublishedDataType. * Removed obsolete constructors on PublishedCacheBase. * Removed the obsolete PropertyEditorTagsExtensions. * Removed obsoletion properties on configuration response models (#18697) * Removed obsolete methods from server-side models. * Update client-side types and sdk. * Update client-side files. * Removed obsoletion of Utf8ToAsciiConverter.ToAsciiString overload. (#18694) * Removed obsolete method in UserService. (#18710) * Removed obsoleted group alias keys from being publicly available. (#18682) * Removed unneceessary ApiVersion attribute. * Clean-up obsoletions on MemberService (#18703) * Removed obsoleted method on MemberService, added future obsoletion to interface and updated all callers. * Removed obsoletion on member service method that's not obsolete on the interface.
422 lines
17 KiB
C#
422 lines
17 KiB
C#
// Copyright (c) Umbraco.
|
|
// See LICENSE for more details.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using Umbraco.Cms.Core;
|
|
using Umbraco.Cms.Core.Cache;
|
|
using Umbraco.Cms.Core.Editors;
|
|
using Umbraco.Cms.Core.Models;
|
|
using Umbraco.Cms.Core.Models.Entities;
|
|
using Umbraco.Cms.Core.Models.Membership;
|
|
using Umbraco.Cms.Core.Models.Membership.Permissions;
|
|
using Umbraco.Cms.Core.Services;
|
|
using Umbraco.Cms.Infrastructure.Migrations.Install;
|
|
using Umbraco.Cms.Tests.Common.Builders;
|
|
using Umbraco.Cms.Tests.Common.Builders.Extensions;
|
|
|
|
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Editors;
|
|
|
|
[TestFixture]
|
|
public class UserEditorAuthorizationHelperTests
|
|
{
|
|
[Test]
|
|
public void Admin_Is_Authorized()
|
|
{
|
|
var currentUser = CreateAdminUser();
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Non_Admin_Cannot_Save_Admin()
|
|
{
|
|
var currentUser = CreateUser();
|
|
var savingUser = CreateAdminUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new string[0]);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Cannot_Grant_Group_Membership_Without_Being_A_Member()
|
|
{
|
|
var currentUser = CreateUser(true);
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] { "FunGroup" });
|
|
|
|
Assert.IsFalse(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Grant_Group_Membership_With_Being_A_Member()
|
|
{
|
|
var currentUser = CreateUser(true);
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] { "test" });
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
[TestCase(Constants.Security.AdminGroupAlias, Constants.Security.AdminGroupAlias, ExpectedResult = true)]
|
|
[TestCase(Constants.Security.AdminGroupAlias, "SomethingElse", ExpectedResult = true)]
|
|
[TestCase(DatabaseDataCreator.EditorGroupAlias, Constants.Security.AdminGroupAlias, ExpectedResult = false)]
|
|
[TestCase(DatabaseDataCreator.EditorGroupAlias, "SomethingElse", ExpectedResult = false)]
|
|
[TestCase(DatabaseDataCreator.EditorGroupAlias, DatabaseDataCreator.EditorGroupAlias, ExpectedResult = true)]
|
|
public bool Can_only_add_user_groups_you_are_part_of_yourself_unless_you_are_admin(
|
|
string groupAlias,
|
|
string groupToAdd)
|
|
{
|
|
var currentUser = Mock.Of<IUser>(user => user.Groups == new[]
|
|
{
|
|
new ReadOnlyUserGroup(1, Guid.NewGuid(), "CurrentUser", "icon-user", null, null, groupAlias, new int[0], new string[0], new HashSet<string>(), new HashSet<IGranularPermission>(), true),
|
|
});
|
|
IUser savingUser = null; // This means it is a new created user
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new int[0], new[] { groupToAdd });
|
|
|
|
return result.Success;
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Add_Another_Content_Start_Node_On_User_With_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startContentIds: new[] { 9876 });
|
|
var savingUser = CreateUser(startContentIds: new[] { 1234 });
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
contentService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IContent>(content => content.Path == nodePaths[id]));
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// adding 5555 which currentUser has access to since it's a child of 9876 ... adding is still ok even though currentUser doesn't have access to 1234
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234, 5555 }, new int[0], new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Remove_Content_Start_Node_On_User_Without_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startContentIds: new[] { 9876 });
|
|
var savingUser = CreateUser(startContentIds: new[] { 1234, 4567 });
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
contentService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IContent>(content => content.Path == nodePaths[id]));
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// removing 4567 start node even though currentUser doesn't have acces to it ... removing is ok
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234 }, new int[0], new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Cannot_Add_Content_Start_Node_On_User_Without_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startContentIds: new[] { 9876 });
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
contentService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IContent>(content => content.Path == nodePaths[id]));
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// adding 1234 but currentUser doesn't have access to it ... nope
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 1234 }, new int[0], new string[0]);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Add_Content_Start_Node_On_User_With_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startContentIds: new[] { 9876 });
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
contentService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IContent>(content => content.Path == nodePaths[id]));
|
|
var mediaService = new Mock<IMediaService>();
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// adding 5555 which currentUser has access to since it's a child of 9876 ... ok
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new[] { 5555 }, new int[0], new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Cannot_Add_Media_Start_Node_On_User_Without_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
mediaService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IMedia>(content => content.Path == nodePaths[id]));
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// adding 1234 but currentUser doesn't have access to it ... nope
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234 }, new string[0]);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Add_Media_Start_Node_On_User_With_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
|
|
var savingUser = CreateUser();
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
mediaService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IMedia>(content => content.Path == nodePaths[id]));
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// adding 5555 which currentUser has access to since it's a child of 9876 ... ok
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 5555 }, new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Add_Another_Media_Start_Node_On_User_With_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
|
|
var savingUser = CreateUser(startMediaIds: new[] { 1234 });
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
mediaService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IMedia>(content => content.Path == nodePaths[id]));
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// adding 5555 which currentUser has access to since it's a child of 9876 ... adding is still ok even though currentUser doesn't have access to 1234
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234, 5555 }, new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
[Test]
|
|
public void Can_Remove_Media_Start_Node_On_User_Without_Access()
|
|
{
|
|
var nodePaths = new Dictionary<int, string>
|
|
{
|
|
{ 1234, "-1,1234" }, { 9876, "-1,9876" }, { 5555, "-1,9876,5555" }, { 4567, "-1,4567" },
|
|
};
|
|
|
|
var currentUser = CreateUser(startMediaIds: new[] { 9876 });
|
|
var savingUser = CreateUser(startMediaIds: new[] { 1234, 4567 });
|
|
|
|
var contentService = new Mock<IContentService>();
|
|
var mediaService = new Mock<IMediaService>();
|
|
mediaService.Setup(x => x.GetById(It.IsAny<int>()))
|
|
.Returns((int id) => Mock.Of<IMedia>(content => content.Path == nodePaths[id]));
|
|
var entityService = new Mock<IEntityService>();
|
|
entityService.Setup(service => service.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
.Returns((UmbracoObjectTypes objType, int[] ids) =>
|
|
ids.Select(x => new TreeEntityPath { Path = nodePaths[x], Id = x }));
|
|
|
|
var authHelper = new UserEditorAuthorizationHelper(
|
|
contentService.Object,
|
|
mediaService.Object,
|
|
entityService.Object,
|
|
AppCaches.Disabled);
|
|
|
|
// removing 4567 start node even though currentUser doesn't have acces to it ... removing is ok
|
|
var result = authHelper.IsAuthorized(currentUser, savingUser, new int[0], new[] { 1234 }, new string[0]);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
}
|
|
|
|
private static IUser CreateUser(bool withGroup = false, int[] startContentIds = null, int[] startMediaIds = null)
|
|
{
|
|
var builder = new UserBuilder()
|
|
.WithStartContentIds(startContentIds ?? new int[0])
|
|
.WithStartMediaIds(startMediaIds ?? new int[0]);
|
|
if (withGroup)
|
|
{
|
|
builder = (UserBuilder)builder
|
|
.AddUserGroup()
|
|
.WithName("Test")
|
|
.WithAlias("test")
|
|
.Done();
|
|
}
|
|
|
|
return builder.Build();
|
|
}
|
|
|
|
private static IUser CreateAdminUser() =>
|
|
new UserBuilder()
|
|
.AddUserGroup()
|
|
.WithId(1)
|
|
.WithName("Admin")
|
|
.WithAlias(Constants.Security.AdminGroupAlias)
|
|
.Done()
|
|
.Build();
|
|
}
|