diff --git a/OpenAuth.App/LoginApp.cs b/OpenAuth.App/LoginApp.cs index 38a25a5d..259ad2ae 100644 --- a/OpenAuth.App/LoginApp.cs +++ b/OpenAuth.App/LoginApp.cs @@ -50,8 +50,20 @@ namespace OpenAuth.App u => (u.FirstId == user.Id && u.Key == "UserModule") || (u.Key == "RoleModule" && userRoleIds.Contains(u.FirstId))).Select(u =>u.SecondId).ToList(); + //用户角色与自己分配到的菜单ID + var elementIds = + _relevanceRepository.Find( + u => + (u.FirstId == user.Id && u.Key == "UserElement") || + (u.Key == "RoleElement" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); //得出最终用户拥有的模块 loginVM.Modules = _moduleRepository.Find(u => moduleIds.Contains(u.Id)).MapToList(); + + //模块菜单权限 + foreach (var module in loginVM.Modules) + { + module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id && elementIds.Contains( u.Id)).ToList(); + } return loginVM; } diff --git a/OpenAuth.App/ModuleElementManagerApp.cs b/OpenAuth.App/ModuleElementManagerApp.cs index 7875e161..1c4e4820 100644 --- a/OpenAuth.App/ModuleElementManagerApp.cs +++ b/OpenAuth.App/ModuleElementManagerApp.cs @@ -106,5 +106,17 @@ namespace OpenAuth.App { _repository.Delete(u =>u.Id ==id); } + + public void AssignForRole(int roleId, int[] menuIds) + { + _relevanceRepository.DeleteBy("RoleElement", roleId); + _relevanceRepository.AddRelevance("RoleElement", menuIds.ToLookup(u => roleId)); + } + + public void AssignForUser(int userId, int[] ids) + { + _relevanceRepository.DeleteBy("UserElement", userId); + _relevanceRepository.AddRelevance("UserElement", ids.ToLookup(u => userId)); + } } } diff --git a/OpenAuth.App/ModuleManagerApp.cs b/OpenAuth.App/ModuleManagerApp.cs index 0b877a07..2b127350 100644 --- a/OpenAuth.App/ModuleManagerApp.cs +++ b/OpenAuth.App/ModuleManagerApp.cs @@ -107,14 +107,26 @@ namespace OpenAuth.App /// /// 鍔犺浇鐗瑰畾鐢ㄦ埛鐨勬ā鍧 + /// TODO:杩欓噷浼氬姞杞界敤鎴峰強鐢ㄦ埛瑙掕壊鐨勬墍鏈夋ā鍧楋紝鈥滀负鐢ㄦ埛鍒嗛厤妯″潡鈥濆姛鑳戒細缁欎汉涓绉嶆贩涔辩殑鎰熻锛屼絾鍙互鎺ュ彈 /// /// The user unique identifier. public List LoadForUser(int userId) { + //鐢ㄦ埛瑙掕壊 + var userRoleIds = + _relevanceRepository.Find(u => u.FirstId == userId && u.Key == "UserRole").Select(u => u.SecondId).ToList(); + + //鐢ㄦ埛瑙掕壊涓庤嚜宸卞垎閰嶅埌鐨勬ā鍧桰D var moduleIds = - _relevanceRepository.Find(u => u.FirstId == userId && u.Key == "UserModule") - .Select(u => u.SecondId) - .ToList(); + _relevanceRepository.Find( + u => + (u.FirstId == userId && u.Key == "UserModule") || + (u.Key == "RoleModule" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); + + //var moduleIds = + // _relevanceRepository.Find(u => u.FirstId == userId && u.Key == "UserModule") + // .Select(u => u.SecondId) + // .ToList(); if (!moduleIds.Any()) return new List(); return _repository.Find(u => moduleIds.Contains(u.Id)).ToList(); } diff --git a/OpenAuth.Mvc/Controllers/BaseController.cs b/OpenAuth.Mvc/Controllers/BaseController.cs index 2e2c4bc8..7a64b365 100644 --- a/OpenAuth.Mvc/Controllers/BaseController.cs +++ b/OpenAuth.Mvc/Controllers/BaseController.cs @@ -32,14 +32,11 @@ namespace OpenAuth.Mvc.Controllers filterContext.Result = new RedirectResult("/Login/Index"); return; } + var controllername = Request.RequestContext.RouteData.Values["controller"].ToString().ToLower(); - string url = Request.Url.LocalPath; - if (url != "/" - && !url.Contains("Main") - && !url.Contains("Error") - && !url.Contains("Git")) + if (controllername != "home") //涓婚〉鎺у埗鍣ㄦ棤闇鏉冮檺鎺у埗 { - var module = loginUser.Modules.FirstOrDefault(u => url.Contains(u.Url)); + var module = loginUser.Modules.FirstOrDefault(u => u.Url.ToLower().Contains(controllername)); if (module == null) { filterContext.Result = new RedirectResult("/Login/Index"); @@ -47,9 +44,10 @@ namespace OpenAuth.Mvc.Controllers } else { - ViewBag.Module = module; + ViewBag.Module = module; //涓篤iew鏄剧ず鏈嶅姟锛屼富瑕佹槸涓轰簡鏄剧ず鎸夐挳 } } + base.OnActionExecuting(filterContext); } } diff --git a/OpenAuth.Mvc/Controllers/ModuleElementManagerController.cs b/OpenAuth.Mvc/Controllers/ModuleElementManagerController.cs index 8453879e..e67b1470 100644 --- a/OpenAuth.Mvc/Controllers/ModuleElementManagerController.cs +++ b/OpenAuth.Mvc/Controllers/ModuleElementManagerController.cs @@ -15,6 +15,7 @@ using System; using System.Collections.Generic; using System.Data.Entity.Validation; +using System.Linq; using System.Web.Mvc; using Infrastructure; using OpenAuth.App; @@ -78,11 +79,55 @@ namespace OpenAuth.Mvc.Controllers ViewBag.RoleId = roleId; return View(); } + [HttpPost] + public string AssignForRole(int roleId, string menuIds) + { + try + { + var ids = menuIds.Split(',').Select(id => int.Parse(id)).ToArray(); + _app.AssignForRole(roleId, ids); + } + catch (Exception e) + { + _bjuiResponse.statusCode = "300"; + _bjuiResponse.message = e.Message; + } + return JsonHelper.Instance.Serialize(_bjuiResponse); + } - public string Load(int roleId, int orgId) + public string LoadForRole(int roleId, int orgId) { return JsonHelper.Instance.Serialize(_app.LoadWithAccess("RoleElement", roleId, orgId)); } #endregion + + #region 涓虹敤鎴峰垎閰嶈彍鍗 + + public ActionResult AssignForUser(int userId) + { + ViewBag.UserId = userId; + return View(); + } + [HttpPost] + public string AssignForUser(int userId, string menuIds) + { + try + { + var ids = menuIds.Split(',').Select(id => int.Parse(id)).ToArray(); + _app.AssignForUser(userId, ids); + } + catch (Exception e) + { + _bjuiResponse.statusCode = "300"; + _bjuiResponse.message = e.Message; + } + return JsonHelper.Instance.Serialize(_bjuiResponse); + } + + public string LoadForUser(int userId, int orgId) + { + return JsonHelper.Instance.Serialize(_app.LoadWithAccess("UserElement", userId, orgId)); + } + #endregion } } \ No newline at end of file diff --git a/OpenAuth.Mvc/Controllers/ModuleManagerController.cs b/OpenAuth.Mvc/Controllers/ModuleManagerController.cs index 090a0709..1def878c 100644 --- a/OpenAuth.Mvc/Controllers/ModuleManagerController.cs +++ b/OpenAuth.Mvc/Controllers/ModuleManagerController.cs @@ -4,6 +4,8 @@ using OpenAuth.Domain; using System; using System.Linq; using System.Web.Mvc; +using Infrastructure.Helper; +using OpenAuth.App.ViewModel; namespace OpenAuth.Mvc.Controllers { @@ -50,7 +52,7 @@ namespace OpenAuth.Mvc.Controllers /// public string LoadForTree() { - var orgs = _app.LoadForTree(); + var orgs = SessionHelper.GetSessionUser().Modules; //娣诲姞鏍硅妭鐐 orgs.Add(new Module { @@ -70,7 +72,7 @@ namespace OpenAuth.Mvc.Controllers { Id = 0, ParentId = -1, - Name = "宸蹭负鐢ㄦ埛鍒嗛厤鐨勬ā鍧", + Name = "鐢ㄦ埛鍙闂ā鍧楋紙鍖呮嫭瑙掕壊鎵鎷ユ湁鐨勶級", CascadeId = "0" }); return JsonHelper.Instance.Serialize(orgs); diff --git a/OpenAuth.Mvc/OpenAuth.Mvc.csproj b/OpenAuth.Mvc/OpenAuth.Mvc.csproj index 2bacc647..25b69ca3 100644 --- a/OpenAuth.Mvc/OpenAuth.Mvc.csproj +++ b/OpenAuth.Mvc/OpenAuth.Mvc.csproj @@ -624,6 +624,7 @@ + diff --git a/OpenAuth.Mvc/Views/Home/MenuHeader.cshtml b/OpenAuth.Mvc/Views/Home/MenuHeader.cshtml index 9c49d592..4f7b2cc9 100644 --- a/OpenAuth.Mvc/Views/Home/MenuHeader.cshtml +++ b/OpenAuth.Mvc/Views/Home/MenuHeader.cshtml @@ -28,9 +28,7 @@ \ No newline at end of file diff --git a/OpenAuth.Mvc/Views/ModuleElementManager/AssignForRole.cshtml b/OpenAuth.Mvc/Views/ModuleElementManager/AssignForRole.cshtml index 9eb96c94..573ff9d7 100644 --- a/OpenAuth.Mvc/Views/ModuleElementManager/AssignForRole.cshtml +++ b/OpenAuth.Mvc/Views/ModuleElementManager/AssignForRole.cshtml @@ -9,10 +9,10 @@
- 鍙閫夌粺涓鎺堟潈 + 鐐瑰嚮琛屼负鍗曢夛紝鐐瑰嚮澶嶉夋鍙閫夌粺涓鎺堟潈
  -  
@@ -70,7 +70,7 @@ width: 80 } ], - dataUrl: 'ModuleElementManager/Load?orgId=' + selectedId +'&roleId='+$('#roleId').val(), + dataUrl: 'ModuleElementManager/LoadForRole?orgId=' + selectedId +'&roleId='+$('#roleId').val(), fullGrid: true, showLinenumber: true, showCheckboxcol: true, @@ -102,7 +102,9 @@ }, callback: { onClick: zTreeOnClick } }; - $.getJSON('ModuleManager/LoadForTree', function (json) { + $.getJSON('ModuleManager/LoadForRole', + { roleId: $('#roleId').val() }, + function (json) { var zTreeObj = $.fn.zTree.init($('#@_treeId'), setting, json); zTreeObj.expandAll(true); }); @@ -110,18 +112,17 @@ //鎺堟潈閫変腑鐨 function assign() { - var selected = getSelected(gridid, 2); + var selected = getSelectedMany(gridid, 2); if (selected == null) return; - - $(this).dialog({ - id: 'assign', - url: '/ModuleManager/Add?id=' + selected, - title: '缂栬緫', - onClose: function () { - refreshGrid(); - } - }); - + + $.post("ModuleElementManager/AssignForRole", + { + roleId:$('#roleId').val(), + menuIds: selected + }, + function (data) { + refreshGrid(); + }); } function refreshGrid() { diff --git a/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml b/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml index 688c679c..ad8a7c41 100644 --- a/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml +++ b/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml @@ -19,7 +19,6 @@ \ No newline at end of file diff --git a/寤鸿〃&鍒濆鍖栨暟鎹.sql b/寤鸿〃&鍒濆鍖栨暟鎹.sql index d4956881..e5fddc2e 100644 Binary files a/寤鸿〃&鍒濆鍖栨暟鎹.sql and b/寤鸿〃&鍒濆鍖栨暟鎹.sql differ