From 975632c81ef34f7bdc89f4198d62c1c1b8bb837d Mon Sep 17 00:00:00 2001 From: yubaolee Date: Mon, 7 Dec 2015 15:22:01 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=85=A8=E9=9D=A2=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=8C=89=E7=99=BB=E5=BD=95=E7=94=A8=E6=88=B7=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=8C=89=E9=92=AE=EF=BC=9B=202=E3=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A8=A1=E5=9D=97=E6=8E=88=E6=9D=83=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=9B=203=E3=80=81=E4=BC=98=E5=8C=96=E5=86=85?= =?UTF-8?q?=E9=83=A8=E5=8A=9F=E8=83=BD=E5=8A=A0=E8=BD=BD=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=9A=84=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6=EF=BC=8C=E6=AF=94?= =?UTF-8?q?=E5=A6=82=EF=BC=9A=E6=8B=A5=E6=9C=89=E6=A8=A1=E5=9D=97=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E5=8A=9F=E8=83=BD=E7=9A=84=E7=94=A8=E6=88=B7=E7=BB=99?= =?UTF-8?q?=E5=88=AB=E4=BA=BA=E6=8E=88=E6=9D=83=E6=97=B6=EF=BC=8C=E5=8F=AA?= =?UTF-8?q?=E8=83=BD=E8=AE=BF=E9=97=AE=E5=88=B0=E8=87=AA=E5=B7=B1=E6=8B=A5?= =?UTF-8?q?=E6=9C=89=E7=9A=84=E6=A8=A1=E5=9D=97=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/LoginApp.cs | 12 +++++ OpenAuth.App/ModuleElementManagerApp.cs | 12 +++++ OpenAuth.App/ModuleManagerApp.cs | 18 +++++-- OpenAuth.Mvc/Controllers/BaseController.cs | 12 ++--- .../ModuleElementManagerController.cs | 47 +++++++++++++++++- .../Controllers/ModuleManagerController.cs | 6 ++- OpenAuth.Mvc/OpenAuth.Mvc.csproj | 1 + OpenAuth.Mvc/Views/Home/MenuHeader.cshtml | 25 ++++++++-- .../ModuleElementManager/AssignForRole.cshtml | 33 ++++++------ OpenAuth.Mvc/Views/ModuleManager/Index.cshtml | 11 ++-- OpenAuth.Mvc/Views/OrgManager/Index.cshtml | 1 - OpenAuth.Mvc/Views/RoleManager/Index.cshtml | 11 ++-- OpenAuth.Mvc/Views/UserManager/Index.cshtml | 29 ++++++++--- 建表&初始化数据.sql | Bin 94758 -> 93428 bytes 14 files changed, 165 insertions(+), 53 deletions(-) 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(); + //ûɫԼ䵽IJ˵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(); + + //用户角色与自己分配到的模块ID 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; //为View显示服务,主要是为了显示按钮 } } + 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 d4956881f2dffbe9def04c0ffddd8e3843a3f3fc..e5fddc2e80a319841646000ddec41ea1e63399b8 100644 GIT binary patch delta 36 qcmZ4Xg!Ri!)(Lu(KdE_4ci?5@+PutMixI@)Xnw-B{RtbRQ#Jq;cnxL% delta 697 zcmexzlXck>)(LvkH*hj4`GztSGo&&UF}MK9G=@xuJRqF{bTLA!2qWV713P?R*d4l zz-iLlnrJSgQs@~0U549j7@-GMj^a8&X35Dm)45m?p%zG9sHFg7I~kY`Kv9tc^sWYj zA%hu%4ucWSunWec1=)>2!$64$+4xwv@d_Xd&_Z`|K#