Exemple #1
0
 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();
 }
Exemple #2
0
        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
            };
        }
Exemple #3
0
        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
            };
        }
Exemple #4
0
        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("僅目錄擁有者可以建立子系目錄目錄");
        }