/// <summary> /// 根据ID获取权限Model /// </summary> /// <param name="p"></param> /// <param name="errMsg"></param> /// <returns></returns> public SYS_Action GetActionByID(int actionId, ref string errMsg) { try { using (HISDataEntities appEntities = new HISDataEntities()) { SYS_Action actionItem = appEntities.SYS_Action.Where(o => o.ID == actionId && o.Flag == 1).FirstOrDefault(); if (actionItem == null) { errMsg = "查无数据"; return(null); } //根据action num 获取菜单id var appMenu = appEntities.SYS_ITEMMENU.Where(o => o.ActionNum == actionItem.ActionNum).FirstOrDefault(); if (appMenu != null) { actionItem.ActionMenu = appMenu.ID; } return(actionItem); } } catch (Exception e) { errMsg = e.Message; return(null); } }
/// <summary> /// 返回查询的数据 /// </summary> /// <param name="queryList"></param> /// <param name="resultList"></param> /// <param name="p"></param> /// <returns></returns> private Hashtable CreateTreeGridList(List <SYS_Action> queryList, SYS_Action actionItem) { Hashtable ht = new Hashtable(); ht.Add("ID", actionItem.ID); ht.Add("ActionName", actionItem.ActionName); ht.Add("ActionNum", actionItem.ActionNum); //ht.Add("Disc", actionItem.Disc); ht.Add("Type", actionItem.Type); ht.Add("TypeName", actionItem.Type == 1 ? "菜单权限" : "按钮权限"); ht.Add("ParentID", actionItem.ParentID); ht.Add("CreateTime", Convert.ToDateTime(actionItem.CREATETIME).ToString("yyyy-MM-dd HH:mm:ss")); var childrenList = queryList.Where(o => o.ParentID == actionItem.ID); if (childrenList.Count() > 0) { List <Hashtable> htList = new List <Hashtable>(); foreach (SYS_Action item in childrenList) { Hashtable childrenHt = CreateTreeGridList(queryList, item); htList.Add(childrenHt); } ht.Add("children", htList); } return(ht); }
/// <summary> /// 保存权限 /// </summary> /// <param name="actionItem"></param> /// <returns></returns> public JsonResult SaveAction(SYS_Action actionItem) { if (actionItem == null) { return(Json(new { result = "error", mesage = "角色数据为空" })); } string errMsg = ""; if (actionItem.ID == 0) { actionItem.CREATETIME = DateTime.Now; //add actionBLL.AddAction(actionItem, ref errMsg); } else { //edit actionBLL.EditAction(actionItem, ref errMsg); } var result = new { result = "ok", message = "操作成功" }; if (!string.IsNullOrEmpty(errMsg)) { result = new { result = "error", message = errMsg }; } //Common.LogHelper.InsertLog(String.Format("修改权限,ID-{0}", actionItem.ID.ToString()), 51, "权限列表"); //兼容ie return(Json(result, "text/html", JsonRequestBehavior.AllowGet)); }
/// <summary> /// 自动生成权限编码 /// </summary> /// <param name="actionItem"></param> /// <returns></returns> private string CreateActionNum(SYS_Action actionItem) { SYS_Action parentAction = null; SYS_Action lastAction = null; string actionCount = "01"; string actionNum = "RT"; using (HISDataEntities appEntities = new HISDataEntities()) { //查找上级菜单 parentAction = appEntities.SYS_Action.Where(o => o.ID == actionItem.ParentID).FirstOrDefault(); //查询菜单下最大编号不包括自己和已经删除的 lastAction = appEntities.SYS_Action.Where(o => o.ParentID == actionItem.ParentID).OrderByDescending(o => o.ActionNum).FirstOrDefault(); } if (lastAction != null) { var str = lastAction.ActionNum.Substring(lastAction.ActionNum.Length - 2, 2); int number = Convert.ToInt32(str) + 1; actionCount = number.ToString().PadLeft(2, '0'); } if (parentAction != null) { actionNum = parentAction.ActionNum + actionCount; return(actionNum); } return(actionNum + actionCount); }
/// <summary> /// 删除权限 /// </summary> public void DeleteAction(int actionId, ref string errMsg) { try { List <SYS_Action> deleteList = null; using (HISDataEntities appEntities = new HISDataEntities()) { SYS_Action actionItem = appEntities.SYS_Action.Where(o => o.ID == actionId).FirstOrDefault(); if (actionItem == null) { errMsg = "查无数据"; return; } actionItem.Flag = 0; deleteList = DeleteActionChildren(appEntities, actionId); deleteList.Add(actionItem); //更新菜单中的ActionNum SYS_ITEMMENU findMenu = appEntities.SYS_ITEMMENU.Where(o => o.ActionNum == actionItem.ActionNum).FirstOrDefault(); if (findMenu != null) { findMenu.ActionNum = string.Empty; } // 保存 appEntities.SaveChanges(); } } catch (Exception e) { errMsg = e.Message; } }
private Hashtable InitActionTreeChildren(List <SYS_Action> queryList, SYS_Action parentItem, List <SYS_ROLEACTIONMAPPING> roleMapping) { Hashtable ht = CreateTreeHashTable(parentItem); var childrenList = queryList.Where(o => o.ParentID == parentItem.ID); if (childrenList.Count() > 0) { List <Hashtable> htList = new List <Hashtable>(); foreach (SYS_Action item in childrenList) { Hashtable childrenHt = InitActionTreeChildren(queryList, item, roleMapping); htList.Add(childrenHt); } ht.Add("children", htList); } else { //如果没有子权限证明是底层权限,底层权限判定是否选中 if (roleMapping.Where(o => o.ACTIONID == parentItem.ID).FirstOrDefault() != null) { ht.Add("checked", true); } else { ht.Add("checked", false); } } return(ht); }
private Hashtable CreateTreeHashTable(SYS_Action actionItem) { Hashtable htItem = new Hashtable(); htItem.Add("id", actionItem.ID); htItem.Add("text", actionItem.ActionName); return(htItem); }
private bool IsSubMenu(SYS_Action child, string parentId, IEnumerable <SYS_Action> menus) { if (child.ParentId.IsNullOrEmpty()) { return(false); } var menu = menus.First(m => m.ActionId == child.ParentId); if (menu.ActionId == parentId) { return(true); } return(IsSubMenu(menu, parentId, menus)); }
public ServiceResult AddMenu(SYS_Action action) { var result = new ServiceResult(); result = ValidMenuAction(action); if (!result.Success) { return(result); } this.actionRepository.Add(action); RemoAllMenuCached(); result.Set("action", action); return(result.IsSucceed("添加菜单成功")); }
public Hashtable CreateHashtable(SYS_Action actionItem) { Hashtable htItem = new Hashtable(); htItem.Add("ID", actionItem.ID); htItem.Add("ParentID", actionItem.ParentID); htItem.Add("ActionName", actionItem.ActionName); htItem.Add("ActionMenu", actionItem.ActionMenu); htItem.Add("ActionNum", actionItem.ActionNum); htItem.Add("Type", actionItem.Type); htItem.Add("TypeName", actionItem.Type == 1 ? "菜单权限" : "按钮权限"); //htItem.Add("Disc", actionItem.Disc); htItem.Add("CreateTime", actionItem.CREATETIME); htItem.Add("children", new List <Hashtable>()); return(htItem); }
/// <summary> /// 添加权限 /// </summary> /// <param name="actionItem"></param> /// <param name="errMsg"></param> public void AddAction(SYS_Action actionItem, ref string errMsg) { try { string actionNum = CreateActionNum(actionItem); //创建权限 actionItem.ActionNum = actionNum; if (actionItem.ParentID == null) { actionItem.ParentID = 0; } using (HISDataEntities appEntities = new HISDataEntities()) { actionItem.CREATETIME = DateTime.Now; actionItem.Flag = 1; //新增权限名称不能重复 var findList = appEntities.SYS_Action.Where(o => o.Flag == 1 && o.ActionName == actionItem.ActionName && o.ParentID == actionItem.ParentID); if (findList.Count() > 0) { errMsg = "权限名称已经存在"; return; } if (actionItem.Type == 1) { //给菜单编写权限编码 var appMenu = appEntities.SYS_ITEMMENU.Where(o => o.ID == actionItem.ActionMenu).FirstOrDefault(); //如果菜单已被其他权限关联,则不能继续被关联 if (!string.IsNullOrEmpty(appMenu.ActionNum)) { errMsg = "菜单已被权限" + appMenu.ActionNum + "关联,请选择其他菜单"; return; } appMenu.ActionNum = actionItem.ActionNum; } appEntities.SYS_Action.Add(actionItem); appEntities.SaveChanges(); } } catch (Exception e) { errMsg = e.Message; } }
public ServiceResult EditMenu(SYS_Action action) { var result = new ServiceResult(); result = ValidMenuAction(action); if (!result.Success) { return(result); } var oldLevelSort = this.actionRepository.GetEx(a => a.ActionId == action.ActionId, a => a.LevelSort); using (var tran = this.unitOfWork.BeginTransaction()) { this.actionRepository.Update(action, tran); // 如果 Sort 字段更改了,对应更改子菜单 LevelSort if (action.LevelSort != oldLevelSort) { var oldLevelSortStart = oldLevelSort + "-"; var childList = this.actionRepository.ToListEx(a => a.LevelSort.StartsWith(oldLevelSortStart), a => new { a.ActionId, a.LevelSort }); foreach (var child in childList) { var oldChildLevelSort = this.actionRepository.GetEx(a => a.ActionId == child.ActionId, a => a.LevelSort); var newChildLevelSort = oldChildLevelSort.Replace(oldLevelSortStart, action.LevelSort + "-"); this.actionRepository.Update(a => a.ActionId == child.ActionId, a => new SYS_Action { LevelSort = newChildLevelSort }, tran); } } tran.Commit(); } result.Set("action", action); RemoAllMenuCached(); return(result.IsSucceed("编辑菜单成功")); }
/// <summary> /// 获取角色权限 /// </summary> /// <param name="name">查询字段</param> /// <param name="roleid">角色名称</param> /// <param name="errMsg">发生错误返回结果</param> /// <param name="count">查询数据总记录数</param> /// <returns></returns> public List <Hashtable> GetAppRoleActionTreeGrid(int roleid, ref string errMsg, ref int count) { try { List <SYS_Action> queryList = null; using (HISDataEntities appEntities = new HISDataEntities()) { //查询跟该角色相关的所有权限数据 var query = (from a in appEntities.SYS_ROLEACTIONMAPPING join b in appEntities.SYS_Action on a.ACTIONID equals b.ID where a.ROLEID == roleid && b.Flag == 1 select new { b }); queryList = new List <SYS_Action>(); foreach (var item in query) { SYS_Action action = item.b; queryList.Add(action); } } List <Hashtable> list = new List <Hashtable>(); if (queryList.Count < 1) { return(list); } //生成所有数据的集合 var actionList = queryList.Where(o => o.ParentID == 0); foreach (SYS_Action actionItem in actionList) { Hashtable ht = CreateAppRoleActionTreeGrid(queryList, actionItem); list.Add(ht); } count = queryList.Count; return(list); } catch (Exception e) { errMsg = e.Message; return(new List <Hashtable>()); } }
/// <summary> /// 生成查询到的数据权限 /// </summary> /// <param name="queryList"></param> /// <param name="list"></param> private Hashtable CreateAppRoleActionTreeGrid(List <SYS_Action> queryList, SYS_Action actionItem) { Hashtable ht = CreateHashtable(actionItem); ht.Remove("children"); var childrenList = queryList.Where(o => o.ParentID == actionItem.ID); if (childrenList.Count() > 0) { List <Hashtable> htList = new List <Hashtable>(); foreach (SYS_Action item in childrenList) { Hashtable childrenHt = CreateAppRoleActionTreeGrid(queryList, item); htList.Add(childrenHt); } ht.Add("children", htList); } return(ht); }
private Hashtable CreateComboTreeList(List <SYS_Action> queryList, SYS_Action actionItem) { Hashtable ht = new Hashtable(); ht.Add("id", actionItem.ID); ht.Add("text", actionItem.ActionName); var childrenList = queryList.Where(o => o.ParentID == actionItem.ID); if (childrenList.Count() > 0) { List <Hashtable> htList = new List <Hashtable>(); foreach (SYS_Action item in childrenList) { Hashtable childrenHt = CreateComboTreeList(queryList, item); htList.Add(childrenHt); } ht.Add("children", htList); } return(ht); }
private ServiceResult ValidMenuAction(SYS_Action action) { var result = new ServiceResult(); action.Url = action.Url.ToFormatUrl(); if (action.Url.Contains(',')) { return(result.IsFailed("URL中不允许出现英文逗号字符")); } if (action.ParentId.IsNullOrEmpty()) { action.LevelSort = string.Format("{0}-{1:yyyyMMddHHmmss}", action.Sort, action.CreateTime); } else { if (action.ParentId == action.ActionId) { return(result.IsFailed("父菜单不能为自身")); } var parentLevelSort = this.actionRepository.GetEx(a => a.ActionId == action.ParentId, a => a.LevelSort); if (parentLevelSort.IsNull()) { return(result.IsFailed("找不到父菜单")); } var childList = GetChild(action.ActionId); if (childList.Contains(action.ParentId)) { return(result.IsFailed("不能把子菜单设置为自己的父菜单")); } action.LevelSort = string.Format("{0}-{1}-{2:yyyyMMddHHmmss}", parentLevelSort, action.Sort, action.CreateTime); } return(result); }
/// <summary> /// 新增编辑弹窗 /// </summary> /// <returns></returns> public ActionResult Dialog() { string actionId = Request["Id"]; if (string.IsNullOrEmpty(actionId) || actionId == "0") { SYS_Action ac = new SYS_Action() { ActionNum = "自动生成" }; return(View(ac)); } string errMsg = string.Empty; SYS_Action actionModel = actionBLL.GetActionByID(Convert.ToInt32(actionId), ref errMsg); if (string.IsNullOrEmpty(errMsg)) { //记录操作日志 //Common.LogHelper.InsertLog(String.Format("新增权限,ID-{0}", actionModel.ID.ToString()), 51, "权限列表"); return(View(actionModel)); } return(View(new SYS_Action())); }
public ActionResult EditForAjax(SYS_Action model) { return(Json(this.actionService.EditMenu(model))); }
public ActionResult AddForAjax(SYS_Action model) { model.ActionId = Guid.NewGuid().ToString(); model.CreateTime = DateTime.Now; return(Json(this.actionService.AddMenu(model))); }
/// <summary> /// 编辑权限 /// </summary> /// <param name="actionItem">最新的权限数据</param> /// <param name="errMsg">错误提示</param> public void EditAction(SYS_Action actionItem, ref string errMsg) { try { using (HISDataEntities appEntities = new HISDataEntities()) { //原来的数据 var findItem = (from a in appEntities.SYS_Action join b in appEntities.SYS_ITEMMENU on a.ActionNum equals b.ActionNum into temp from b in temp.DefaultIfEmpty() where a.ID == actionItem.ID select new { a, b }).FirstOrDefault(); SYS_Action updateItem = findItem.a; if (findItem.b != null) { updateItem.ActionMenu = findItem.b.ID; } if (updateItem == null) { errMsg = "查无数据"; return; } //关联菜单发生变化 //1:菜单权限下关联的菜单发生改变 //2: 权限类型按钮权限和控制权限之间互相转换 if ((actionItem.ActionMenu != updateItem.ActionMenu) || (actionItem.Type != updateItem.Type)) { //如果需要关联的菜单已经被关联了,则限制不能被关联 var updateMenu = appEntities.SYS_ITEMMENU.Where(o => o.ID == actionItem.ActionMenu).FirstOrDefault(); if (!string.IsNullOrEmpty(updateMenu.ActionNum) && updateMenu.ActionNum != actionItem.ActionNum) { errMsg = "菜单已被权限" + updateMenu.ActionNum + "关联,请选择其他菜单"; return; } if (updateItem.Type == 1) { //将原来的关联菜单取消 var appMenu = appEntities.SYS_ITEMMENU.Where(o => o.ActionNum == updateItem.ActionNum).FirstOrDefault(); if (appMenu != null) { appMenu.ActionNum = string.Empty; } } if (actionItem.Type == 1) { //关联最新的权限Num updateMenu.ActionNum = actionItem.ActionNum; } } updateItem.ActionNum = actionItem.ActionNum; updateItem.ActionName = actionItem.ActionName; updateItem.ActionMenu = actionItem.ActionMenu; //updateItem.Disc = actionItem.Disc; updateItem.ParentID = actionItem.ParentID; updateItem.Type = actionItem.Type; appEntities.SaveChanges(); } } catch (Exception e) { errMsg = e.Message; } }