using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Extensions; using zero.Core.Identity; namespace zero.Web.Controllers { [ZeroAuthorize(Permissions.Sections.Spaces, PermissionsValue.True)] public class SpacesController : BackofficeController { ISpacesApi Api; public SpacesController(ISpacesApi api) { Api = api; } public IActionResult GetByAlias([FromQuery] string alias) { if (!CanReadSpace(alias)) { return new StatusCodeResult(403); } return Ok(Api.GetByAlias(alias)); } public List GetAll() => Api.GetAll().Where(space => CanReadSpace(space.Alias)).ToList(); public async Task GetList([FromQuery] string alias, [FromQuery] ListBackofficeQuery query = null) { if (!CanReadSpace(alias)) { return new StatusCodeResult(403); } return Ok(await Api.GetListByQuery(alias, query)); } public async Task GetContent([FromQuery] string alias, [FromQuery] string contentId = null) { if (!CanReadSpace(alias)) { return new StatusCodeResult(403); } Space space = Api.GetByAlias(alias); SpaceContent model = null; if (space == null) { return new StatusCodeResult(404); } if (space.View != SpaceView.List || !contentId.IsNullOrEmpty()) { model = await Api.GetItem(alias, contentId); } if (model == null && contentId.IsNullOrEmpty()) { model = Activator.CreateInstance(space.Type) as SpaceContent; model.SpaceAlias = space.Alias; } return Ok(Edit(model)); } /// /// Save content item /// public async Task Save([FromBody] SpaceContent model) { if (!CanWriteSpace(model.SpaceAlias)) { return new StatusCodeResult(403); } return Ok(await Api.Save(model)); } /// /// Deletes a content item /// public async Task Delete([FromQuery] string alias, [FromQuery] string id) { if (!CanWriteSpace(alias)) { return new StatusCodeResult(403); } return Ok(await Api.Delete(id)); } /// /// Whether the current user can read a space /// bool CanReadSpace(string alias) { return true; //Permission permission = AuthenticationApi.GetPermission(Permissions.Spaces.PREFIX + alias); //return permission != null && permission.CanRead; } /// /// Whether the current user can read a space /// bool CanWriteSpace(string alias) { return true; //Permission permission = AuthenticationApi.GetPermission(Permissions.Spaces.PREFIX + alias); //return permission != null && permission.CanWrite; } } }