From ab3fc273010f63f4be7212e176063c815efbae86 Mon Sep 17 00:00:00 2001 From: yubaolee Date: Fri, 8 Jan 2016 12:53:48 +0800 Subject: [PATCH] =?UTF-8?q?1.0=20beta=E7=89=88=201=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E8=BF=9B=E5=87=BA=E5=BA=93=E5=AE=9E=E4=BE=8BStock=EF=BC=9B=202?= =?UTF-8?q?=20=E5=85=A8=E9=9D=A2=E5=AE=9E=E7=8E=B0=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=86=E7=A6=BB=EF=BC=8C=E5=8F=82=E8=80=83?= =?UTF-8?q?Stock=E5=AE=9E=E4=BE=8B=EF=BC=9B=203=20=E5=85=A8=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E5=9F=BA=E4=BA=8ECodeSmith=20EF=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=EF=BC=9B=204=20=E5=85=A8=E9=9D=A2=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E8=8F=9C=E5=8D=95=E6=8E=88=E6=9D=83;=205=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0Anonymous=E6=9C=BA=E5=88=B6=EF=BC=8C=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E7=81=B5=E6=B4=BB=E6=8E=A7=E5=88=B6Action=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CodeSmith/Controller.cst | 4 +- OpenAuth.App/LoginApp.cs | 5 +- OpenAuth.App/ModuleElementManagerApp.cs | 4 +- OpenAuth.App/OrgManagerApp.cs | 11 +-- OpenAuth.App/StockManagerApp.cs | 60 +++++------- OpenAuth.Domain/Interface/IOrgRepository.cs | 6 ++ OpenAuth.Mvc/Controllers/BaseController.cs | 11 ++- .../Controllers/OrgManagerController.cs | 1 + .../Controllers/StockManagerController.cs | 26 ++---- OpenAuth.Mvc/Models/AnonymousAttribute.cs | 14 +++ OpenAuth.Mvc/OpenAuth.Mvc.csproj | 1 + OpenAuth.Mvc/Properties/AssemblyInfo.cs | 8 +- OpenAuth.Mvc/Views/StockManager/Add.cshtml | 16 +--- OpenAuth.Mvc/Views/StockManager/Index.cshtml | 88 ++++++++---------- OpenAuth.Repository/OrgRepository.cs | 14 +++ OpenAuth.Repository/StockRepository.cs | 2 +- 建表&初始化数据.sql | Bin 120230 -> 141024 bytes 17 files changed, 139 insertions(+), 132 deletions(-) create mode 100644 OpenAuth.Mvc/Models/AnonymousAttribute.cs 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 c221e0e827034060f8344c06a844985821c4e887..a5416e20ce12970b5b1314e006bc683592c8576b 100644 GIT binary patch delta 4368 zcmb_f3rtj38a_vc;W|uVSQtc6ndyUvAkGX711#$f52s^K^nZn!Yn!Vh#BI86!TO{ipB%<2Id`l>4$~?i#XVel?l4&!zWoU$*0(I^wjtRa=8l>9=Z!grK) zMpHecE=>(X-+pnl;CeVd>1SR86~yyD*FKP1G?lGNSakKk?J8Jzbcc3Znq-HIq>-RE zH`iy1T~B`Q7QMYOl;%U@OGcIFCc4ek0b91t53Y&bTcasVwJZ>qd!01GPAp*FsKyNJ z$V5zBr7@oSvNb3ReVGAfctl+O$6OAyg1K{EkTJyi6d<^LLU3K2Xl|yk_?!SAHt3=C zbzNj7#;gVY&}Y<4`X&$dw5P&YpB`@gK0)3Q<9atzc=s>DBU1Pf zF0mlR7-}B+t#}2UQ|L3o1Q@{)Dml*x{urm+!E9bRIZGEsUMXot67s9z71SLELZWgY%qVRA-b2n~9vNRbpBk z7hu7w1f$KBbcoLkXV8cOk^?DX%KgFdcY_N^ne4X$*%68!xp34I|ASe{K8-7oU4>~O znS`^B$Bf%AOXq#C1ZN^vydoVTYNy$V9OjuI2$mE^h(qOP8<9gjGsGHzh5+#r&Lr6eV&2^UIaU#qkB1e?ZEzk(s49NKR0S zk};B$Tr8ZRlX(qTFgr@oMOYXLNRlI$p$xS{@p(xODs~q{JbFHZN&u-ml&r9;%)bku zlu0zVMJf~}mAz*LxX_}X8N_GkeqLlOgR^9kU3)hp-?%% zcIf_x8CIUlQYlx4HIai|)gd_@hT1gIa%kmNuzS=9hG8A-`FkkHj@IR3*2i7(;Grf_ zG+fLQbaL1Gsq5$tDEqW9(#|UYCO*mN>6eA`e)WpHr8?vEX+H*=j4 zx>g&KRVNTUU+`L6OO#Uxq_|UJ10zb=gNf7e5q#cJF&T%7ZWj)uLwuTVKJZ@`an(H~ zH)=TtOEG=;8ALv{@O0u0--0sux(O$Q`gEf@+mH;rxGu7%!6~4fvWuFj4y?OK`S_~j6UGFX@nPU+Q2Xw16|)F^<-+{!W9!}g(UIH)eUiA z_&yyz_;Nis$C`Sk((#eX&Iq)K{~sDlh5cW(@-=9`!AVk~{^kbhIdWZqim&ULH-e_a zl5f_7dpsQsx1I&>XX)a#TZa=>9?p zHGZ~TMP?ndM_}d5#DRWS%xtl=NJWh@+45+rg|El*{dh`Gh}CGTckDc5rG0*9GA*2| z=daGDb@i8CoO+?xxsX!!)-kGKdmp1mLiSj85k1j6no6mbLpJPTNPLFvO{YG;DT5xN zbBf&lp(XT9D!k&!YPr~a;{bo1L!)Xi?(Jk7GoPePQ@6IgiqmT;+n+}TR#Q!1W0qgj zKK7)ACa?ud>2=n=kDi!*b+OL<^ayKxBd~TQgI2K7y|hp7^|Uo}e%JQ>t%0Gev#ixZ zeL`TFp_qREyH;w^2;4%hcJEs@v=A*fz|bWPyOT$IWY(z6I*Dr#j-+S&tMaKKohzte z?hB|w!%C`WH>zkobJ|h;W689~|8xUAwa{;PiN402!2NQJb(yG^xp&d2Y0;tU)psc& zxj+K>UZyq7xf^Yk{18~XA?q37TP-Q;@B9rdNn+WlD6z8#EeNs9k52piCmQY#?u!%5 zcbsY>rH@Ni<)&X~dR_0;NO29>$)W!i_>R|ev0GMJjmx1`QOcJki>sgqCDPh8|8w0# zdUGMIj8YmtGe1rb>iGBBGUCDeJ;cSw>6e<1*4I}u)2pGHayAh)K)V l+0svI+2WJ*kp6ZRXFgH6xk1j)V`{^WCR6acPthkH`#*@nb^!nY delta 2136 zcmbW1e`s4(6vyw$(j;afeO=m6H|;v>OuBCE%S)Q3MeEY0!Lr(A7F0UYuCuyM*EOph zOdVtHulWNUy^sT=NakiKZiJ5a$3q3F)49=E2?fg>q8UReBEtS~$dKr{FR!d*EtGJ{ zefOPrKIg~xyqD~pZStbk^k43>$(o?L zSaEMH(25;5h9Tomjc29v*EvP52{_NIBjbpZoUBf?q zF#q1@sk~US5&p=0omHW*O)QLMcBtiNXY81=fmf&&;u*gUB`cVn z@ro@1=w<_iziPl?8dVd4?KHk1!AIP10ApLJhZS=_Pq_!#QFh3{+X;*k7@%v2@VjoP z!&VO*D#Y`-!)%P!r~yX^@)Opqzc_mCI?Q+;EUmJ8(hRHsI6%oLLtCm;G=L(+RkQiG$FKHwR$?yG9``ZvQDr z;d}#f%fb;_j>iudhO=lhBOsd#SaP;tYOFAT1BpAUmbnfNy#Eb! zAqkKaRZijqn_lXldr6}u+aCovm+ajb+Y1xgQ`e!b@_}H9ThNE8D-<*F0}1B5P3@n! cM&X3`8VMFC!!zqmX3RQFY3*r~>B5u$1O4Px#