diff --git a/Bootstrap.Admin/Web.config b/Bootstrap.Admin/Web.config index e76ad73b..bf3a62a5 100644 --- a/Bootstrap.Admin/Web.config +++ b/Bootstrap.Admin/Web.config @@ -33,6 +33,7 @@ + diff --git a/Bootstrap.DataAccess/MenuHelper.cs b/Bootstrap.DataAccess/MenuHelper.cs index c102bdd6..9720c293 100644 --- a/Bootstrap.DataAccess/MenuHelper.cs +++ b/Bootstrap.DataAccess/MenuHelper.cs @@ -15,6 +15,7 @@ namespace Bootstrap.DataAccess public static class MenuHelper { private const string MenuDataKey = "MenuData-CodeMenuHelper"; + private const string MenuByUserDataKey = "MneuData-CodeMenuHelper-User"; /// /// 查询所有菜单信息 /// @@ -52,14 +53,40 @@ namespace Bootstrap.DataAccess return string.IsNullOrEmpty(tId) ? ret : ret.Where(t => tId.Equals(t.ID.ToString(), StringComparison.OrdinalIgnoreCase)); } /// - /// + /// 查询某个用户所配置的菜单 /// /// /// public static IEnumerable RetrieveMenusByUserId(int userId) { - //UNDONE: 通过用户ID获得到当前用户配置的菜单 - return RetrieveMenus(); + string sql = "select distinct n.* from UserRole ur,NavigationRole nr,Navigations n where ur.RoleID=nr.RoleID and nr.NavigationID=n.ID and ur.UserID = @UserID"; + return CacheManager.GetOrAdd(MenuByUserDataKey, CacheSection.RetrieveIntervalByKey(MenuByUserDataKey), key => + { + List Menus = new List(); + DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql); + try + { + cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@UserID", userId, ParameterDirection.Input)); + using (DbDataReader reader = DBAccessManager.SqlDBAccess.ExecuteReader(cmd)) + { + while (reader.Read()) + { + Menus.Add(new Menu() + { + ID = (int)reader[0], + ParentId = (int)reader[1], + Name = (string)reader[2], + Order = (int)reader[3], + Icon = LgbConvert.ReadValue(reader[4], string.Empty), + Url = LgbConvert.ReadValue(reader[5], string.Empty), + Category = (string)reader[6] + }); + } + } + } + catch (Exception ex) { ExceptionManager.Publish(ex); } + return Menus; + }, CacheSection.RetrieveDescByKey(MenuByUserDataKey)); } /// /// 删除菜单信息 diff --git a/Bootstrap.DataAccessTests/MenuHelperTests.cs b/Bootstrap.DataAccessTests/MenuHelperTests.cs index 7222d40e..308ae0df 100644 --- a/Bootstrap.DataAccessTests/MenuHelperTests.cs +++ b/Bootstrap.DataAccessTests/MenuHelperTests.cs @@ -32,6 +32,12 @@ namespace Bootstrap.DataAccess.Tests Assert.IsTrue(MenuHelper.RetrieveMenus().Count() > 1, "不带参数的MenuHelper.RetrieveMenus方法调用失败"); } + [TestMethod] + public void RetrieveMenuByUserIDTest() + { + Assert.IsTrue(MenuHelper.RetrieveMenusByUserId(1).Count() > 1, "根据用户ID查询菜单的MenuHelper.RetrieveMenusByUserId方法调用失败"); + } + [TestMethod] public void SaveMenuTest() {