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 // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex Group // Copyright (c) Squidex Group
@ -8,7 +8,7 @@
namespace Squidex.Domain.Apps.Core.Apps namespace Squidex.Domain.Apps.Core.Apps
{ {
public enum PermissionLevel public enum AppPermission
{ {
Owner, Owner,
Developer, 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 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] [BsonRequired]
[BsonElement] [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; } 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 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 public int Count
{ {
get { return contributors.Count; } get { return contributors.Count; }
} }
public void Assign(string contributorId, PermissionLevel permission) public void Assign(string contributorId, AppPermission permission)
{ {
string Message() => "Cannot assign contributor"; 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) 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); 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"); 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) 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) 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 string ContributorId { get; set; }
public PermissionLevel Permission { get; set; } public AppPermission Permission { get; set; }
public void Validate(IList<ValidationError> errors) public void Validate(IList<ValidationError> errors)
{ {
if (Permission.IsEnumValue())
{
errors.Add(new ValidationError("Permission is not valid", nameof(Permission)));
}
if (string.IsNullOrWhiteSpace(ContributorId)) if (string.IsNullOrWhiteSpace(ContributorId))
{ {
errors.Add(new ValidationError("Contributor id not assigned", nameof(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. /// The permission level of the user.
/// </summary> /// </summary>
[JsonConverter(typeof(StringEnumConverter))] [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. /// The permission level as a contributor.
/// </summary> /// </summary>
[JsonConverter(typeof(StringEnumConverter))] [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. /// The permission level as a contributor.
/// </summary> /// </summary>
[JsonConverter(typeof(StringEnumConverter))] [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) switch (permission.Value)
{ {
case PermissionLevel.Owner: case AppPermission.Owner:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppOwner)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppOwner));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppDeveloper)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppDeveloper));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break; break;
case PermissionLevel.Developer: case AppPermission.Developer:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppDeveloper)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppDeveloper));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break; break;
case PermissionLevel.Editor: case AppPermission.Editor:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppEditor));
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break; break;
case PermissionLevel.Reader: case AppPermission.Reader:
defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader)); defaultIdentity.AddClaim(new Claim(defaultIdentity.RoleClaimType, SquidexRoles.AppReader));
break; 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)); var client = app.Clients.FirstOrDefault(x => string.Equals(x.Id, user.GetClientId(), StringComparison.OrdinalIgnoreCase));
@ -124,10 +124,10 @@ namespace Squidex.Pipeline
return null; 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; 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() sut.GetUncomittedEvents()
.ShouldHaveSameEvents( .ShouldHaveSameEvents(
CreateEvent(new AppCreated { Name = AppName }), 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 }) CreateEvent(new AppLanguageAdded { Language = Language.EN })
); );
} }
@ -148,7 +148,7 @@ namespace Squidex.Domain.Apps.Write.Apps
Assert.Throws<ValidationException>(() => 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(); CreateApp();
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = PermissionLevel.Editor })); sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppPermission.Editor }));
Assert.Throws<ValidationException>(() => 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(); CreateApp();
sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = PermissionLevel.Editor })); sut.AssignContributor(CreateCommand(new AssignContributor { ContributorId = contributorId, Permission = AppPermission.Editor }));
sut.GetUncomittedEvents() sut.GetUncomittedEvents()
.ShouldHaveSameEvents( .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(); 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.RemoveContributor(CreateCommand(new RemoveContributor { ContributorId = contributorId }));
sut.GetUncomittedEvents().Skip(1) sut.GetUncomittedEvents().Skip(1)

Loading…
Cancel
Save