示例#1
0
        // 分配菜单按钮权限
        public void DistributionButton(EHECD_RoleDTO role)
        {
            var manager = DIEntity.GetInstance().GetImpl <IRoleManager>();

            CreateSyslogInfo();
            result.Succeeded = manager.DistributionMenuButton(role, RequestParameters.dynamicData) > 0;
            result.Msg       = !result.Succeeded ? "" : "分配角色菜单按钮失败,请联系系统管理员";
        }
示例#2
0
 /// <summary>
 /// 跳转到分配菜单按钮给角色页面
 /// </summary>
 /// <param name="role"></param>
 /// <returns></returns>
 public PartialViewResult ToDistributionButton(EHECD_RoleDTO role)
 {
     ViewBag.TreeData = DI.DIEntity
                        .GetInstance()
                        .GetImpl <IRoleManager>()
                        .LoadDistributionMenuButton(role);
     return(PartialView("DistributionButton"));
 }
示例#3
0
        //给角色分配菜单
        public override int DistributionMenu(EHECD_RoleDTO role, dynamic dynamicData)
        {
            var ret          = 0;
            var menusDynamic = dynamicData.data;

            if (menusDynamic.Count > 0)
            {
                //1.获取选中的菜单ID
                List <string> menus = JSONHelper.GetModel <List <string> >(menusDynamic.Parent.Value.ToString());

                //2.获取角色已有菜单ID
                var roleMenus = query.QueryList <EHECD_FunctionMenuDTO>(
                    @"SELECT
	                                                            sPrivilegeAccessValue ID
                                                            FROM
	                                                            EHECD_Privilege
                                                            WHERE
	                                                            sPrivilegeMaster = 'role'
                                                            AND sPrivilegeAccess = 'menu'
                                                            AND sBelong = 'role'
                                                            AND bIsDeleted = 0
                                                            AND bPrivilegeOperation = 0
                                                            AND sPrivilegeMasterValue = @ID;", new { ID = role.ID })
                                .Select(m => m.ID.ToString()).ToList();

                //3.选取选中的和已有的交集用以更新或插入
                var jm = menus.Union(roleMenus).ToList();

                //4.选取已有的和选中的差集用以解除没有选中的菜单权限
                var cm = roleMenus.Except(menus).ToList();

                StringBuilder sb = new StringBuilder();

                //分配权限
                sb.Append(CreateDistributionMenuSql(jm, role.ID.ToString()));

                //移除取消了得权限
                sb.Append(CreateUnDistributionMenuSql(cm, role.ID.ToString()));

                ret = excute.ExcuteTransaction(sb.ToString());
            }
            else
            {
                //既然一个都没选中,那就取消这个角色的所有权限
                ret = excute.Update("UPDATE EHECD_Privilege SET bIsDeleted = 1 WHERE sPrivilegeMaster = 'role' AND sPrivilegeMasterValue = @RID AND sBelong = 'role' AND sBelongValue = @RID AND sPrivilegeAccess = 'menu';", new { RID = role.ID });
            }

            //记录系统日志
            InsertSystemLog(
                dynamicData.sLoginName.ToString(),
                dynamicData.sUserName.ToString(),
                dynamicData.IP.ToString(),
                (Int16)(SYSTEM_LOG_TYPE.MODIFY | SYSTEM_LOG_TYPE.ADD | SYSTEM_LOG_TYPE.DELETE | SYSTEM_LOG_TYPE.ROLE | SYSTEM_LOG_TYPE.MENU),
                "系统用户分配角色菜单" + role.ID,
                role.ID.ToString(), ret > 0);

            return(ret);
        }
示例#4
0
        //载入分配角色菜单的tree数据
        public override dynamic LoadDistributionMenu(EHECD_RoleDTO role)
        {
            try
            {
                //1.获取所有菜单
                var allMenus = query.QueryList <UserMenu>("SELECT * FROM EHECD_FunctionMenu WHERE bIsDeleted = 0;", null);

                //2.获取角色的菜单
                var roleMenus = query.QueryList <UserMenu>(/*分配给角色的菜单特权*/
                    @"SELECT
	                                                            sPrivilegeAccessValue ID
                                                            FROM
	                                                            EHECD_Privilege
                                                            WHERE
	                                                            sPrivilegeMaster = 'role'
                                                            AND sPrivilegeAccess = 'menu'
                                                            AND sBelong = 'role'
                                                            AND bIsDeleted = 0 --未删除的
                                                            AND bPrivilegeOperation = 0 --未禁用的
                                                            AND sPrivilegeMasterValue = @ID;", new { ID = role.ID });


                //载入用户菜单层级关系
                for (int i = 0; i < allMenus.Count; i++)
                {
                    if (allMenus[i].sPID == null)
                    {
                        allMenus[i].ChildMenu = LoadMenuData(allMenus, allMenus[i]).OrderBy(m => m.iOrder).ToList();
                    }
                }

                //排个序
                allMenus = allMenus.OrderBy(x => x.iOrder).ToList();

                //创建菜单数据
                var ret = allMenus.Where(m => m.sPID == null).Select(o => new
                {
                    id       = o.ID,
                    text     = o.sMenuName,
                    children = CreateChidrenMenuTreeData(o.ChildMenu, roleMenus)
                }).ToList();

                return(JSONHelper.GetJsonString <dynamic>(ret));
            }
            catch (Exception)
            {
                return(null);
            }
        }
示例#5
0
        //编辑角色
        public override int EditRole(EHECD_RoleDTO role, dynamic p)
        {
            //1.完善角色信息
            role.dModifyTime = DateTime.Now;

            //2.更新角色信息
            var ret = excute.UpdateSingle <EHECD_RoleDTO>(role, string.Format("where ID = '{0}'", role.ID.ToString()));

            //3.记录系统日志
            InsertSystemLog(
                p.sLoginName.ToString(),
                p.sUserName.ToString(),
                p.IP.ToString(),
                (Int16)(SYSTEM_LOG_TYPE.MODIFY | SYSTEM_LOG_TYPE.ROLE),
                "系统用户编辑角色" + role.ID,
                role.ID.ToString(), ret > 0);

            return(ret);
        }
示例#6
0
        //添加角色
        public override int AddRole(dynamic data, dynamic p)
        {
            //1.创建角色对象
            EHECD_RoleDTO role = new EHECD_RoleDTO
            {
                ID          = GuidHelper.GetSecuentialGuid(),
                bEnable     = Convert.ToBoolean(data.bEnable.Value),
                bIsDeleted  = false,
                dCreateTime = DateTime.Now,
                dModifyTime = DateTime.Now,
                iOrder      = Convert.ToInt32(data.iOrder.Value),
                sRoleName   = data.sRoleName.Value
            };

            var sqlIf = @"IF EXISTS(SELECT 1 FROM EHECD_Role WHERE sRoleName = @sRoleName)
                        BEGIN
	                        SELECT -1 RET;
                        END
                        ELSE
                        BEGIN
	                        {0}
                        END;";

            sqlIf = string.Format(sqlIf, DBSqlHelper.GetInsertSQL <EHECD_RoleDTO>(role));

            //2.插入角色信息
            var ret = excute.Insert(sqlIf, new { sRoleName = role.sRoleName });

            //3.记录系统日志
            InsertSystemLog(
                p.sLoginName.ToString(),
                p.sUserName.ToString(),
                p.IP.ToString(),
                (Int16)(SYSTEM_LOG_TYPE.ADD | SYSTEM_LOG_TYPE.ROLE),
                "系统用户添加角色" + role.ID,
                role.ID.ToString(),
                ret > 0);

            return(ret);
        }
示例#7
0
        //给角色分配菜单按钮
        public override int DistributionMenuButton(EHECD_RoleDTO role, dynamic dynamicData)
        {
            var ret = 0;

            var btnData = dynamicData.data;

            if (btnData.Count > 0)
            {
                //1.选中的按钮的ID
                var bts = JSONHelper.GetModel <dynamic>(btnData.Parent.Value.ToString()).GetEnumerator();

                var btnsDy = new List <object>();

                while (bts.MoveNext())
                {
                    btnsDy.Add(new {
                        id     = bts.Current.id.ToString(),
                        menuid = bts.Current.menuid.ToString()
                    });
                }

                //var btsid = bts.Select(m => m.id.Value.ToString()).ToList();

                //2.获取角色已有的按钮ID
                var roleBtnIds = query.QueryList <Dictionary <string, object> >(
                    @"
                        SELECT 
                            sPrivilegeAccessValue id,
                            sBelongValue menuid
                        FROM 
                            EHECD_Privilege 
                        WHERE sPrivilegeMaster = 'role' 
                        AND sBelong = 'menu' 
                        AND sPrivilegeAccess = 'button'
                        AND bIsDeleted = 0
                        AND sPrivilegeMasterValue = @ID;", new { ID = role.ID }
                    ).Select(m => new {
                    id     = m["id"].ToString(),
                    menuid = m["menuid"].ToString()
                }).ToList();

                //3.获取交集用以更新和插入
                var jb = btnsDy.Union(roleBtnIds, new ButtonMenuRoleCompare()).ToList();

                ////4.获取差集用以解除没有选中的按钮权限
                var cb = roleBtnIds.Except(btnsDy, new ButtonMenuRoleCompare()).ToList();

                StringBuilder sb = new StringBuilder();

                //分配权限
                sb.Append(CreateDistributionButtonSql(jb, role.ID.ToString()));

                ////移除取消了得权限
                sb.Append(CreateUnDistributionButtonSql(cb, role.ID.ToString()));

                ret = excute.ExcuteTransaction(sb.ToString());
            }
            else
            {
                //没有选中只能认为是要取消所有按钮权限了
                ret = excute.Update("UPDATE EHECD_Privilege SET bIsDeleted = 1 WHERE sPrivilegeMaster = 'role' AND sPrivilegeMasterValue = @RID AND sBelong = 'role' AND sBelongValue = @RID AND sPrivilegeAccess = 'button';", new { RID = role.ID });
            }

            //记录系统日志
            InsertSystemLog(
                dynamicData.sLoginName.ToString(),
                dynamicData.sUserName.ToString(),
                dynamicData.IP.ToString(),
                (Int16)(SYSTEM_LOG_TYPE.MODIFY | SYSTEM_LOG_TYPE.ADD | SYSTEM_LOG_TYPE.DELETE | SYSTEM_LOG_TYPE.ROLE | SYSTEM_LOG_TYPE.BUTTON),
                "系统用户分配角色菜单按钮" + role.ID,
                role.ID.ToString(), ret > 0);

            return(ret);
        }
示例#8
0
        //载入分配菜单按钮的tree数据
        public override dynamic LoadDistributionMenuButton(EHECD_RoleDTO role)
        {
            try
            {
                #region 1.获取角色的菜单
                //1.获取角色的菜单
                var roleMenus = query.QueryList <UserMenu>(
                    @"WITH CTE (ID) AS (
	                                                            SELECT
		                                                            sPrivilegeAccessValue ID
	                                                            FROM
		                                                            EHECD_Privilege
	                                                            WHERE
		                                                            sPrivilegeMaster = 'role'
	                                                            AND sPrivilegeAccess = 'menu'
	                                                            AND sBelong = 'role'
	                                                            AND bIsDeleted = 0
	                                                            AND bPrivilegeOperation = 0
	                                                            AND sPrivilegeMasterValue = @ID
                                                            )SELECT A.ID,A.sMenuName,A.sPID,A.iOrder FROM EHECD_FunctionMenu A,CTE WHERE CTE.ID = A.ID;", new { ID = role.ID });
                #endregion

                #region 2.获取角色菜单按钮
                //2.获取角色菜单按钮
                var roleMenuButtons = query.QueryList <UserMenuButton>(
                    @"WITH CTE (ID) AS (
	                    SELECT
		                    sPrivilegeAccessValue ID
	                    FROM
		                    EHECD_Privilege
	                    WHERE
		                    sPrivilegeMaster = 'role'
	                    AND sPrivilegeAccess = 'button'
	                    AND sBelong = 'menu'
	                    AND bIsDeleted = 0
	                    AND bPrivilegeOperation = 0
	                    AND sPrivilegeMasterValue = @ID
                    ) SELECT
	                    A.ID,
	                    A.sButtonName
                    FROM
	                    EHECD_MenuButton A,
	                    CTE
                    WHERE
	                    CTE.ID = A.ID;"    , new { ID = role.ID.ToString() }
                    );
                #endregion

                #region 3.获取所有菜单的按钮
                //4.获取所有菜单的按钮
                var allMenuButtons = query.QueryList <Dictionary <string, object> >(
                    @"WITH CTE (ID,sBelongValue) AS (
	                    SELECT
		                    sPrivilegeAccessValue ID,--按钮ID
                            sBelongValue
	                    FROM
		                    EHECD_Privilege
	                    WHERE
		                    sPrivilegeMaster = 'menu'
	                    AND sPrivilegeAccess = 'button'
	                    AND sBelong = 'menu'
	                    AND bIsDeleted = 0
	                    AND bPrivilegeOperation = 0	                    
                    ) SELECT
	                    A.ID,
	                    A.sButtonName,
                        A.iOrder,
                        A.sIcon,
                        CTE.sBelongValue sDataID--临时用sDataID装一下
                    FROM
	                    EHECD_MenuButton A,
	                    CTE
                    WHERE
	                    CTE.ID = A.ID;"    , null
                    );
                #endregion

                #region 4.整理菜单的层级关系
                //5.整理菜单的层级关系
                for (int i = 0; i < roleMenus.Count; i++)
                {
                    //添加按钮
                    for (int j = 0; j < allMenuButtons.Count; j++)
                    {
                        if (roleMenus[i].ID.ToString() == allMenuButtons[j]["sDataID"].ToString())
                        {
                            roleMenus[i].Buttons.Add(new UserMenuButton
                            {
                                ID          = Guid.Parse(allMenuButtons[j]["ID"].ToString()),
                                sButtonName = allMenuButtons[j]["sButtonName"].ToString(),
                                iOrder      = allMenuButtons[j]["iOrder"].ToInt32(),
                                sIcon       = allMenuButtons[j]["sIcon"].ToString()
                            });
                        }
                    }
                    //整理菜单层级关系
                    if (roleMenus[i].sPID == null)
                    {
                        roleMenus[i].ChildMenu = LoadMenuData(roleMenus, roleMenus[i]).OrderBy(m => m.iOrder).ToList();
                    }
                }
                #endregion

                #region 5.创建菜单的树结构数据
                var ret = roleMenus.Where(m => m.sPID == null).Select(o => new
                {
                    id         = o.ID,
                    text       = o.sMenuName,
                    @checked   = false,
                    attributes = new { isLeaf = false },
                    children   = CreateChidrenMenuButtonTreeData(o.ChildMenu, roleMenuButtons)
                }).ToList();
                #endregion

                return(JSONHelper.GetJsonString(ret));
            }
            catch (Exception)
            {
                return(null);
            }
        }
示例#9
0
 /// <summary>
 /// 分配角色菜单按钮
 /// </summary>
 /// <param name="role">角色</param>
 /// <param name="dynamicData">数据</param>
 /// <returns>分配结果</returns>
 public abstract int DistributionMenuButton(EHECD_RoleDTO role, dynamic dynamicData);
示例#10
0
 /// <summary>
 /// 载入分配角色的菜单按钮tree数据
 /// </summary>
 /// <param name="role">角色</param>
 /// <returns>tree数据</returns>
 public abstract dynamic LoadDistributionMenuButton(EHECD_RoleDTO role);
示例#11
0
 /// <summary>
 /// 编辑角色信息
 /// </summary>
 /// <param name="role">角色对象</param>
 /// <param name="p">插入系统操作日志需要的动态参数</param>
 /// <returns>编辑结果</returns>
 public abstract int EditRole(EHECD_RoleDTO role, dynamic p);
示例#12
0
 /// <summary>
 /// 跳转到编辑角色页面
 /// </summary>
 /// <param name="role"></param>
 /// <returns></returns>
 public PartialViewResult ToEditRole(EHECD_RoleDTO role)
 {
     return(PartialView("EditRole", role));
 }