Browse Source

Specific enums.

pull/131/head
Sebastian Stehle 9 years ago
parent
commit
21a079bde8
  1. 17
      src/Squidex.Domain.Apps.Core/Apps/AppClientPermission.cs
  2. 17
      src/Squidex.Domain.Apps.Core/Apps/AppContributorPermission.cs
  3. 4
      src/Squidex.Domain.Apps.Core/Apps/AppPermission.cs
  4. 30
      src/Squidex.Domain.Apps.Core/Apps/RoleExtension.cs
  5. 2
      src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs
  6. 2
      src/Squidex.Domain.Apps.Read.MongoDb/Apps/MongoAppEntityContributor.cs
  7. 2
      src/Squidex.Domain.Apps.Read/Apps/IAppContributorEntity.cs
  8. 12
      src/Squidex.Domain.Apps.Write/Apps/AppContributors.cs
  9. 2
      src/Squidex.Domain.Apps.Write/Apps/AppDomainObject.cs
  10. 7
      src/Squidex.Domain.Apps.Write/Apps/Commands/AssignContributor.cs
  11. 2
      src/Squidex/Controllers/Api/Apps/Models/AppDto.cs
  12. 2
      src/Squidex/Controllers/Api/Apps/Models/AssignAppContributorDto.cs
  13. 2
      src/Squidex/Controllers/Api/Apps/Models/ContributorDto.cs
  14. 14
      src/Squidex/Pipeline/AppApiFilter.cs
  15. 44
      tests/Squidex.Domain.Apps.Core.Tests/Apps/RoleExtensionTests.cs
  16. 14
      tests/Squidex.Domain.Apps.Write.Tests/Apps/AppDomainObjectTests.cs

17
src/Squidex.Domain.Apps.Core/Apps/AppClientPermission.cs

@ -0,0 +1,17 @@
// ==========================================================================
// AppClientPermission.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
namespace Squidex.Domain.Apps.Core.Apps
{
public enum AppClientPermission
{
Developer,
Editor,
Reader
}
}

17
src/Squidex.Domain.Apps.Core/Apps/AppContributorPermission.cs

@ -0,0 +1,17 @@
// ==========================================================================
// AppContributorPermission.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
namespace Squidex.Domain.Apps.Core.Apps
{
public enum AppContributorPermission
{
Owner,
Developer,
Editor
}
}

4
src/Squidex.Domain.Apps.Core/Apps/PermissionLevel.cs → src/Squidex.Domain.Apps.Core/Apps/AppPermission.cs

@ -1,5 +1,5 @@
// ==========================================================================
// PermissionLevel.cs
// AppPermission.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
@ -8,7 +8,7 @@
namespace Squidex.Domain.Apps.Core.Apps
{
public enum PermissionLevel
public enum AppPermission
{
Owner,
Developer,

30
src/Squidex.Domain.Apps.Core/Apps/RoleExtension.cs

@ -0,0 +1,30 @@
// ==========================================================================
// RoleExtension.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Apps
{
public static class RoleExtension
{
public static AppPermission ToAppPermission(this AppClientPermission clientPermission)
{
Guard.Enum(clientPermission, nameof(clientPermission));
return (AppPermission)Enum.Parse(typeof(AppPermission), clientPermission.ToString());
}
public static AppPermission ToAppPermission(this AppContributorPermission contributorPermission)
{
Guard.Enum(contributorPermission, nameof(contributorPermission));
return (AppPermission)Enum.Parse(typeof(AppPermission), contributorPermission.ToString());
}
}
}

2
src/Squidex.Domain.Apps.Events/Apps/AppContributorAssigned.cs

@ -16,6 +16,6 @@ namespace Squidex.Domain.Apps.Events.Apps
{
public string ContributorId { get; set; }
public PermissionLevel Permission { get; set; }
public AppPermission Permission { get; set; }
}
}

2
src/Squidex.Domain.Apps.Read.MongoDb/Apps/MongoAppEntityContributor.cs

@ -20,6 +20,6 @@ namespace Squidex.Domain.Apps.Read.MongoDb.Apps
[BsonRequired]
[BsonElement]
public PermissionLevel Permission { get; set; }
public AppPermission Permission { get; set; }
}
}

2
src/Squidex.Domain.Apps.Read/Apps/IAppContributorEntity.cs

@ -14,6 +14,6 @@ namespace Squidex.Domain.Apps.Read.Apps
{
string ContributorId { get; }
PermissionLevel Permission { get; }
AppPermission Permission { get; }
}
}

12
src/Squidex.Domain.Apps.Write/Apps/AppContributors.cs

@ -16,14 +16,14 @@ namespace Squidex.Domain.Apps.Write.Apps
{
public class AppContributors
{
private readonly Dictionary<string, PermissionLevel> contributors = new Dictionary<string, PermissionLevel>();
private readonly Dictionary<string, AppPermission> contributors = new Dictionary<string, AppPermission>();
public int Count
{
get { return contributors.Count; }
}
public void Assign(string contributorId, PermissionLevel permission)
public void Assign(string contributorId, AppPermission permission)
{
string Message() => "Cannot assign contributor";
@ -51,7 +51,7 @@ namespace Squidex.Domain.Apps.Write.Apps
}
}
private void ThrowIfFound(string contributorId, PermissionLevel permission, Func<string> message)
private void ThrowIfFound(string contributorId, AppPermission permission, Func<string> message)
{
if (contributors.TryGetValue(contributorId, out var currentPermission) && currentPermission == permission)
{
@ -61,13 +61,13 @@ namespace Squidex.Domain.Apps.Write.Apps
}
}
private void ThrowIfNoOwner(Action<Dictionary<string, PermissionLevel>> change, Func<string> message)
private void ThrowIfNoOwner(Action<Dictionary<string, AppPermission>> change, Func<string> message)
{
var contributorsCopy = new Dictionary<string, PermissionLevel>(contributors);
var contributorsCopy = new Dictionary<string, AppPermission>(contributors);
change(contributorsCopy);
if (contributorsCopy.All(x => x.Value != PermissionLevel.Owner))
if (contributorsCopy.All(x => x.Value != AppPermission.Owner))
{
var error = new ValidationError("Contributor is the last owner", "ContributorId");

2
src/Squidex.Domain.Apps.Write/Apps/AppDomainObject.cs

@ -253,7 +253,7 @@ namespace Squidex.Domain.Apps.Write.Apps
private static AppContributorAssigned CreateInitialOwner(NamedId<Guid> id, SquidexCommand command)
{
return new AppContributorAssigned { AppId = id, ContributorId = command.Actor.Identifier, Permission = PermissionLevel.Owner };
return new AppContributorAssigned { AppId = id, ContributorId = command.Actor.Identifier, Permission = AppPermission.Owner };
}
private void ThrowIfOtherUser(ChangePlan command)

7
src/Squidex.Domain.Apps.Write/Apps/Commands/AssignContributor.cs

@ -16,10 +16,15 @@ namespace Squidex.Domain.Apps.Write.Apps.Commands
{
public string ContributorId { get; set; }
public PermissionLevel Permission { get; set; }
public AppPermission Permission { get; set; }
public void Validate(IList<ValidationError> errors)
{
if (Permission.IsEnumValue())
{
errors.Add(new ValidationError("Permission is not valid", nameof(Permission)));
}
if (string.IsNullOrWhiteSpace(ContributorId))
{
errors.Add(new ValidationError("Contributor id not assigned", nameof(ContributorId)));

2
src/Squidex/Controllers/Api/Apps/Models/AppDto.cs

@ -48,6 +48,6 @@ namespace Squidex.Controllers.Api.Apps.Models
/// The permission level of the user.
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public PermissionLevel Permission { get; set; }
public AppPermission Permission { get; set; }
}
}

2
src/Squidex/Controllers/Api/Apps/Models/AssignAppContributorDto.cs

@ -25,6 +25,6 @@ namespace Squidex.Controllers.Api.Apps.Models
/// The permission level as a contributor.
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public PermissionLevel Permission { get; set; }
public AppPermission Permission { get; set; }
}
}

2
src/Squidex/Controllers/Api/Apps/Models/ContributorDto.cs

@ -25,6 +25,6 @@ namespace Squidex.Controllers.Api.Apps.Models
/// The permission level as a contributor.
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public PermissionLevel Permission { get; set; }
public AppPermission Permission { get; set; }
}
}

14
src/Squidex/Pipeline/AppApiFilter.cs

@ -91,22 +91,22 @@ namespace Squidex.Pipeline
switch (permission.Value)
{
case PermissionLevel.Owner:
case AppPermission.Owner:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppOwner));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppDeveloper));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break;
case PermissionLevel.Developer:
case AppPermission.Developer:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppDeveloper));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break;
case PermissionLevel.Editor:
case AppPermission.Editor:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break;
case PermissionLevel.Reader:
case AppPermission.Reader:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break;
}
@ -115,7 +115,7 @@ namespace Squidex.Pipeline
}
}
private static PermissionLevel? FindByOpenIdClient(IAppEntity app, ClaimsPrincipal user)
private static AppPermission? FindByOpenIdClient(IAppEntity app, ClaimsPrincipal user)
{
var client = app.Clients.FirstOrDefault(x => string.Equals(x.Id, user.GetClientId(), StringComparison.OrdinalIgnoreCase));
@ -124,10 +124,10 @@ namespace Squidex.Pipeline
return null;
}
return client.IsReader ? PermissionLevel.Reader : PermissionLevel.Editor;
return client.IsReader ? AppPermission.Reader : AppPermission.Editor;
}
private static PermissionLevel? FindByOpenIdSubject(IAppEntity app, ClaimsPrincipal user)
private static AppPermission? FindByOpenIdSubject(IAppEntity app, ClaimsPrincipal user)
{
var subject = user.FindFirst(OpenIdClaims.Subject)?.Value;

44
tests/Squidex.Domain.Apps.Core.Tests/Apps/RoleExtensionTests.cs

@ -0,0 +1,44 @@
// ==========================================================================
// RoleExtensionTests.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using Xunit;
namespace Squidex.Domain.Apps.Core.Apps
{
public class RoleExtensionTests
{
[Fact]
public void Should_convert_from_client_permission_to_app_permission()
{
Assert.Equal(AppPermission.Developer, AppClientPermission.Developer.ToAppPermission());
Assert.Equal(AppPermission.Editor, AppClientPermission.Editor.ToAppPermission());
Assert.Equal(AppPermission.Reader, AppClientPermission.Reader.ToAppPermission());
}
[Fact]
public void Should_throw_when_converting_from_invalid_client_permission()
{
Assert.Throws<ArgumentException>(() => ((AppClientPermission)10).ToAppPermission());
}
[Fact]
public void Should_convert_from_contributor_permission_to_app_permission()
{
Assert.Equal(AppPermission.Developer, AppContributorPermission.Developer.ToAppPermission());
Assert.Equal(AppPermission.Editor, AppContributorPermission.Editor.ToAppPermission());
Assert.Equal(AppPermission.Owner, AppContributorPermission.Owner.ToAppPermission());
}
[Fact]
public void Should_throw_when_converting_from_invalid_contributor_permission()
{
Assert.Throws<ArgumentException>(() => ((AppContributorPermission) 10).ToAppPermission());
}
}
}

14
tests/Squidex.Domain.Apps.Write.Tests/Apps/AppDomainObjectTests.cs

@ -62,7 +62,7 @@ namespace Squidex.Domain.Apps.Write.Apps
sut.GetUncomittedEvents()
.ShouldHaveSameEvents(
CreateEvent(new AppCreated { Name = AppName }),
CreateEvent(new AppContributorAssigned { ContributorId = User.Identifier, Permission = PermissionLevel.Owner }),
CreateEvent(new AppContributorAssigned { ContributorId = User.Identifier, Permission = AppPermission.Owner }),
CreateEvent(new AppLanguageAdded { Language = Language.EN })
);
}
@ -148,7 +148,7 @@ namespace Squidex.Domain.Apps.Write.Apps
Assert.Throws<ValidationException>(() =>
{
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = User.Identifier, Permission = PermissionLevel.Editor }));
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = User.Identifier, Permission = AppPermission.Editor }));
});
}
@ -157,11 +157,11 @@ namespace Squidex.Domain.Apps.Write.Apps
{
CreateApp();
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = PermissionLevel.Editor }));
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppPermission.Editor }));
Assert.Throws<ValidationException>(() =>
{
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = PermissionLevel.Editor }));
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppPermission.Editor }));
});
}
@ -170,11 +170,11 @@ namespace Squidex.Domain.Apps.Write.Apps
{
CreateApp();
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = PermissionLevel.Editor }));
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppPermission.Editor }));
sut.GetUncomittedEvents()
.ShouldHaveSameEvents(
CreateEvent(new AppContributorAssigned { ContributorId = contributorId, Permission = PermissionLevel.Editor })
CreateEvent(new AppContributorAssigned { ContributorId = contributorId, Permission = AppPermission.Editor })
);
}
@ -223,7 +223,7 @@ namespace Squidex.Domain.Apps.Write.Apps
{
CreateApp();
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = PermissionLevel.Editor }));
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppPermission.Editor }));
sut.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId }));
sut.GetUncomittedEvents().Skip(1)

Loading…
Cancel
Save