Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
5864db7
add property visibility state manager
madsrasmussen Mar 11, 2025
65b4571
implement in structure manager
madsrasmussen Mar 11, 2025
cef5981
filter properties based on visibility
madsrasmussen Mar 11, 2025
05bda4d
wip document type structure permissions
madsrasmussen Mar 11, 2025
b946255
rename
madsrasmussen Mar 11, 2025
ceb3564
register entity permission for document type property
madsrasmussen Mar 11, 2025
5281ded
add entity permission for media type property
madsrasmussen Mar 11, 2025
b68c7a0
pass fallback permissions to document granular permissions
madsrasmussen Mar 11, 2025
f5a4947
set as preset
madsrasmussen Mar 12, 2025
aca621c
Merge branch 'v15/bugfix/document-granular-permission-preset' into v1…
madsrasmussen Mar 12, 2025
715a785
clean up
madsrasmussen Mar 12, 2025
15da5a5
Merge branch 'v15/bugfix/document-granular-permission-preset' into v1…
madsrasmussen Mar 12, 2025
9f93a6a
wip document type property picker
madsrasmussen Mar 12, 2025
29b4cc6
add preset value
madsrasmussen Mar 12, 2025
eb113e0
Update input-document-type-structure-granular-user-permission.element.ts
madsrasmussen Mar 12, 2025
cb2e5bf
move files
madsrasmussen Mar 12, 2025
3eb7519
rename
madsrasmussen Mar 12, 2025
be467a3
Update input-document-value-granular-user-permission.element.ts
madsrasmussen Mar 12, 2025
3a74ec1
remove temp test
madsrasmussen Mar 12, 2025
e9bd236
Update manifests.ts
madsrasmussen Mar 12, 2025
398f83f
remove unused
madsrasmussen Mar 13, 2025
8fe8e1c
Update input-document-value-granular-user-permission.element.ts
madsrasmussen Mar 13, 2025
437f443
rename see permission + add write permission
madsrasmussen Mar 13, 2025
8e474d6
fix missing type
madsrasmussen Mar 13, 2025
66f2082
require property type unique
madsrasmussen Mar 13, 2025
c4e3b6d
add unique to property type
madsrasmussen Mar 13, 2025
de626ff
rename to property type
madsrasmussen Mar 13, 2025
ae34369
map to unique
madsrasmussen Mar 13, 2025
e7708f3
deprecate id on property type
madsrasmussen Mar 13, 2025
a398dcd
return unique from property picker
madsrasmussen Mar 13, 2025
cf8c8c0
more explicit naming
madsrasmussen Mar 13, 2025
7e4daa9
use type
madsrasmussen Mar 13, 2025
d5e6317
render detail
madsrasmussen Mar 13, 2025
7db7f48
Update input-document-value-granular-user-permission.element.ts
madsrasmussen Mar 14, 2025
4e94ad9
wip modal flow
madsrasmussen Mar 14, 2025
8e882c5
clean up
madsrasmussen Mar 14, 2025
038fd4b
add headlines
madsrasmussen Mar 14, 2025
526b09e
hide actions
madsrasmussen Mar 17, 2025
0f77ca2
pass preset value
madsrasmussen Mar 17, 2025
3dfa4af
add edit permission method
madsrasmussen Mar 17, 2025
2d666bf
include property in permission name
madsrasmussen Mar 17, 2025
9407697
add read and write managers
madsrasmussen Mar 17, 2025
235d942
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 17, 2025
38eccd7
implement read and write state managers
madsrasmussen Mar 17, 2025
5f63704
Update content-type-structure-manager.class.ts
madsrasmussen Mar 17, 2025
066d59e
enforce property permissions
madsrasmussen Mar 17, 2025
ecc05bc
Storage for granular permissions at property type level
kjac Mar 17, 2025
6e04afe
add guards
madsrasmussen Mar 17, 2025
84f5b28
make variant property version
madsrasmussen Mar 17, 2025
e7d2c3e
Rename server models to include "property"
kjac Mar 18, 2025
908240e
generate server types
madsrasmussen Mar 18, 2025
8129789
add permissionType to model
madsrasmussen Mar 18, 2025
86d7ace
add mappers to user group permission data
madsrasmussen Mar 18, 2025
ff477ee
add mapper to current user permission data
madsrasmussen Mar 18, 2025
f23c6c9
destroy
madsrasmussen Mar 18, 2025
7a306a9
clear state
madsrasmussen Mar 18, 2025
14080c7
use permission type for guard check
madsrasmussen Mar 18, 2025
2b843ee
add permission type
madsrasmussen Mar 18, 2025
d21a13d
require specific permission type
madsrasmussen Mar 18, 2025
8da6550
use correct schema type
madsrasmussen Mar 18, 2025
ac58500
add mappings
madsrasmussen Mar 18, 2025
6fe3b80
clean up
madsrasmussen Mar 18, 2025
d70a981
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 18, 2025
3b3832d
log errors
madsrasmussen Mar 18, 2025
b92ea05
fix mapping
madsrasmussen Mar 18, 2025
1a1c770
null check for icon
madsrasmussen Mar 18, 2025
d8f05e3
use fallback if there is no forDataModel
madsrasmussen Mar 18, 2025
7e9b347
add translations
madsrasmussen Mar 18, 2025
9c83a1e
sort group alphabetically
madsrasmussen Mar 18, 2025
3531dcc
add empty state for no verbs
madsrasmussen Mar 18, 2025
f5cb387
organize folders
madsrasmussen Mar 18, 2025
7ba643f
always require unique and variant id
madsrasmussen Mar 19, 2025
533b81d
Allow storing empty lists of verbs
kjac Mar 19, 2025
9eaa0da
pass variant id to all states
madsrasmussen Mar 19, 2025
b7dbef1
Merge branch 'v15/feature/property-visibility' of https://github.com/…
madsrasmussen Mar 19, 2025
bdf639f
Remove empty verbs
kjac Mar 19, 2025
c454334
Merge remote-tracking branch 'origin/v15/feature/property-visibility'…
kjac Mar 19, 2025
2969517
add alias to name
madsrasmussen Mar 19, 2025
4e2039f
prevent picking the same property type multiple times
madsrasmussen Mar 19, 2025
77ac3ff
fix lint errors
madsrasmussen Mar 19, 2025
fc5bd24
fix create state by observing variant options
madsrasmussen Mar 19, 2025
313577b
move to workspace context
madsrasmussen Mar 19, 2025
bd94afc
Update document-property-value-user-permission.workspace-context.ts
madsrasmussen Mar 19, 2025
12a97da
Update content-editor-properties.element.ts
madsrasmussen Mar 19, 2025
1235230
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 20, 2025
b321f7e
clean up
madsrasmussen Mar 20, 2025
0ecc361
Rename models (last time, promise!)
kjac Mar 20, 2025
94d36a1
Add migration for default document property value permissions
kjac Mar 20, 2025
3ca7ad0
generate new server models
madsrasmussen Mar 20, 2025
fe834aa
update after model changes
madsrasmussen Mar 20, 2025
ead5df1
Correct the default permission identifiers
kjac Mar 21, 2025
57f71fa
Add default permissions to newly created DBs
kjac Mar 21, 2025
6aca8ed
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 21, 2025
6e943f7
Add validation and clean-up
kjac Mar 21, 2025
9b7ffdf
rename to visibility state
madsrasmussen Mar 21, 2025
82968d1
rename to view
madsrasmussen Mar 23, 2025
2ca216c
add helpers
madsrasmussen Mar 23, 2025
fa8cd66
apply to blocks
madsrasmussen Mar 23, 2025
ece7788
Update document-property-value-user-permission.workspace-context.ts
madsrasmussen Mar 23, 2025
7b7ebc8
disable view and write state by default
madsrasmussen Mar 24, 2025
e56eb09
add tests for start and stopping a state
madsrasmussen Mar 24, 2025
df8b3cd
throw errors if adding to a state that is not running
madsrasmussen Mar 24, 2025
84f442b
export consts
madsrasmussen Mar 24, 2025
0476434
export consts
madsrasmussen Mar 24, 2025
87be7d2
fix circular
madsrasmussen Mar 24, 2025
44b0a78
fix circular
madsrasmussen Mar 24, 2025
d08eb3e
set the entity type when setting values
madsrasmussen Mar 24, 2025
b168797
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 24, 2025
60c6350
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 25, 2025
654f8b0
only apply for block in document values
madsrasmussen Mar 25, 2025
0172302
split logic
madsrasmussen Mar 25, 2025
2dab66e
start states for document blocks
madsrasmussen Mar 25, 2025
2714fed
only apply states when state is running
madsrasmussen Mar 25, 2025
85c86ff
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 25, 2025
6e16484
Fixed typos in test method names.
AndyButland Mar 25, 2025
7e3fac7
Merge branch 'v15/dev' into v15/feature/property-visibility
madsrasmussen Mar 25, 2025
5f6c274
add readonly type
nielslyngsoe Apr 1, 2025
cf331cb
Enforce: AllowEditInvariantFromNonDefault configuration (#18758)
madsrasmussen Apr 1, 2025
e6d9af5
Merge branch 'v15/dev' into v15/feature/property-visibility
nielslyngsoe Apr 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,12 @@
.WithDetail("The assigned media start node does not exists.")
.Build()),
UserGroupOperationStatus.DocumentPermissionKeyNotFound => NotFound(new ProblemDetailsBuilder()
.WithTitle("A document permission key not found")
.WithDetail("A assigned document permission not exists.")
.WithTitle("Document permission key not found")
.WithDetail("An assigned document permission does not reference an existing document.")
.Build()),
UserGroupOperationStatus.DocumentTypePermissionKeyNotFound => NotFound(new ProblemDetailsBuilder()
.WithTitle("Document type permission key not found")
.WithDetail("An assigned document type permission does not reference an existing document type.")

Check warning on line 62 in src/Umbraco.Cms.Api.Management/Controllers/UserGroup/UserGroupControllerBase.cs

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (v15/dev)

❌ Getting worse: Large Method

UserGroupOperationStatusResult increases from 75 to 79 lines of code, threshold = 70. Large functions with many lines of code are generally harder to understand and lower the code health. Avoid adding more lines to this function.
.Build()),
UserGroupOperationStatus.LanguageNotFound => NotFound(problemDetailsBuilder
.WithTitle("Language not found")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ internal static IUmbracoBuilder AddUserGroups(this IUmbracoBuilder builder)
builder.Services.AddTransient<IUserGroupPresentationFactory, UserGroupPresentationFactory>();
builder.Services.AddSingleton<IPermissionPresentationFactory, PermissionPresentationFactory>();

builder.Services.AddSingleton<IPermissionMapper, DocumentPermissionMapper>();
builder.Services.AddSingleton<IPermissionPresentationMapper, DocumentPermissionMapper>();

builder.Services.AddSingleton<DocumentPermissionMapper>();
builder.Services.AddSingleton<IPermissionMapper>(x=>x.GetRequiredService<DocumentPermissionMapper>());
builder.Services.AddSingleton<IPermissionPresentationMapper>(x=>x.GetRequiredService<DocumentPermissionMapper>());
builder.Services.AddSingleton<IPermissionMapper, DocumentPropertyValuePermissionMapper>();
builder.Services.AddSingleton<IPermissionPresentationMapper, DocumentPropertyValuePermissionMapper>();

return builder;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using Umbraco.Cms.Api.Management.ViewModels;
using Umbraco.Cms.Api.Management.ViewModels.UserGroup.Permissions;
using Umbraco.Cms.Core.Models.Membership.Permissions;
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
using Umbraco.Cms.Infrastructure.Persistence.Mappers;
using Umbraco.Extensions;

namespace Umbraco.Cms.Api.Management.Mapping.Permissions;

public class DocumentPropertyValuePermissionMapper : IPermissionPresentationMapper, IPermissionMapper
{
public string Context => DocumentPropertyValueGranularPermission.ContextType;

public IGranularPermission MapFromDto(UserGroup2GranularPermissionDto dto) =>
new DocumentPropertyValueGranularPermission()
{
Key = dto.UniqueId!.Value,
Permission = dto.Permission,
};

public Type PresentationModelToHandle => typeof(DocumentPropertyValuePermissionPresentationModel);

public IEnumerable<IPermissionPresentationModel> MapManyAsync(IEnumerable<IGranularPermission> granularPermissions)
{
var intermediate = granularPermissions.Where(p => p.Key.HasValue).Select(p =>
{
var parts = p.Permission.Split('|');
return parts.Length == 2 && Guid.TryParse(parts[0], out Guid propertyTypeId)
? new { DocumentTypeId = p.Key!.Value, PropertyTypeId = propertyTypeId, Verb = parts[1] }
: null;
})
.WhereNotNull()
.ToArray();

var intermediateByDocumentType = intermediate.GroupBy(x => x.DocumentTypeId);
foreach (var documentTypeGroup in intermediateByDocumentType)
{
foreach (var propertyTypeGroup in documentTypeGroup.GroupBy(x => x.PropertyTypeId))
{
yield return new DocumentPropertyValuePermissionPresentationModel
{
DocumentType = new ReferenceByIdModel(documentTypeGroup.Key),
PropertyType = new ReferenceByIdModel(propertyTypeGroup.Key),
Verbs = propertyTypeGroup
.Select(x => x.Verb)
.Where(verb => verb.IsNullOrWhiteSpace() is false)
.ToHashSet(),
};
}
}
}

public IEnumerable<IGranularPermission> MapToGranularPermissions(IPermissionPresentationModel permissionViewModel)
{
if (permissionViewModel is not DocumentPropertyValuePermissionPresentationModel documentTypePermissionPresentationModel)
{
yield break;
}

foreach (var verb in documentTypePermissionPresentationModel.Verbs.Distinct().DefaultIfEmpty(string.Empty))
{
yield return new DocumentPropertyValueGranularPermission
{
Key = documentTypePermissionPresentationModel.DocumentType.Id,
Permission = $"{documentTypePermissionPresentationModel.PropertyType.Id}|{verb}"
};
}
}
}
54 changes: 54 additions & 0 deletions src/Umbraco.Cms.Api.Management/OpenApi.json
Original file line number Diff line number Diff line change
Expand Up @@ -36136,6 +36136,9 @@
{
"$ref": "#/components/schemas/DocumentPermissionPresentationModel"
},
{
"$ref": "#/components/schemas/DocumentPropertyValuePermissionPresentationModel"
},
{
"$ref": "#/components/schemas/UnknownTypePermissionPresentationModel"
}
Expand Down Expand Up @@ -36424,6 +36427,9 @@
{
"$ref": "#/components/schemas/DocumentPermissionPresentationModel"
},
{
"$ref": "#/components/schemas/DocumentPropertyValuePermissionPresentationModel"
},
{
"$ref": "#/components/schemas/UnknownTypePermissionPresentationModel"
}
Expand Down Expand Up @@ -37289,6 +37295,48 @@
}
}
},
"DocumentPropertyValuePermissionPresentationModel": {
"required": [
"$type",
"documentType",
"propertyType",
"verbs"
],
"type": "object",
"properties": {
"$type": {
"type": "string"
},
"documentType": {
"oneOf": [
{
"$ref": "#/components/schemas/ReferenceByIdModel"
}
]
},
"propertyType": {
"oneOf": [
{
"$ref": "#/components/schemas/ReferenceByIdModel"
}
]
},
"verbs": {
"uniqueItems": true,
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"discriminator": {
"propertyName": "$type",
"mapping": {
"DocumentPropertyValuePermissionPresentationModel": "#/components/schemas/DocumentPropertyValuePermissionPresentationModel"
}
}
},
"DocumentRecycleBinItemResponseModel": {
"required": [
"createDate",
Expand Down Expand Up @@ -45715,6 +45763,9 @@
{
"$ref": "#/components/schemas/DocumentPermissionPresentationModel"
},
{
"$ref": "#/components/schemas/DocumentPropertyValuePermissionPresentationModel"
},
{
"$ref": "#/components/schemas/UnknownTypePermissionPresentationModel"
}
Expand Down Expand Up @@ -46138,6 +46189,9 @@
{
"$ref": "#/components/schemas/DocumentPermissionPresentationModel"
},
{
"$ref": "#/components/schemas/DocumentPropertyValuePermissionPresentationModel"
},
{
"$ref": "#/components/schemas/UnknownTypePermissionPresentationModel"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Umbraco.Cms.Api.Management.ViewModels.UserGroup.Permissions;

public class DocumentPropertyValuePermissionPresentationModel : IPermissionPresentationModel
{
public required ReferenceByIdModel DocumentType { get; set; }

public required ReferenceByIdModel PropertyType { get; set; }

public required ISet<string> Verbs { get; set; }
}
29 changes: 29 additions & 0 deletions src/Umbraco.Core/Actions/ActionDocumentPropertyRead.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
namespace Umbraco.Cms.Core.Actions;

public class ActionDocumentPropertyRead : IAction
{
/// <inheritdoc cref="IAction.ActionLetter" />
public const string ActionLetter = "Umb.Document.PropertyValue.Read";

/// <inheritdoc cref="IAction.ActionAlias" />
public const string ActionAlias = "documentpropertyread";

/// <inheritdoc/>
public string Letter => ActionLetter;

/// <inheritdoc/>
public string Alias => ActionAlias;

/// <inheritdoc />
public bool ShowInNotifier => false;

/// <inheritdoc />
public bool CanBePermissionAssigned => true;

/// <inheritdoc />
public string Icon => string.Empty;

/// <inheritdoc />
public string Category => Constants.Conventions.PermissionCategories.OtherCategory;
}

29 changes: 29 additions & 0 deletions src/Umbraco.Core/Actions/ActionDocumentPropertyWrite.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
namespace Umbraco.Cms.Core.Actions;

public class ActionDocumentPropertyWrite : IAction
{
/// <inheritdoc cref="IAction.ActionLetter" />
public const string ActionLetter = "Umb.Document.PropertyValue.Write";

/// <inheritdoc cref="IAction.ActionAlias" />
public const string ActionAlias = "documentpropertywrite";

/// <inheritdoc/>
public string Letter => ActionLetter;

/// <inheritdoc/>
public string Alias => ActionAlias;

/// <inheritdoc />
public bool ShowInNotifier => false;

/// <inheritdoc />
public bool CanBePermissionAssigned => true;

/// <inheritdoc />
public string Icon => string.Empty;

/// <inheritdoc />
public string Category => Constants.Conventions.PermissionCategories.OtherCategory;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
namespace Umbraco.Cms.Core.Models.Membership.Permissions;

public class DocumentPropertyValueGranularPermission : INodeGranularPermission
{
public const string ContextType = "DocumentTypeProperty";

public required Guid Key { get; set; }

public string Context => ContextType;

public required string Permission { get; set; }

protected bool Equals(DocumentPropertyValueGranularPermission other) => Key.Equals(other.Key) && Permission == other.Permission;

public override bool Equals(object? obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}

if (ReferenceEquals(this, obj))
{
return true;
}

if (obj.GetType() != GetType())
{
return false;
}

return Equals((DocumentPropertyValueGranularPermission)obj);
}

public override int GetHashCode() => HashCode.Combine(Key, Permission);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public enum UserGroupOperationStatus
MediaStartNodeKeyNotFound,
DocumentStartNodeKeyNotFound,
DocumentPermissionKeyNotFound,
DocumentTypePermissionKeyNotFound,
LanguageNotFound,
NameTooLong,
AliasTooLong,
Expand Down
22 changes: 14 additions & 8 deletions src/Umbraco.Core/Services/UserGroupService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -612,20 +612,26 @@ private UserGroupOperationStatus ValidateStartNodesExists(IUserGroup userGroup)

private UserGroupOperationStatus ValidateGranularPermissionsExists(IUserGroup userGroup)
{
IEnumerable<Guid> documentKeys = userGroup.GranularPermissions.Select(granularPermission =>
{
if (granularPermission is DocumentGranularPermission nodeGranularPermission)
{
return (Guid?)nodeGranularPermission.Key;
}
Guid[] documentKeys = userGroup.GranularPermissions
.OfType<DocumentGranularPermission>()
.Select(p => p.Key)
.ToArray();

return null;
}).Where(x => x.HasValue).Cast<Guid>().ToArray();
if (documentKeys.Any() && _entityService.Exists(documentKeys) is false)
{
return UserGroupOperationStatus.DocumentPermissionKeyNotFound;
}

Guid[] documentTypeKeys = userGroup.GranularPermissions
.OfType<DocumentPropertyValueGranularPermission>()
.Select(p => p.Key)
.ToArray();

if (documentTypeKeys.Any() && _entityService.Exists(documentTypeKeys) is false)
{
return UserGroupOperationStatus.DocumentTypePermissionKeyNotFound;
}

return UserGroupOperationStatus.Success;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ private void CreateUserGroup2PermissionData()
{
var userGroupKeyToPermissions = new Dictionary<Guid, IEnumerable<string>>()
{
[Constants.Security.AdminGroupKey] = [ActionNew.ActionLetter, ActionUpdate.ActionLetter, ActionDelete.ActionLetter, ActionMove.ActionLetter, ActionCopy.ActionLetter, ActionSort.ActionLetter, ActionRollback.ActionLetter, ActionProtect.ActionLetter, ActionAssignDomain.ActionLetter, ActionPublish.ActionLetter, ActionRights.ActionLetter, ActionUnpublish.ActionLetter, ActionBrowse.ActionLetter, ActionCreateBlueprintFromContent.ActionLetter, ActionNotify.ActionLetter, ":", "5", "7", "T"],
[Constants.Security.EditorGroupKey] = [ActionNew.ActionLetter, ActionUpdate.ActionLetter, ActionDelete.ActionLetter, ActionMove.ActionLetter, ActionCopy.ActionLetter, ActionSort.ActionLetter, ActionRollback.ActionLetter, ActionProtect.ActionLetter, ActionPublish.ActionLetter, ActionUnpublish.ActionLetter, ActionBrowse.ActionLetter, ActionCreateBlueprintFromContent.ActionLetter, ActionNotify.ActionLetter, ":", "5", "T"],
[Constants.Security.WriterGroupKey] = [ActionNew.ActionLetter, ActionUpdate.ActionLetter, ActionBrowse.ActionLetter, ActionNotify.ActionLetter, ":" ],
[Constants.Security.TranslatorGroupKey] = [ActionUpdate.ActionLetter, ActionBrowse.ActionLetter],
[Constants.Security.AdminGroupKey] = [ActionNew.ActionLetter, ActionUpdate.ActionLetter, ActionDelete.ActionLetter, ActionMove.ActionLetter, ActionCopy.ActionLetter, ActionSort.ActionLetter, ActionRollback.ActionLetter, ActionProtect.ActionLetter, ActionAssignDomain.ActionLetter, ActionPublish.ActionLetter, ActionRights.ActionLetter, ActionUnpublish.ActionLetter, ActionBrowse.ActionLetter, ActionCreateBlueprintFromContent.ActionLetter, ActionNotify.ActionLetter, ":", "5", "7", "T", ActionDocumentPropertyRead.ActionLetter, ActionDocumentPropertyWrite.ActionLetter],
[Constants.Security.EditorGroupKey] = [ActionNew.ActionLetter, ActionUpdate.ActionLetter, ActionDelete.ActionLetter, ActionMove.ActionLetter, ActionCopy.ActionLetter, ActionSort.ActionLetter, ActionRollback.ActionLetter, ActionProtect.ActionLetter, ActionPublish.ActionLetter, ActionUnpublish.ActionLetter, ActionBrowse.ActionLetter, ActionCreateBlueprintFromContent.ActionLetter, ActionNotify.ActionLetter, ":", "5", "T", ActionDocumentPropertyRead.ActionLetter, ActionDocumentPropertyWrite.ActionLetter],
[Constants.Security.WriterGroupKey] = [ActionNew.ActionLetter, ActionUpdate.ActionLetter, ActionBrowse.ActionLetter, ActionNotify.ActionLetter, ":" , ActionDocumentPropertyRead.ActionLetter, ActionDocumentPropertyWrite.ActionLetter],
[Constants.Security.TranslatorGroupKey] = [ActionUpdate.ActionLetter, ActionBrowse.ActionLetter, ActionDocumentPropertyRead.ActionLetter, ActionDocumentPropertyWrite.ActionLetter],
};

var i = 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ protected virtual void DefinePlan()

// To 15.4.0
To<V_15_4_0.UpdateDocumentUrlToPersistMultipleSegmentsPerDocument>("{A9E72794-4036-4563-B543-1717C73B8879}");
To<V_15_4_0.AddDocumentPropertyPermissions>("{D1568C33-A697-455F-8D16-48060CB954A1}");
To<V_15_4_0.AddRelationTypeForMembers>("{33D62294-D0DE-4A86-A830-991EB36B96DA}");
}
}
Loading
Loading