public async Task <MenuResponse> Update(MenuUpdateRequest request)
        {
            if (!HasPremission(request.RequestOwner, MenuPremssion.CanUpdate))
            {
                return(UnauthorizedRequest());
            }
            var updatingMenu = await _menuDataSrv.Query.FirstAsync(x => x.Id == request.MenuId);

            request.ViewModel.MapToModel(updatingMenu);
            await BaseBeforeUpdateAsync(updatingMenu, request.RequestOwner);
            await HandleMenuItemsAsync(request, updatingMenu);

            await _menuDataSrv.UpdateAsync(updatingMenu);

            await HandleMetaDataAsync(updatingMenu.MenuItems.ToList(), request.ViewModel.MenuItems);
            await BaseAfterUpdateAsync(updatingMenu, request.RequestOwner);

            return(new MenuResponse
            {
                Access = ResponseAccess.Granted
            });
        }
        public async Task OnRecordEditConfirm()
        {
            #region 進行 Form Validation 檢查驗證作業
            if (LocalEditContext.Validate() == false)
            {
                return;
            }
            #endregion

            #region 檢查資料完整性
            if (isNewRecordMode == true)
            {
                var checkedResult = await CurrentService
                                    .BeforeAddCheckAsync(CurrentRecord);

                if (checkedResult.Success == false)
                {
                    MessageBox.Show("400px", "200px", "警告",
                                    VerifyRecordResultHelper.GetMessageString(checkedResult), MessageBox.HiddenAsync);
                    await thisView.NeedRefreshAsync();

                    return;
                }
            }
            else
            {
                var checkedResult = await CurrentService
                                    .BeforeUpdateCheckAsync(CurrentRecord);

                if (checkedResult.Success == false)
                {
                    MessageBox.Show("400px", "200px", "警告",
                                    VerifyRecordResultHelper.GetMessageString(checkedResult), MessageBox.HiddenAsync);
                    await thisView.NeedRefreshAsync();

                    return;
                }
            }


            #endregion

            if (IsShowEditRecord == true)
            {
                if (isNewRecordMode == true)
                {
                    var verifyRecordResult = await CurrentService.AddAsync(CurrentRecord);

                    await TranscationResultHelper.CheckDatabaseResult(MessageBox, verifyRecordResult);

                    dataGrid.RefreshGrid();
                }
                else
                {
                    var verifyRecordResult = await CurrentService.UpdateAsync(CurrentRecord);

                    await TranscationResultHelper.CheckDatabaseResult(MessageBox, verifyRecordResult);

                    dataGrid.RefreshGrid();
                }
                IsShowEditRecord = false;
            }
        }