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)