diff --git a/RMuseum/Controllers/RecitationController.cs b/RMuseum/Controllers/RecitationController.cs index 5c811169..e1a0f23d 100644 --- a/RMuseum/Controllers/RecitationController.cs +++ b/RMuseum/Controllers/RecitationController.cs @@ -311,13 +311,13 @@ namespace RMuseum.Controllers } /// - /// Moderate pending narration + /// Moderate pending narration (for moderating other users' recitations you also need recitation:moderate permission) /// /// /// /// [HttpPut("moderate/{id}")] - [Authorize(Policy = RMuseumSecurableItem.AudioRecitationEntityShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)] + [Authorize(Policy = RMuseumSecurableItem.AudioRecitationEntityShortName + ":" + RMuseumSecurableItem.PublishOperationShortName)] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RecitationViewModel))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.Forbidden, Type = typeof(string))] @@ -329,6 +329,34 @@ namespace RMuseum.Controllers Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value); + var narration = await _audioService.Get(id); + if (!string.IsNullOrEmpty(narration.ExceptionString)) + { + return BadRequest(narration.ExceptionString); + } + + if (narration.Result == null) + return NotFound(); + + if (narration.Result.Owner.Id != loggedOnUserId) + { + Guid sessionId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value); + RServiceResult + serviceResult = + await _userPermissionChecker.Check + ( + loggedOnUserId, + sessionId, + RMuseumSecurableItem.AudioRecitationEntityShortName, + RMuseumSecurableItem.ModerateOperationShortName + ); + if (!string.IsNullOrEmpty(serviceResult.ExceptionString)) + return BadRequest(serviceResult.ExceptionString); + + if (!serviceResult.Result) + return StatusCode((int)HttpStatusCode.Forbidden); + + } var res = await _audioService.ModeratePoemNarration(id, loggedOnUserId, model); if (!string.IsNullOrEmpty(res.ExceptionString)) @@ -504,7 +532,7 @@ namespace RMuseum.Controllers /// [HttpPost] [Route("retrypublish")] - [Authorize(Policy = RMuseumSecurableItem.AudioRecitationEntityShortName + ":" + RMuseumSecurableItem.ModerateOperationShortName)] + [Authorize(Policy = RMuseumSecurableItem.AudioRecitationEntityShortName + ":" + RMuseumSecurableItem.PublishOperationShortName)] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(bool))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] public async Task RetryPublish() @@ -677,7 +705,7 @@ namespace RMuseum.Controllers } /// - /// Transfer Recitations Ownership + /// Transfer Recitations Ownership (for recitations owned by current user) /// /// /// diff --git a/RMuseum/Models/Auth/Memory/RMuseumSecurableItem.cs b/RMuseum/Models/Auth/Memory/RMuseumSecurableItem.cs index a60438e4..334750fa 100644 --- a/RMuseum/Models/Auth/Memory/RMuseumSecurableItem.cs +++ b/RMuseum/Models/Auth/Memory/RMuseumSecurableItem.cs @@ -127,9 +127,10 @@ namespace RMuseum.Models.Auth.Memory Description = "خوانشها", Operations = new SecurableItemOperation[] { + new SecurableItemOperation(PublishOperationShortName, "انتشار خوانش خود", false), + new SecurableItemOperation(ModerateOperationShortName, "بررسی خوانش کاربران دیگر", false), + new SecurableItemOperation(ReOrderOperationShortName, "تغییر ترتیب خوانش‌ها", false), new SecurableItemOperation(ImportOperationShortName, "ورود اطلاعات از منابع خارجی", false), - new SecurableItemOperation(ModerateOperationShortName, "بررسی", false), - new SecurableItemOperation(ReOrderOperationShortName, "تغییر ترتیب", false), } }, new SecurableItem() diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 81859961..e55b73b8 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -828,7 +828,7 @@ - Moderate pending narration + Moderate pending narration (for moderating other users' recitations you also need recitation:moderate permission) @@ -925,7 +925,7 @@ - Transfer Recitations Ownership + Transfer Recitations Ownership (for recitations owned by current user)