diff --git a/OpenAuth.App/LoginApp.cs b/OpenAuth.App/LoginApp.cs index 475a5368..cd1719e4 100644 --- a/OpenAuth.App/LoginApp.cs +++ b/OpenAuth.App/LoginApp.cs @@ -1,115 +1,61 @@ -using Infrastructure; -using OpenAuth.App.ViewModel; -using OpenAuth.Domain; -using OpenAuth.Domain.Interface; -using System; +using System; using System.Linq; +using System.Web; +using Infrastructure; +using OpenAuth.App.ViewModel; +using System.Web.Security; +using OpenAuth.Domain.Service; namespace OpenAuth.App { public class LoginApp { - private IUserRepository _repository; - private IModuleRepository _moduleRepository; - private IRelevanceRepository _relevanceRepository; - private IRepository _moduleElementRepository; - private IResourceRepository _resourceRepository; - private IOrgRepository _orgRepository; + private AuthoriseService _service; - public LoginApp(IUserRepository repository, - IModuleRepository moduleRepository, - IRelevanceRepository relevanceRepository, - IRepository moduleElementRepository, - IResourceRepository resourceRepository, - IOrgRepository orgRepository) + public LoginApp(AuthoriseService service) { - _repository = repository; - _moduleRepository = moduleRepository; - _relevanceRepository = relevanceRepository; - _moduleElementRepository = moduleElementRepository; - _resourceRepository = resourceRepository; - _orgRepository = orgRepository; + _service = service; } - public LoginUserVM Login(string userName, string password) + public void Login(string userName, string password) { - var user = _repository.FindSingle(u => u.Account == userName); - if (user == null) - { - throw new Exception("用户帐号不存在"); - } - user.CheckPassword(password); + _service.Check(userName, password); + FormsAuthentication.SetAuthCookie(userName, true); - var loginVM = new LoginUserVM - { - User = user - }; - //用户角色 - var userRoleIds = - _relevanceRepository.Find(u => u.FirstId == user.Id && u.Key == "UserRole").Select(u => u.SecondId).ToList(); - - //用户角色与自己分配到的模块ID - var moduleIds = - _relevanceRepository.Find( - 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)).OrderBy(u => u.SortNo).MapToList(); - - //模块菜单权限 - foreach (var module in loginVM.Modules) - { - module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id && elementIds.Contains(u.Id)).OrderBy(u => u.Sort).ToList(); - } - - //用户角色与自己分配到的资源ID - var resourceIds = _relevanceRepository.Find( - u => - (u.FirstId == user.Id && u.Key == "UserResource") || - (u.Key == "RoleResource" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); - loginVM.Resources = _resourceRepository.Find(u => resourceIds.Contains(u.Id)).ToList(); - - //用户角色与自己分配到的机构ID - var orgids = _relevanceRepository.Find( - u => - (u.FirstId == user.Id && u.Key == "UserAccessedOrg") || - (u.Key == "RoleAccessedOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); - loginVM.AccessedOrgs = _orgRepository.Find(u => orgids.Contains(u.Id)).ToList(); - - return loginVM; } /// /// 开发者登陆 /// - public LoginUserVM LoginByDev() + public void LoginByDev() { - var loginUser = new LoginUserVM + _service.SetSysUser(); + FormsAuthentication.SetAuthCookie("System", true); + + } + + public LoginUserVM GetLoginUser() + { + if (!HttpContext.Current.User.Identity.IsAuthenticated) { - User = new User - { - Name = "开发者账号", - Account = "System" - } + throw new Exception("未登录"); + } + string username = HttpContext.Current.User.Identity.Name; + _service.GetUserAccessed(username); + var user = new LoginUserVM + { + User = _service.User, + AccessedOrgs = _service.Orgs, + Modules = _service.Modules.MapToList(), + Resources = _service.Resources, }; - loginUser.Modules = _moduleRepository.Find(null).MapToList(); - //模块包含的菜单 - foreach (var module in loginUser.Modules) + + foreach (var moduleView in user.Modules) { - module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id).OrderBy(u => u.Sort).ToList(); + moduleView.Elements = _service.ModuleElements.Where(u => u.ModuleId == moduleView.Id).OrderBy(u => u.Sort).ToList(); } - loginUser.Resources = _resourceRepository.Find(null).OrderBy(u => u.SortNo).ToList(); - - loginUser.AccessedOrgs = _orgRepository.Find(null).OrderBy(u => u.SortNo).ToList(); - return loginUser; + return user; } } } \ No newline at end of file diff --git a/OpenAuth.App/StockManagerApp.cs b/OpenAuth.App/StockManagerApp.cs index 12785dc1..ddd784c0 100644 --- a/OpenAuth.App/StockManagerApp.cs +++ b/OpenAuth.App/StockManagerApp.cs @@ -27,38 +27,38 @@ namespace OpenAuth.App public dynamic Load(int orgId, int pageindex, int pagesize) { IEnumerable Stocks; - var user = SessionHelper.GetSessionUser(); - var loginOrgs = user.AccessedOrgs.Select(u => u.Id).ToArray(); + //var user = AutofacExt.GetFromFac().GetLoginUser(); + //var loginOrgs = user.AccessedOrgs.Select(u => u.Id).ToArray(); - int total; - if (orgId == 0) - { + //int total; + //if (orgId == 0) + //{ - 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); - } + // 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 //加载选择的机构及用户可访问的所有子机构 - { - 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()); - } + //} + //else //加载选择的机构及用户可访问的所有子机构 + //{ + // 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 { - total = total, - list = Stocks, + // total = total, + // list = Stocks, pageCurrent = pageindex }; } diff --git a/OpenAuth.Domain/OpenAuth.Domain.csproj b/OpenAuth.Domain/OpenAuth.Domain.csproj index c1b9e74f..ed6bc197 100644 --- a/OpenAuth.Domain/OpenAuth.Domain.csproj +++ b/OpenAuth.Domain/OpenAuth.Domain.csproj @@ -63,6 +63,7 @@ + diff --git a/OpenAuth.Domain/Service/AuthoriseService.cs b/OpenAuth.Domain/Service/AuthoriseService.cs new file mode 100644 index 00000000..d6a1dec8 --- /dev/null +++ b/OpenAuth.Domain/Service/AuthoriseService.cs @@ -0,0 +1,147 @@ +// *********************************************************************** +// Assembly : OpenAuth.Domain +// Author : yubaolee +// Created : 04-21-2016 +// +// Last Modified By : yubaolee +// Last Modified On : 04-21-2016 +// Contact : Microsoft +// File: AuthenService.cs +// *********************************************************************** + +using OpenAuth.Domain.Interface; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace OpenAuth.Domain.Service +{ + /// + /// 领域服务 + /// 用户授权服务 + /// + public class AuthoriseService + { + private IUserRepository _repository; + private IModuleRepository _moduleRepository; + private IRelevanceRepository _relevanceRepository; + private IRepository _moduleElementRepository; + private IResourceRepository _resourceRepository; + private IOrgRepository _orgRepository; + + private User _user; + private List _modules; //用户可访问的模块 + private List _moduleElements; //用户可访问的菜单 + private List _resources; //用户可访问的资源 + private List _orgs; //用户可访问的机构 + + public AuthoriseService(IUserRepository repository, + IModuleRepository moduleRepository, + IRelevanceRepository relevanceRepository, + IRepository moduleElementRepository, + IResourceRepository resourceRepository, + IOrgRepository orgRepository) + { + _repository = repository; + _moduleRepository = moduleRepository; + _relevanceRepository = relevanceRepository; + _moduleElementRepository = moduleElementRepository; + _resourceRepository = resourceRepository; + _orgRepository = orgRepository; + } + + public List Modules + { + get { return _modules; } + } + + public List ModuleElements + { + get { return _moduleElements; } + } + + public List Resources + { + get { return _resources; } + } + + public List Orgs + { + get { return _orgs; } + } + + public User User + { + get { return _user; } + } + + public void Check(string userName, string password) + { + var _user = _repository.FindSingle(u => u.Account == userName); + if (_user == null) + { + throw new Exception("用户帐号不存在"); + } + _user.CheckPassword(password); + } + + /// + /// 设置开发者账号 + /// + public void SetSysUser() + { + _user = new User + { + Account = "System" + }; + } + + public void GetUserAccessed(string name) + { + if (name == "System") + { + _modules = _moduleRepository.Find(null).ToList(); + _moduleElements = _moduleElementRepository.Find(null).ToList(); + + _resources = _resourceRepository.Find(null).OrderBy(u => u.SortNo).ToList(); + + _orgs = _orgRepository.Find(null).OrderBy(u => u.SortNo).ToList(); + } + else + { + //用户角色 + var userRoleIds = _relevanceRepository.Find(u => u.FirstId == _user.Id && u.Key == "UserRole").Select(u => u.SecondId).ToList(); + + //用户角色与自己分配到的模块ID + var moduleIds = _relevanceRepository.Find( + 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(); + //得出最终用户拥有的模块 + _modules = _moduleRepository.Find(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo).ToList(); + + //模块菜单权限 + _moduleElements = _moduleElementRepository.Find(u => elementIds.Contains(u.Id)).ToList(); + + //用户角色与自己分配到的资源ID + var resourceIds = _relevanceRepository.Find( + u => + (u.FirstId == _user.Id && u.Key == "UserResource") || + (u.Key == "RoleResource" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); + _resources = _resourceRepository.Find(u => resourceIds.Contains(u.Id)).ToList(); + + //用户角色与自己分配到的机构ID + var orgids = _relevanceRepository.Find( + u => + (u.FirstId == _user.Id && u.Key == "UserAccessedOrg") || + (u.Key == "RoleAccessedOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); + _orgs = _orgRepository.Find(u => orgids.Contains(u.Id)).ToList(); + } + } + } +} \ No newline at end of file diff --git a/OpenAuth.Mvc/AutofacExt.cs b/OpenAuth.Mvc/AutofacExt.cs index ce45392c..5dc243c5 100644 --- a/OpenAuth.Mvc/AutofacExt.cs +++ b/OpenAuth.Mvc/AutofacExt.cs @@ -19,6 +19,7 @@ using OpenAuth.App; using System.Reflection; using System.Web.Mvc; using OpenAuth.Domain.Interface; +using OpenAuth.Domain.Service; using OpenAuth.Repository; namespace OpenAuth.Mvc @@ -44,6 +45,7 @@ namespace OpenAuth.Mvc builder.RegisterType(); builder.RegisterType(); builder.RegisterType(); + builder.RegisterType(); // Register your MVC controllers. builder.RegisterControllers(typeof(MvcApplication).Assembly); diff --git a/OpenAuth.Mvc/Controllers/BaseController.cs b/OpenAuth.Mvc/Controllers/BaseController.cs index 754e757e..e7da986c 100644 --- a/OpenAuth.Mvc/Controllers/BaseController.cs +++ b/OpenAuth.Mvc/Controllers/BaseController.cs @@ -24,6 +24,7 @@ using System.Diagnostics; using System.Linq; using System.Reflection; using System.Web.Mvc; +using OpenAuth.App; namespace OpenAuth.Mvc.Controllers { @@ -33,8 +34,8 @@ namespace OpenAuth.Mvc.Controllers protected override void OnActionExecuting(ActionExecutingContext filterContext) { - var loginUser = SessionHelper.GetSessionUser(); - if (loginUser == null) + var loginUser = AutofacExt.GetFromFac().GetLoginUser(); + if (!User.Identity.IsAuthenticated) { filterContext.Result = new RedirectResult("/Login/Index"); return; diff --git a/OpenAuth.Mvc/Controllers/HomeController.cs b/OpenAuth.Mvc/Controllers/HomeController.cs index 0a96c225..24df80dd 100644 --- a/OpenAuth.Mvc/Controllers/HomeController.cs +++ b/OpenAuth.Mvc/Controllers/HomeController.cs @@ -25,7 +25,7 @@ namespace OpenAuth.Mvc.Controllers [Anonymous] public ActionResult Index() { - var user = SessionHelper.GetSessionUser(); + var user = AutofacExt.GetFromFac().GetLoginUser(); return View(user.Modules); } diff --git a/OpenAuth.Mvc/Controllers/LoginController.cs b/OpenAuth.Mvc/Controllers/LoginController.cs index a2a0cbd0..c0ab039c 100644 --- a/OpenAuth.Mvc/Controllers/LoginController.cs +++ b/OpenAuth.Mvc/Controllers/LoginController.cs @@ -29,7 +29,7 @@ namespace OpenAuth.Mvc.Controllers { try { - SessionHelper.AddSessionUser( _app.Login(username, password)); + _app.Login(username, password); return RedirectToAction("Index", "Home"); } @@ -51,19 +51,20 @@ namespace OpenAuth.Mvc.Controllers { try { - SessionHelper.AddSessionUser(_app.LoginByDev()); + _app.LoginByDev(); return RedirectToAction("Index", "Home"); } catch (Exception e) { - return View(e.Message); + return RedirectToAction("Index", "Login"); } } public ActionResult Logout() { - SessionHelper.Clear(); + + FormsAuthentication.SignOut(); return RedirectToAction("Index", "Login"); } } diff --git a/OpenAuth.Mvc/Controllers/ModuleManagerController.cs b/OpenAuth.Mvc/Controllers/ModuleManagerController.cs index 700a6745..529002b8 100644 --- a/OpenAuth.Mvc/Controllers/ModuleManagerController.cs +++ b/OpenAuth.Mvc/Controllers/ModuleManagerController.cs @@ -45,13 +45,13 @@ namespace OpenAuth.Mvc.Controllers /// public string LoadForTree() { - var orgs = SessionHelper.GetSessionUser().Modules; + var orgs = AutofacExt.GetFromFac().GetLoginUser().Modules; return JsonHelper.Instance.Serialize(orgs); } public string LoadModuleWithRoot() { - var orgs = SessionHelper.GetSessionUser().Modules.MapToList(); + var orgs = AutofacExt.GetFromFac().GetLoginUser().Modules.MapToList(); //添加根节点 orgs.Add(new Module { diff --git a/OpenAuth.Mvc/Controllers/OrgManagerController.cs b/OpenAuth.Mvc/Controllers/OrgManagerController.cs index 2e198e8c..5c5b86b6 100644 --- a/OpenAuth.Mvc/Controllers/OrgManagerController.cs +++ b/OpenAuth.Mvc/Controllers/OrgManagerController.cs @@ -40,7 +40,7 @@ namespace OpenAuth.Mvc.Controllers /// System.String. public string LoadForTree() { - var orgs = SessionHelper.GetSessionUser().AccessedOrgs; + var orgs = AutofacExt.GetFromFac().GetLoginUser().AccessedOrgs; return JsonHelper.Instance.Serialize(orgs); } /// @@ -51,7 +51,7 @@ namespace OpenAuth.Mvc.Controllers [Anonymous] public string LoadOrg() { - var orgs = SessionHelper.GetSessionUser().AccessedOrgs.MapToList(); + var orgs = AutofacExt.GetFromFac().GetLoginUser().AccessedOrgs.MapToList(); //添加根节点 orgs.Add(new Org { diff --git a/OpenAuth.Mvc/Controllers/StockManagerController.cs b/OpenAuth.Mvc/Controllers/StockManagerController.cs index 23319b6b..8af9522d 100644 --- a/OpenAuth.Mvc/Controllers/StockManagerController.cs +++ b/OpenAuth.Mvc/Controllers/StockManagerController.cs @@ -37,7 +37,7 @@ namespace OpenAuth.Mvc.Controllers { var newmodel = new Stock(); model.CopyTo(newmodel); - newmodel.User = SessionHelper.GetSessionUser().User.Account; + newmodel.User = AutofacExt.GetFromFac().GetLoginUser().User.Account; _app.AddOrUpdate(newmodel); } catch (Exception ex) diff --git a/OpenAuth.Mvc/OpenAuth.Mvc.csproj b/OpenAuth.Mvc/OpenAuth.Mvc.csproj index ad204e00..c9205b81 100644 --- a/OpenAuth.Mvc/OpenAuth.Mvc.csproj +++ b/OpenAuth.Mvc/OpenAuth.Mvc.csproj @@ -296,6 +296,8 @@ + + diff --git a/OpenAuth.Mvc/Web.config b/OpenAuth.Mvc/Web.config index 6364ed01..099e0257 100644 --- a/OpenAuth.Mvc/Web.config +++ b/OpenAuth.Mvc/Web.config @@ -18,6 +18,8 @@ + + @@ -58,10 +60,12 @@ - + + + diff --git a/OpenAuth.UnitTest/TestLogin.cs b/OpenAuth.UnitTest/TestLogin.cs index 91b86b2e..6c2ef0f3 100644 --- a/OpenAuth.UnitTest/TestLogin.cs +++ b/OpenAuth.UnitTest/TestLogin.cs @@ -19,18 +19,7 @@ namespace OpenAuth.UnitTest [TestMethod] public void Test() { - var login = new LoginApp(new UserRepository(), - new ModuleRepository(), - new RelevanceRepository(), - new BaseRepository(), - new ResourceRepository(), - new OrgRepository() - ); - var user = login.Login("admin", "admin"); - foreach (var module in user.Modules) - { - Console.WriteLine(module.Id +"\t" + module.Name); - } + } } }