2020-12-20 08:36:11 +01:00
|
|
|
// Copyright (c) Umbraco.
|
|
|
|
|
// See LICENSE for more details.
|
|
|
|
|
|
|
|
|
|
using Moq;
|
2016-02-17 10:59:48 +01:00
|
|
|
using NUnit.Framework;
|
2021-03-05 15:36:27 +01:00
|
|
|
using Umbraco.Cms.Core.Cache;
|
2021-02-18 11:06:02 +01:00
|
|
|
using Umbraco.Cms.Core.Models;
|
|
|
|
|
using Umbraco.Cms.Core.Models.Entities;
|
|
|
|
|
using Umbraco.Cms.Core.Models.Membership;
|
|
|
|
|
using Umbraco.Cms.Core.Security;
|
|
|
|
|
using Umbraco.Cms.Core.Services;
|
|
|
|
|
using Umbraco.Cms.Tests.Common.Builders;
|
|
|
|
|
using Umbraco.Cms.Tests.Common.Builders.Extensions;
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Security;
|
|
|
|
|
|
|
|
|
|
[TestFixture]
|
|
|
|
|
public class ContentPermissionsTests
|
2016-02-17 10:59:48 +01:00
|
|
|
{
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void Access_Allowed_By_Path()
|
2020-06-17 16:39:28 +02:00
|
|
|
{
|
2022-06-21 08:09:38 +02:00
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(9);
|
|
|
|
|
var contentMock = new Mock<IContent>();
|
|
|
|
|
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
|
|
|
|
|
var content = contentMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
contentServiceMock.Setup(x => x.GetById(1234)).Returns(content);
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = contentPermissions.CheckPermissions(1234, user, out IContent _);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Granted, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Content_Found()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(9);
|
|
|
|
|
var contentMock = new Mock<IContent>();
|
|
|
|
|
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
|
|
|
|
|
var content = contentMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
contentServiceMock.Setup(x => x.GetById(0)).Returns(content);
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var permissions = new EntityPermissionCollection();
|
|
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-1,1234,5678")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(1234, user, out IContent _, new[] { "F" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.NotFound, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Access_By_Path()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(9, 9876);
|
|
|
|
|
var contentMock = new Mock<IContent>();
|
|
|
|
|
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
|
|
|
|
|
var content = contentMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
contentServiceMock.Setup(x => x.GetById(1234)).Returns(content);
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var permissions = new EntityPermissionCollection();
|
|
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-1,1234")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
|
|
|
.Returns(new[] { Mock.Of<TreeEntityPath>(entity => entity.Id == 9876 && entity.Path == "-1,9876") });
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(1234, user, out IContent _, new[] { "F" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Denied, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Access_By_Permission()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(9);
|
|
|
|
|
var contentMock = new Mock<IContent>();
|
|
|
|
|
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
|
|
|
|
|
var content = contentMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
contentServiceMock.Setup(x => x.GetById(1234)).Returns(content);
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
2024-02-27 20:57:02 +00:00
|
|
|
var permissions = new EntityPermissionCollection { new(9876, 1234, new[] { "A", "B", "C" }.ToHashSet()) };
|
2022-06-21 08:09:38 +02:00
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-1,1234,5678")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(1234, user, out IContent _, new[] { "F" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Denied, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void Access_Allowed_By_Permission()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(9);
|
|
|
|
|
var contentMock = new Mock<IContent>();
|
|
|
|
|
contentMock.Setup(c => c.Path).Returns("-1,1234,5678");
|
|
|
|
|
var content = contentMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
contentServiceMock.Setup(x => x.GetById(1234)).Returns(content);
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
2024-02-27 20:57:02 +00:00
|
|
|
var permissions = new EntityPermissionCollection { new(9876, 1234, new[] { "A", "F", "C" }.ToHashSet()) };
|
2022-06-21 08:09:38 +02:00
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-1,1234,5678")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(1234, user, out IContent _, new[] { "F" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Granted, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void Access_To_Root_By_Path()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser();
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = contentPermissions.CheckPermissions(-1, user, out IContent _);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Granted, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void Access_To_Recycle_Bin_By_Path()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser();
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = contentPermissions.CheckPermissions(-20, user, out IContent _);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Granted, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Access_To_Recycle_Bin_By_Path()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(startContentId: 1234);
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
|
|
|
.Returns(new[] { Mock.Of<TreeEntityPath>(entity => entity.Id == 1234 && entity.Path == "-1,1234") });
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = contentPermissions.CheckPermissions(-20, user, out IContent _);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Denied, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Access_To_Root_By_Path()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(startContentId: 1234);
|
|
|
|
|
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
entityServiceMock.Setup(x => x.GetAllPaths(It.IsAny<UmbracoObjectTypes>(), It.IsAny<int[]>()))
|
|
|
|
|
.Returns(new[] { Mock.Of<TreeEntityPath>(entity => entity.Id == 1234 && entity.Path == "-1,1234") });
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = contentPermissions.CheckPermissions(-1, user, out IContent _);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Denied, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void Access_To_Root_By_Permission()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser();
|
|
|
|
|
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
2024-02-27 20:57:02 +00:00
|
|
|
var permissions = new EntityPermissionCollection { new(9876, 1234, new[] { "A" }.ToHashSet()) };
|
2022-06-21 08:09:38 +02:00
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-1")).Returns(permissionSet);
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(-1, user, out IContent _, new[] { "A" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Granted, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Access_To_Root_By_Permission()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(withUserGroup: false);
|
|
|
|
|
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
2024-02-27 20:57:02 +00:00
|
|
|
var permissions = new EntityPermissionCollection { new(9876, 1234, new[] { "A" }.ToHashSet()) };
|
2022-06-21 08:09:38 +02:00
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-1")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(-1, user, out IContent _, new[] { "B" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Denied, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void Access_To_Recycle_Bin_By_Permission()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser();
|
|
|
|
|
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
2024-02-27 20:57:02 +00:00
|
|
|
var permissions = new EntityPermissionCollection { new(9876, 1234, new[] { "A" }.ToHashSet()) };
|
2022-06-21 08:09:38 +02:00
|
|
|
var permissionSet = new EntityPermissionSet(-20, permissions);
|
|
|
|
|
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-20")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(-20, user, out IContent _, new[] { "A" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Granted, result);
|
|
|
|
|
}
|
2016-02-17 10:59:48 +01:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
[Test]
|
|
|
|
|
public void No_Access_To_Recycle_Bin_By_Permission()
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var user = CreateUser(withUserGroup: false);
|
|
|
|
|
|
|
|
|
|
var userServiceMock = new Mock<IUserService>();
|
2024-02-27 20:57:02 +00:00
|
|
|
var permissions = new EntityPermissionCollection { new(9876, 1234, new[] { "A" }.ToHashSet()) };
|
2022-06-21 08:09:38 +02:00
|
|
|
var permissionSet = new EntityPermissionSet(1234, permissions);
|
|
|
|
|
userServiceMock.Setup(x => x.GetPermissionsForPath(user, "-20")).Returns(permissionSet);
|
|
|
|
|
var userService = userServiceMock.Object;
|
|
|
|
|
var entityServiceMock = new Mock<IEntityService>();
|
|
|
|
|
var entityService = entityServiceMock.Object;
|
|
|
|
|
var contentServiceMock = new Mock<IContentService>();
|
|
|
|
|
var contentService = contentServiceMock.Object;
|
|
|
|
|
var contentPermissions = new ContentPermissions(userService, contentService, entityService, AppCaches.Disabled);
|
|
|
|
|
|
|
|
|
|
// Act
|
2024-02-27 20:57:02 +00:00
|
|
|
var result = contentPermissions.CheckPermissions(-20, user, out IContent _, new[] { "B" }.ToHashSet());
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(ContentPermissions.ContentAccess.Denied, result);
|
|
|
|
|
}
|
2020-10-06 12:02:29 +02:00
|
|
|
|
2022-06-21 08:09:38 +02:00
|
|
|
private IUser CreateUser(int id = 0, int? startContentId = null, bool withUserGroup = true)
|
|
|
|
|
{
|
|
|
|
|
var builder = new UserBuilder()
|
|
|
|
|
.WithId(id)
|
|
|
|
|
.WithStartContentIds(startContentId.HasValue ? new[] { startContentId.Value } : new int[0]);
|
|
|
|
|
if (withUserGroup)
|
2020-10-06 12:02:29 +02:00
|
|
|
{
|
2022-06-21 08:09:38 +02:00
|
|
|
builder = builder
|
2020-10-06 12:02:29 +02:00
|
|
|
.AddUserGroup()
|
2022-06-21 08:09:38 +02:00
|
|
|
.WithId(1)
|
|
|
|
|
.WithName("admin")
|
|
|
|
|
.WithAlias("admin")
|
|
|
|
|
.Done();
|
2020-10-06 12:02:29 +02:00
|
|
|
}
|
2022-06-21 08:09:38 +02:00
|
|
|
|
|
|
|
|
return builder.Build();
|
2016-02-17 10:59:48 +01:00
|
|
|
}
|
|
|
|
|
}
|