Exemple #1
0
        public ActionResult EOM040Edit(string id)
        {
            var            viewMode = "update";
            EO_MenuPermRow row      = null;

            if (id.isNullOrEmpty())
            {
                row             = EoDataService.Instance.EoMenuPerm_create().FirstRow;
                row.EOMP_MenuId = "EOM_MAINMENU";
                viewMode        = "create";
            }
            else
            {
                row      = EoDataService.Instance.EoMenuPerm_getById(id).FirstRow;
                viewMode = "update";
            }

            ViewBag.ViewMode = viewMode;
            return(View(row));
        }
        public ActionResult Edit(FormCollection collection)
        {
            var token = collection["__RequestVerificationToken"];
            var mode  = collection["ViewMode"];
            var id    = collection[AppDataName.EOMP_MenuPermId];
            var msgOK = "OK";

            EO_MenuPermDataTable dt  = null;
            EO_MenuPermRow       row = null;

            try
            {
                if (mode.equalIgnoreCase("create"))
                {
                    dt    = EoDataService.Instance.EoMenuPerm_create();
                    msgOK = FtdStatus.InsertSuccess.ToString();
                }
                else
                {
                    //找出該筆資料
                    dt = EoDataService.Instance.EoMenuPerm_getById(id);
                    if (dt == null || dt.Count == 0)
                    {
                        return(Json(new { Result = jTable_ERROR_CODE, Message = "資料不存在" }));
                    }
                    msgOK = FtdStatus.UpdateSuccess.ToString();
                }

                //將Form sumit的資料更新至DataRow
                row = dt.FirstRow;
                var isOK = this.TryUpdateModel(row);

                //若驗證失敗-->回傳錯誤訊息
                if (!ModelState.IsValid)
                {
                    return(Json(new { Result = jTable_ERROR_CODE, Message = string.Join("<br/>", ModelState.Values) }));
                }

                #region //驗證欄位
                List <string> lstError = new List <string>();

                if (row.EOMP_MenuPermId.isNullOrEmpty())
                {
                    lstError.Add("授權ID不能為空");
                }
                if (row.EOMP_MenuId.isNullOrEmpty())
                {
                    lstError.Add("功能表ID不能為空");
                }
                if (row.EOMP_TargetId.isNullOrEmpty())
                {
                    lstError.Add("授權對象ID不能為空");
                }
                if (row.EOMP_TargetKind.isNullOrEmpty())
                {
                    lstError.Add("授權類型不能為空");
                }
                if (row.EOMP_ViewKind.isNullOrEmpty())
                {
                    lstError.Add("檢視權限不能為空");
                }
                //回傳錯誤訊息
                if (lstError.Count > 0)
                {
                    return(Json(new { Result = jTable_ERROR_CODE, Message = string.Join("<br/>", lstError.ToArray()) }));
                }
                //檢查鍵值是否重覆
                if (EoDataService.Instance.EoMenuPerm_checkDuplicate(row.EOMP_MenuPermId, row.EOMP_MenuId, row.EOMP_TargetId, row.EOMP_ViewKind))
                {
                    return(Json(new { Result = jTable_ERROR_CODE, Message = "相同鍵值的資料已存在" }));
                }
                #endregion

                #region // CheckBox 有勾選者,才會 post 到後端
                List <string> lstItemNos = new List <string>();
                Dictionary <string, List <string> > dicFuns = new Dictionary <string, List <string> >();
                foreach (var key in collection.AllKeys)
                {
                    if (key.StartsWith("chk_menu_"))
                    {
                        //程式
                        lstItemNos.Add(collection[key.ToString()]);
                    }
                    else if (key.StartsWith("chk_fun_"))
                    {
                        //功能(動作)
                        var ids = key.ToString().Split('_');
                        if (ids.Length >= 3)
                        {
                            dicFuns.Add(ids[2], collection[key.ToString()].Split(',').ToList());
                        }
                    }
                }
                #endregion

                dt.ns_update();
                dt.AcceptChanges();

                //設定權限
                var result = EoDataService.Instance.EoMenuPerm_updatePermSet(row, lstItemNos, dicFuns);

                return(Json(new { Result = msgOK }));
            }
            catch (Exception ex)
            {
                return(Json(new { Result = jTable_ERROR_CODE, Message = ex.Message }));
            }
        }
Exemple #3
0
        public string EoMenuPerm_updatePermSet(EO_MenuPermRow row, List <string> lstItemNos, Dictionary <string, List <string> > dicFuns)
        {
            //程式功能清單
            var dtMenuFun = NsDmHelper.EO_MenuFun
                            .selectAll()
                            .query();

            //程式授權
            var dtMenuPermSet = NsDmHelper.EO_MenuPermSet
                                .selectAll()
                                .where (t => t.EOMPS_MenuPermId == row.EOMP_MenuPermId)
                                .query();

            var menuPermSetIds = dtMenuPermSet.Select(x => x.EOMPS_MenuPermSetId).ToArray();

            //程式功能授權
            var dtFunPermSet = NsDmHelper.EO_FunPermSet
                               .selectAll(t => t.AllExt)
                               .where (t => t.EOFPS_MenuPermSetId.batchin(menuPermSetIds.toConstReq1()))
                               .query();

            List <string> cmds = null;

            foreach (var itemNo in lstItemNos)
            {
                var menuPermSet = dtMenuPermSet.Where(x => x.EOMPS_MenuItemNo == itemNo).FirstOrDefault();
                if (menuPermSet == null)
                {
                    menuPermSet = dtMenuPermSet.newTypedRow();
                    menuPermSet.ns_AssignNewId();
                    menuPermSet.EOMPS_MenuItemNo = itemNo;
                    menuPermSet.EOMPS_MenuPermId = row.EOMP_MenuPermId;
                    dtMenuPermSet.addTypedRow(menuPermSet);
                }

                //程式功能
                if (!dicFuns.Keys.Contains(itemNo))
                {
                    continue;
                }

                cmds = dicFuns[itemNo];
                foreach (var cmd in cmds)
                {
                    var menuFun = dtMenuFun.Where(x => x.EOMF_ItemNo == itemNo & x.EOMF_FunctionCode == cmd).FirstOrDefault();
                    if (menuFun == null)
                    {
                        continue;
                    }

                    var funPermSet = dtFunPermSet.Where(x =>
                                                        x.EOFPS_MenuPermSetId == menuPermSet.EOMPS_MenuPermSetId
                                                        & x.EOFPS_FunctionCode_XX == cmd
                                                        ).FirstOrDefault();

                    if (funPermSet == null)
                    {
                        funPermSet = dtFunPermSet.newTypedRow();
                        funPermSet.ns_AssignNewId();
                        funPermSet.EOFPS_MenuFunId       = menuFun.EOMF_MenuFunId;
                        funPermSet.EOFPS_MenuPermSetId   = menuPermSet.EOMPS_MenuPermSetId;
                        funPermSet.EOFPS_MenuItemNo_XX   = itemNo;
                        funPermSet.EOFPS_FunctionCode_XX = menuFun.EOMF_FunctionCode;
                        funPermSet.EOFPS_FunctionName_XX = menuFun.EOMF_FunctionName;
                        dtFunPermSet.addTypedRow(funPermSet);
                    }
                }
            }

            //刪除不存在者
            var keyMenus = lstItemNos.Select(x => row.EOMP_MenuPermId + "#" + x).ToArray();
            var delMenus = dtMenuPermSet.Where(x => !(x.EOMPS_MenuPermId + "#" + x.EOMPS_MenuItemNo).inAny(keyMenus)).ToArray();

            delMenus.forEach(x => x.Delete());

            var keyFuns = new List <string>();

            foreach (var key in dicFuns.Keys)
            {
                var funs = dicFuns[key].Select(x => key + "#" + x).ToArray();
                keyFuns.AddRange(funs);
            }
            var delFuns = dtFunPermSet.Where(x => !(x.EOFPS_MenuItemNo_XX + "#" + x.EOFPS_FunctionCode_XX).inAny(keyFuns)).ToArray();

            delFuns.forEach(x => x.Delete());

            var scope = new FdbTransScope(FdbTransScopeOption.RequiresNew);

            using (scope.Use)
            {
                dtMenuPermSet.ns_update();
                dtFunPermSet.ns_update();
                scope.complete();
            }

            return("OK");
        }