diff --git a/CodeSmith/Controller.cst b/CodeSmith/Controller.cst index 8c088a98..c4352691 100644 --- a/CodeSmith/Controller.cst +++ b/CodeSmith/Controller.cst @@ -71,9 +71,9 @@ namespace OpenAuth.Mvc.Controllers /// /// 加载节点下面的所有<%=ModuleName %>s /// - public string Load(int parentidId, int pageCurrent = 1, int pageSize = 30) + public string Load(int parentId, int pageCurrent = 1, int pageSize = 30) { - return JsonHelper.Instance.Serialize(_app.Load(parentidId, pageCurrent, pageSize)); + return JsonHelper.Instance.Serialize(_app.Load(parentId, pageCurrent, pageSize)); } public string LoadForTree() diff --git a/OpenAuth.App/LoginApp.cs b/OpenAuth.App/LoginApp.cs index c7aa9b6b..475a5368 100644 --- a/OpenAuth.App/LoginApp.cs +++ b/OpenAuth.App/LoginApp.cs @@ -80,7 +80,7 @@ namespace OpenAuth.App var orgids = _relevanceRepository.Find( u => (u.FirstId == user.Id && u.Key == "UserAccessedOrg") || - (u.Key == "RoleAccessdOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); + (u.Key == "RoleAccessedOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); loginVM.AccessedOrgs = _orgRepository.Find(u => orgids.Contains(u.Id)).ToList(); return loginVM; @@ -95,7 +95,8 @@ namespace OpenAuth.App { User = new User { - Name = "开发者账号" + Name = "开发者账号", + Account = "System" } }; loginUser.Modules = _moduleRepository.Find(null).MapToList(); diff --git a/OpenAuth.App/ModuleElementManagerApp.cs b/OpenAuth.App/ModuleElementManagerApp.cs index a01f364e..9fd4ded1 100644 --- a/OpenAuth.App/ModuleElementManagerApp.cs +++ b/OpenAuth.App/ModuleElementManagerApp.cs @@ -98,14 +98,14 @@ namespace OpenAuth.App public void AssignForRole(int roleId,int moduleId, int[] menuIds) { - var elements = _repository.Find(u => u.ModuleId == moduleId).Select(u =>u.Id); + var elements = _repository.Find(u => u.ModuleId == moduleId).Select(u =>u.Id).ToArray(); _relevanceRepository.Delete(u =>elements.Contains(u.SecondId) &&u.Key =="RoleElement" && u.FirstId == roleId); _relevanceRepository.AddRelevance("RoleElement", menuIds.ToLookup(u => roleId)); } public void AssignForUser(int userId, int moduleId, int[] ids) { - var elements = _repository.Find(u => u.ModuleId == moduleId).Select(u => u.Id); + var elements = _repository.Find(u => u.ModuleId == moduleId).Select(u => u.Id).ToArray(); _relevanceRepository.Delete(u => elements.Contains(u.SecondId) && u.Key == "UserElement" && u.FirstId == userId); _relevanceRepository.AddRelevance("UserElement", ids.ToLookup(u => userId)); } diff --git a/OpenAuth.App/OrgManagerApp.cs b/OpenAuth.App/OrgManagerApp.cs index 7e0470eb..84f3c23d 100644 --- a/OpenAuth.App/OrgManagerApp.cs +++ b/OpenAuth.App/OrgManagerApp.cs @@ -39,16 +39,7 @@ namespace OpenAuth.App /// public IList LoadAllChildren(int orgId) { - string cascadeId = "0."; - if (orgId != 0) - { - var org = _repository.FindSingle(u => u.Id == orgId); - if (org == null) - throw new Exception("未能找到指定对象信息"); - cascadeId = org.CascadeId; - } - - return _repository.Find(u => u.CascadeId.Contains(cascadeId) && u.Id != orgId).ToList(); + return _repository.GetSubOrgs(orgId).ToList(); } /// diff --git a/OpenAuth.App/StockManagerApp.cs b/OpenAuth.App/StockManagerApp.cs index 717c4b47..12785dc1 100644 --- a/OpenAuth.App/StockManagerApp.cs +++ b/OpenAuth.App/StockManagerApp.cs @@ -1,10 +1,11 @@  using OpenAuth.Domain; using OpenAuth.Domain.Interface; -using System; using System.Collections.Generic; using System.Linq; using Infrastructure; +using Infrastructure.Helper; +using OpenAuth.App.ViewModel; namespace OpenAuth.App { @@ -20,39 +21,38 @@ namespace OpenAuth.App _orgRepository = orgRepository; } - public int GetStockCntInOrg(int orgId) - { - if (orgId == 0) - { - return _repository.Find(null).Count(); - } - else - { - return _repository.GetStockCntInOrgs(GetSubOrgIds(orgId)); - } - } - - public List LoadAll() - { - return _repository.Find(null).ToList(); - } - /// - /// 加载一个节点下面的一个或全部Stocks + /// 根据部门ID得到进出库信息 /// public dynamic Load(int orgId, int pageindex, int pagesize) { IEnumerable Stocks; - int total = 0; + var user = SessionHelper.GetSessionUser(); + var loginOrgs = user.AccessedOrgs.Select(u => u.Id).ToArray(); + + int total; if (orgId == 0) { - Stocks = _repository.LoadStocks(pageindex, pagesize); - total = _repository.GetCount(); + + if (loginOrgs.Length == 0) //改用户没有任何可见机构 + { + Stocks = _repository.Find(pageindex, pagesize, "", u => u.User == user.User.Account); + total = _repository.GetCount(u =>u.User ==user.User.Account); + } + else + { + Stocks = _repository.LoadInOrgs(pageindex, pagesize, loginOrgs); + total = _repository.GetStockCntInOrgs(loginOrgs); + } + } - else + else //加载选择的机构及用户可访问的所有子机构 { - Stocks = _repository.LoadInOrgs(pageindex, pagesize,GetSubOrgIds(orgId)); - total = _repository.GetStockCntInOrgs(orgId); + var orgs = _orgRepository.GetSubOrgs(orgId).Where(u =>loginOrgs.Contains(u.Id)); + List orgIds = orgs.Select(u => u.Id).ToList(); + orgIds.Add(orgId); + Stocks = _repository.LoadInOrgs(pageindex, pagesize, orgIds.ToArray()); + total = _repository.GetStockCntInOrgs(orgIds.ToArray()); } return new @@ -63,16 +63,6 @@ namespace OpenAuth.App }; } - /// - /// 获取当前节点的所有下级节点 - /// - private int[] GetSubOrgIds(int orgId) - { - var org = _orgRepository.FindSingle(u => u.Id == orgId); - var orgs = _orgRepository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); - return orgs; - } - public Stock Find(int id) { var stock = _repository.FindSingle(u => u.Id == id); diff --git a/OpenAuth.Domain/Interface/IOrgRepository.cs b/OpenAuth.Domain/Interface/IOrgRepository.cs index b6290257..7b7f76d4 100644 --- a/OpenAuth.Domain/Interface/IOrgRepository.cs +++ b/OpenAuth.Domain/Interface/IOrgRepository.cs @@ -11,5 +11,11 @@ namespace OpenAuth.Domain.Interface IEnumerable LoadOrgs(); IEnumerable LoadByUser(int userId); + + /// + /// 得到全部子部门 + /// + /// 部门ID + IEnumerable GetSubOrgs(int orgId); } } diff --git a/OpenAuth.Mvc/Controllers/BaseController.cs b/OpenAuth.Mvc/Controllers/BaseController.cs index 7a64b365..b783fc94 100644 --- a/OpenAuth.Mvc/Controllers/BaseController.cs +++ b/OpenAuth.Mvc/Controllers/BaseController.cs @@ -15,7 +15,9 @@ using Infrastructure.Helper; using OpenAuth.App.ViewModel; using OpenAuth.Mvc.Models; +using System; using System.Linq; +using System.Reflection; using System.Web.Mvc; namespace OpenAuth.Mvc.Controllers @@ -36,8 +38,15 @@ namespace OpenAuth.Mvc.Controllers if (controllername != "home") //主页控制器无需权限控制 { + var actionname = Request.RequestContext.RouteData.Values["action"].ToString(); + var function = this.GetType().GetMethods().FirstOrDefault(u => u.Name == actionname); + if (function == null) + throw new Exception("未能找到Action"); + + var anonymous = function.GetCustomAttribute(typeof(AnonymousAttribute)); + var module = loginUser.Modules.FirstOrDefault(u => u.Url.ToLower().Contains(controllername)); - if (module == null) + if (module == null && anonymous == null) { filterContext.Result = new RedirectResult("/Login/Index"); return; diff --git a/OpenAuth.Mvc/Controllers/OrgManagerController.cs b/OpenAuth.Mvc/Controllers/OrgManagerController.cs index 7cfce9bb..54981667 100644 --- a/OpenAuth.Mvc/Controllers/OrgManagerController.cs +++ b/OpenAuth.Mvc/Controllers/OrgManagerController.cs @@ -60,6 +60,7 @@ namespace OpenAuth.Mvc.Controllers var orgs = SessionHelper.GetSessionUser().AccessedOrgs; return JsonHelper.Instance.Serialize(orgs); } + [Anonymous] public string LoadOrg() { var orgs = SessionHelper.GetSessionUser().AccessedOrgs.MapToList(); diff --git a/OpenAuth.Mvc/Controllers/StockManagerController.cs b/OpenAuth.Mvc/Controllers/StockManagerController.cs index 07b132ee..23319b6b 100644 --- a/OpenAuth.Mvc/Controllers/StockManagerController.cs +++ b/OpenAuth.Mvc/Controllers/StockManagerController.cs @@ -3,6 +3,8 @@ using OpenAuth.App; using OpenAuth.Domain; using System; using System.Web.Mvc; +using Infrastructure.Helper; +using OpenAuth.App.ViewModel; namespace OpenAuth.Mvc.Controllers { @@ -33,7 +35,10 @@ namespace OpenAuth.Mvc.Controllers { try { - _app.AddOrUpdate(model); + var newmodel = new Stock(); + model.CopyTo(newmodel); + newmodel.User = SessionHelper.GetSessionUser().User.Account; + _app.AddOrUpdate(newmodel); } catch (Exception ex) { @@ -46,24 +51,11 @@ namespace OpenAuth.Mvc.Controllers /// /// 加载节点下面的所有Stocks /// - public string Load(int parentidId, int pageCurrent = 1, int pageSize = 30) + public string Load(int parentId, int pageCurrent = 1, int pageSize = 30) { - return JsonHelper.Instance.Serialize(_app.Load(parentidId, pageCurrent, pageSize)); + return JsonHelper.Instance.Serialize(_app.Load(parentId, pageCurrent, pageSize)); } - - public string LoadForTree() - { - var models = _app.LoadAll(); - //添加根节点 - models.Add(new Stock - { - Id = 0, - OrgId = -1, - Name = "根结点", - }); - return JsonHelper.Instance.Serialize(models); - } - + public string Delete(int Id) { try diff --git a/OpenAuth.Mvc/Models/AnonymousAttribute.cs b/OpenAuth.Mvc/Models/AnonymousAttribute.cs new file mode 100644 index 00000000..7358bfa4 --- /dev/null +++ b/OpenAuth.Mvc/Models/AnonymousAttribute.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace OpenAuth.Mvc.Models +{ + /// + /// 允许匿名访问 + /// + public class AnonymousAttribute :Attribute + { + } +} \ No newline at end of file diff --git a/OpenAuth.Mvc/OpenAuth.Mvc.csproj b/OpenAuth.Mvc/OpenAuth.Mvc.csproj index 007cf93e..811fccf0 100644 --- a/OpenAuth.Mvc/OpenAuth.Mvc.csproj +++ b/OpenAuth.Mvc/OpenAuth.Mvc.csproj @@ -137,6 +137,7 @@ Global.asax + diff --git a/OpenAuth.Mvc/Properties/AssemblyInfo.cs b/OpenAuth.Mvc/Properties/AssemblyInfo.cs index d67e7fa4..73f43e70 100644 --- a/OpenAuth.Mvc/Properties/AssemblyInfo.cs +++ b/OpenAuth.Mvc/Properties/AssemblyInfo.cs @@ -5,13 +5,13 @@ using System.Runtime.InteropServices; // 有关程序集的常规信息是通过以下项进行控制的 // 控制。更改这些特性值可修改 // 与程序集关联的信息。 -[assembly: AssemblyTitle("OpenAuth.Mvc")] +[assembly: AssemblyTitle("基于DDDLite的权限管理系统")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("www.cnblogs.com/yubaolee")] [assembly: AssemblyProduct("OpenAuth.Mvc")] -[assembly: AssemblyCopyright("版权所有(C) 2015")] -[assembly: AssemblyTrademark("")] +[assembly: AssemblyCopyright("版权所有(C) 2015")] +[assembly: AssemblyTrademark("OpenAuth.Net")] [assembly: AssemblyCulture("")] // 将 ComVisible 设置为 false 将使此程序集中的类型 diff --git a/OpenAuth.Mvc/Views/StockManager/Add.cshtml b/OpenAuth.Mvc/Views/StockManager/Add.cshtml index 449aa55d..30fd0261 100644 --- a/OpenAuth.Mvc/Views/StockManager/Add.cshtml +++ b/OpenAuth.Mvc/Views/StockManager/Add.cshtml @@ -40,13 +40,7 @@ data-rule="required" size="20"> - - - - - - + @@ -59,9 +53,9 @@ @Html.HiddenFor(m =>m.OrgId) @if (Model.Id == 0) //添加 { - //这个只用于显示使用,并不会进行提交处理,真正提交的是cascadeId - - 所属部门: +
    + \ No newline at end of file diff --git a/OpenAuth.Repository/OrgRepository.cs b/OpenAuth.Repository/OrgRepository.cs index 5f629fee..c9ee66ad 100644 --- a/OpenAuth.Repository/OrgRepository.cs +++ b/OpenAuth.Repository/OrgRepository.cs @@ -24,5 +24,19 @@ namespace OpenAuth.Repository return result; } + + public IEnumerable GetSubOrgs(int orgId) + { + string cascadeId = "0."; + if (orgId != 0) + { + var org = FindSingle(u => u.Id == orgId); + if (org == null) + throw new Exception("未能找到指定对象信息"); + cascadeId = org.CascadeId; + } + + return Find(u => u.CascadeId.Contains(cascadeId) && u.Id != orgId); + } } } diff --git a/OpenAuth.Repository/StockRepository.cs b/OpenAuth.Repository/StockRepository.cs index 504abbbc..1e1349b0 100644 --- a/OpenAuth.Repository/StockRepository.cs +++ b/OpenAuth.Repository/StockRepository.cs @@ -15,7 +15,7 @@ namespace OpenAuth.Repository public IEnumerable LoadInOrgs(params int[] orgId) { - var result = from stock in Context.Stocks where orgId.Contains(stock.Id) + var result = from stock in Context.Stocks where orgId.Contains(stock.OrgId) select stock; return result; diff --git a/建表&初始化数据.sql b/建表&初始化数据.sql index c221e0e8..a5416e20 100644 Binary files a/建表&初始化数据.sql and b/建表&初始化数据.sql differ