Merge pull request #10410 from Ch1nkara/add-users-permission-to-edit-subtitles
add EnableSubtitleManagement permission
This commit is contained in:
commit
db4605609c
|
@ -84,4 +84,9 @@ public static class Policies
|
||||||
/// Policy name for managing LiveTV.
|
/// Policy name for managing LiveTV.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string LiveTvManagement = "LiveTvManagement";
|
public const string LiveTvManagement = "LiveTvManagement";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Policy name for accessing subtitles management.
|
||||||
|
/// </summary>
|
||||||
|
public const string SubtitleManagement = "SubtitleManagement";
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class SubtitleController : BaseJellyfinApiController
|
||||||
/// <response code="200">Subtitles retrieved.</response>
|
/// <response code="200">Subtitles retrieved.</response>
|
||||||
/// <returns>An array of <see cref="RemoteSubtitleInfo"/>.</returns>
|
/// <returns>An array of <see cref="RemoteSubtitleInfo"/>.</returns>
|
||||||
[HttpGet("Items/{itemId}/RemoteSearch/Subtitles/{language}")]
|
[HttpGet("Items/{itemId}/RemoteSearch/Subtitles/{language}")]
|
||||||
[Authorize]
|
[Authorize(Policy = Policies.SubtitleManagement)]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
public async Task<ActionResult<IEnumerable<RemoteSubtitleInfo>>> SearchRemoteSubtitles(
|
public async Task<ActionResult<IEnumerable<RemoteSubtitleInfo>>> SearchRemoteSubtitles(
|
||||||
[FromRoute, Required] Guid itemId,
|
[FromRoute, Required] Guid itemId,
|
||||||
|
@ -135,7 +135,7 @@ public class SubtitleController : BaseJellyfinApiController
|
||||||
/// <response code="204">Subtitle downloaded.</response>
|
/// <response code="204">Subtitle downloaded.</response>
|
||||||
/// <returns>A <see cref="NoContentResult"/>.</returns>
|
/// <returns>A <see cref="NoContentResult"/>.</returns>
|
||||||
[HttpPost("Items/{itemId}/RemoteSearch/Subtitles/{subtitleId}")]
|
[HttpPost("Items/{itemId}/RemoteSearch/Subtitles/{subtitleId}")]
|
||||||
[Authorize]
|
[Authorize(Policy = Policies.SubtitleManagement)]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
public async Task<ActionResult> DownloadRemoteSubtitles(
|
public async Task<ActionResult> DownloadRemoteSubtitles(
|
||||||
[FromRoute, Required] Guid itemId,
|
[FromRoute, Required] Guid itemId,
|
||||||
|
@ -399,7 +399,7 @@ public class SubtitleController : BaseJellyfinApiController
|
||||||
/// <response code="204">Subtitle uploaded.</response>
|
/// <response code="204">Subtitle uploaded.</response>
|
||||||
/// <returns>A <see cref="NoContentResult"/>.</returns>
|
/// <returns>A <see cref="NoContentResult"/>.</returns>
|
||||||
[HttpPost("Videos/{itemId}/Subtitles")]
|
[HttpPost("Videos/{itemId}/Subtitles")]
|
||||||
[Authorize(Policy = Policies.RequiresElevation)]
|
[Authorize(Policy = Policies.SubtitleManagement)]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
public async Task<ActionResult> UploadSubtitle(
|
public async Task<ActionResult> UploadSubtitle(
|
||||||
[FromRoute, Required] Guid itemId,
|
[FromRoute, Required] Guid itemId,
|
||||||
|
|
|
@ -505,6 +505,7 @@ namespace Jellyfin.Data.Entities
|
||||||
Permissions.Add(new Permission(PermissionKind.ForceRemoteSourceTranscoding, false));
|
Permissions.Add(new Permission(PermissionKind.ForceRemoteSourceTranscoding, false));
|
||||||
Permissions.Add(new Permission(PermissionKind.EnableRemoteControlOfOtherUsers, false));
|
Permissions.Add(new Permission(PermissionKind.EnableRemoteControlOfOtherUsers, false));
|
||||||
Permissions.Add(new Permission(PermissionKind.EnableCollectionManagement, false));
|
Permissions.Add(new Permission(PermissionKind.EnableCollectionManagement, false));
|
||||||
|
Permissions.Add(new Permission(PermissionKind.EnableSubtitleManagement, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -113,6 +113,11 @@ namespace Jellyfin.Data.Enums
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether the user can create, modify and delete collections.
|
/// Whether the user can create, modify and delete collections.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
EnableCollectionManagement = 21
|
EnableCollectionManagement = 21,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the user can edit subtitles.
|
||||||
|
/// </summary>
|
||||||
|
EnableSubtitleManagement = 22
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -359,6 +359,7 @@ namespace Jellyfin.Server.Implementations.Users
|
||||||
ForceRemoteSourceTranscoding = user.HasPermission(PermissionKind.ForceRemoteSourceTranscoding),
|
ForceRemoteSourceTranscoding = user.HasPermission(PermissionKind.ForceRemoteSourceTranscoding),
|
||||||
EnablePublicSharing = user.HasPermission(PermissionKind.EnablePublicSharing),
|
EnablePublicSharing = user.HasPermission(PermissionKind.EnablePublicSharing),
|
||||||
EnableCollectionManagement = user.HasPermission(PermissionKind.EnableCollectionManagement),
|
EnableCollectionManagement = user.HasPermission(PermissionKind.EnableCollectionManagement),
|
||||||
|
EnableSubtitleManagement = user.HasPermission(PermissionKind.EnableSubtitleManagement),
|
||||||
AccessSchedules = user.AccessSchedules.ToArray(),
|
AccessSchedules = user.AccessSchedules.ToArray(),
|
||||||
BlockedTags = user.GetPreference(PreferenceKind.BlockedTags),
|
BlockedTags = user.GetPreference(PreferenceKind.BlockedTags),
|
||||||
AllowedTags = user.GetPreference(PreferenceKind.AllowedTags),
|
AllowedTags = user.GetPreference(PreferenceKind.AllowedTags),
|
||||||
|
@ -683,6 +684,7 @@ namespace Jellyfin.Server.Implementations.Users
|
||||||
user.SetPermission(PermissionKind.EnableRemoteControlOfOtherUsers, policy.EnableRemoteControlOfOtherUsers);
|
user.SetPermission(PermissionKind.EnableRemoteControlOfOtherUsers, policy.EnableRemoteControlOfOtherUsers);
|
||||||
user.SetPermission(PermissionKind.EnablePlaybackRemuxing, policy.EnablePlaybackRemuxing);
|
user.SetPermission(PermissionKind.EnablePlaybackRemuxing, policy.EnablePlaybackRemuxing);
|
||||||
user.SetPermission(PermissionKind.EnableCollectionManagement, policy.EnableCollectionManagement);
|
user.SetPermission(PermissionKind.EnableCollectionManagement, policy.EnableCollectionManagement);
|
||||||
|
user.SetPermission(PermissionKind.EnableSubtitleManagement, policy.EnableSubtitleManagement);
|
||||||
user.SetPermission(PermissionKind.ForceRemoteSourceTranscoding, policy.ForceRemoteSourceTranscoding);
|
user.SetPermission(PermissionKind.ForceRemoteSourceTranscoding, policy.ForceRemoteSourceTranscoding);
|
||||||
user.SetPermission(PermissionKind.EnablePublicSharing, policy.EnablePublicSharing);
|
user.SetPermission(PermissionKind.EnablePublicSharing, policy.EnablePublicSharing);
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,7 @@ namespace Jellyfin.Server.Extensions
|
||||||
options.AddPolicy(Policies.SyncPlayCreateGroup, new SyncPlayAccessRequirement(SyncPlayAccessRequirementType.CreateGroup));
|
options.AddPolicy(Policies.SyncPlayCreateGroup, new SyncPlayAccessRequirement(SyncPlayAccessRequirementType.CreateGroup));
|
||||||
options.AddPolicy(Policies.SyncPlayJoinGroup, new SyncPlayAccessRequirement(SyncPlayAccessRequirementType.JoinGroup));
|
options.AddPolicy(Policies.SyncPlayJoinGroup, new SyncPlayAccessRequirement(SyncPlayAccessRequirementType.JoinGroup));
|
||||||
options.AddPolicy(Policies.SyncPlayIsInGroup, new SyncPlayAccessRequirement(SyncPlayAccessRequirementType.IsInGroup));
|
options.AddPolicy(Policies.SyncPlayIsInGroup, new SyncPlayAccessRequirement(SyncPlayAccessRequirementType.IsInGroup));
|
||||||
|
options.AddPolicy(Policies.SubtitleManagement, new UserPermissionRequirement(PermissionKind.EnableSubtitleManagement));
|
||||||
options.AddPolicy(
|
options.AddPolicy(
|
||||||
Policies.RequiresElevation,
|
Policies.RequiresElevation,
|
||||||
policy => policy.AddAuthenticationSchemes(AuthenticationSchemes.CustomAuthentication)
|
policy => policy.AddAuthenticationSchemes(AuthenticationSchemes.CustomAuthentication)
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace MediaBrowser.Model.Users
|
||||||
{
|
{
|
||||||
IsHidden = true;
|
IsHidden = true;
|
||||||
EnableCollectionManagement = false;
|
EnableCollectionManagement = false;
|
||||||
|
EnableSubtitleManagement = false;
|
||||||
|
|
||||||
EnableContentDeletion = false;
|
EnableContentDeletion = false;
|
||||||
EnableContentDeletionFromFolders = Array.Empty<string>();
|
EnableContentDeletionFromFolders = Array.Empty<string>();
|
||||||
|
@ -83,6 +84,13 @@ namespace MediaBrowser.Model.Users
|
||||||
[DefaultValue(false)]
|
[DefaultValue(false)]
|
||||||
public bool EnableCollectionManagement { get; set; }
|
public bool EnableCollectionManagement { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether this instance can manage subtitles.
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if this instance is allowed; otherwise, <c>false</c>.</value>
|
||||||
|
[DefaultValue(false)]
|
||||||
|
public bool EnableSubtitleManagement { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether this instance is disabled.
|
/// Gets or sets a value indicating whether this instance is disabled.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user