public JsonResult Delete(FileNode target) { if (target == null) throw new ApiArgumentException($"{nameof(target)}不應該為null"); if (!target.HasWriteAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目錄"); } if (target.ParentId == null) throw new ApiInvalidOperationException("使用者根目錄不得刪除"); target.Delete(Database); return new ApiResult(); }
public JsonResult Put( FileNode target, FileNode parent, [FromForm]string name = null, [FromForm]string description = null, [FromForm]long? dirMaxSize = null, [FromForm]Group group = null, [FromForm]FileNodeAuthority? groupAuthority = null, [FromForm]FileNodeAuthority? otherAuthority = null ) { if (!target.HasWriteAuthority(User, Database)) { throw new AuthorizeException("無權限進行變更"); } //是目錄,且非擁有者禁止調整 if (!target.IsFile && target.Owner != User) { throw new AuthorizeException("僅目錄所有者可進行變更"); } #region 非擁有者僅可變更檔案的名稱與敘述 if (name != null) target.Name = name; if (description != null) target.Description = description; if (!target.IsFile && dirMaxSize.HasValue) target.DirMaxSize = dirMaxSize; #endregion if (target.Owner == User) {//以下屬性僅擁有者 if (parent != null && target.ParentId != null) { target.ParentId = parent.Id;//僅非根目錄可移動 } if (group != null) target.Group = group; if (groupAuthority.HasValue) target.GroupAuthority = groupAuthority.Value; if (otherAuthority.HasValue) target.OtherAuthority = otherAuthority.Value; } Database.SaveChanges(); return new ApiResult() { Result = target }; }
public JsonResult Clear( FileNode target, [FromForm]List<FileNodeNullableProperties> properties) { if (!target.HasWriteAuthority(User, Database)) { throw new AuthorizeException("無權限進行變更"); } foreach (var property in properties) { if (property == FileNodeNullableProperties.Description) { target.Description = null; } else if (property == FileNodeNullableProperties.DirMaxSize) { if (target.IsFile) continue; } else if (property == FileNodeNullableProperties.Group) { if (target.OwnerId == User.Id) target.GroupId = null; } } Database.SaveChanges(); return new ApiResult() { Result = target }; }
public async Task<JsonResult> Post( FileNode target = null, [FromForm]IFormFile[] files = null, [FromForm]string dirName = "未命名資料夾") { if (!IsLogin && target == null) throw new ApiInvalidOperationException("未登入狀態必須要指定目錄"); if (target == null) {//預設上傳到目前使用者根目錄 target = User.GetRootFileNode(Database); } if (target.IsFile) throw new ApiInvalidOperationException($"目標節點不應該為檔案"); if (!target.HasWriteAuthority(User, Database)) { throw new AuthorizeException("無權限存取該目錄"); } if (files != null && files.Count() > 0) {//上傳檔案至指定目錄 return await UploadFile(target, files); } else if (target.Owner == User) { return await CreateDir(target, dirName); } throw new AuthorizeException("僅目錄擁有者可以建立子系目錄目錄"); }