当集成完上一篇的功能后,复制来复制去,直到完成菜单、角色、组织机构、用户维护功能,剩下的就是根据当前登录用户的所属角色获取菜单了。
1、菜单管理
2、用户管理
2.1、新增用户时可以选择角色
3、组织机构
4、角色管理
4.1、角色菜单
5、根据用户所属角色,获取用户所能看到的菜单,多个角色取并集,框架最多支持3级菜单,生成菜单html
/// <summary>到此,框架的功能算是大致完成了,剩下可优化的是在框架中使用缓存,在项目中使用缓存的好处就不多说了,Redis挺不错,还支持集群,我只集成到项目中,未测试集群功能,下一篇将讲解redis的C#实现
/// 获取当前用户的角色菜单信息
/// </summary>
/// <returns></returns>
string GetRoleMenu()
{
var userId = CurrentUser.Id;
var roleService = ServiceHelper.Create<IRoleService>();
var roleMenus = roleService.GetRoleMenuByUserId(userId);//获取用户角色权限菜单
var allMenus = initGlobalData.Menus; //获取缓存中的所有菜单
//关联得到所有角色权限菜单 --最多展现3级菜单
var menus = allMenus.Join(roleMenus, a => a.Id, b => b.MenuId, (a, b) => new
{
Id = a.Id,
MenuName = a.MenuName,
MenuIcon = a.MenuIcon,
LinkUrl = a.LinkUrl,
ParentId = a.ParentId,
FullPath = a.FullPath,
State = a.State,
SortIndex = a.SortIndex,
level = a.level
}).OrderBy(item => item.SortIndex);
StringBuilder sb = new StringBuilder();
var menus0 = menus.Where(item => item.level == 0).ToArray();
foreach (var menu in menus0) //一级菜单
{
var menus1 = menus.Where(item => item.ParentId == menu.Id && item.level == 1).ToArray();
sb.AppendLine("<li>");
sb.AppendLine("<a href=\"javascript:void(0)\"><i class=\"" + menu.MenuIcon + "\"></i><span>" + menu.MenuName + "</span><b class=\"icon-keyboard_arrow_left\"></b></a>");
sb.AppendLine("<ul class=\"ms_fs2_menu\">");
foreach (var menu1 in menus1) //二级菜单
{
var menus2 = menus.Where(item => item.ParentId == menu1.Id && item.level == 2).ToArray();
sb.AppendLine("<li>");
if (menus2.Count() > 0)
sb.AppendLine("<a href=\"javascript:void(0)\">");
else
sb.AppendLine("<a href=\"" + menu1.LinkUrl + "\" target=\"rightFrame\">");
sb.AppendLine("<i class=\"" + menu1.MenuIcon + "\"></i><span>" + menu1.MenuName + "</span>");
if (menus2.Count() > 0)
sb.AppendLine("<b class=\"icon-keyboard_arrow_left\"></b>");
sb.AppendLine("</a>");
if (menus2.Count() > 0) //三级菜单
{
sb.AppendLine("<ul class=\"ms_fs3_menu\">");
foreach (var menu2 in menus2)
{
sb.AppendLine("<li><a href=\"" + menu2.LinkUrl + "\" target=\"rightFrame\"><i class=\"" + menu2.MenuIcon + "\"></i><span>" + menu2.MenuName + "</span></a></li>");
}
sb.AppendLine("</ul>");
}
sb.AppendLine("</li>");
}
sb.AppendLine("</ul>");
sb.AppendLine("</li>");
}
return sb.ToString();
}