Exemplo n.º 1
0
 /// <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);
     }
 }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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));
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
 /// <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;
     }
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        private Hashtable CreateTreeHashTable(SYS_Action actionItem)
        {
            Hashtable htItem = new Hashtable();

            htItem.Add("id", actionItem.ID);
            htItem.Add("text", actionItem.ActionName);
            return(htItem);
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        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("添加菜单成功"));
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        /// <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;
            }
        }
Exemplo n.º 12
0
        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("编辑菜单成功"));
        }
Exemplo n.º 13
0
        /// <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>());
            }
        }
Exemplo n.º 14
0
        /// <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);
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        /// <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()));
        }
Exemplo n.º 18
0
 public ActionResult EditForAjax(SYS_Action model)
 {
     return(Json(this.actionService.EditMenu(model)));
 }
Exemplo n.º 19
0
 public ActionResult AddForAjax(SYS_Action model)
 {
     model.ActionId   = Guid.NewGuid().ToString();
     model.CreateTime = DateTime.Now;
     return(Json(this.actionService.AddMenu(model)));
 }
Exemplo n.º 20
0
        /// <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;
            }
        }