diff --git a/OpenAuth.App/OpenAuth.App.csproj b/OpenAuth.App/OpenAuth.App.csproj index 0e0bc6cd..ca406d2f 100644 --- a/OpenAuth.App/OpenAuth.App.csproj +++ b/OpenAuth.App/OpenAuth.App.csproj @@ -57,7 +57,6 @@ - diff --git a/OpenAuth.App/ResourceManagerApp.cs b/OpenAuth.App/ResourceManagerApp.cs index 4668caa5..e01123b0 100644 --- a/OpenAuth.App/ResourceManagerApp.cs +++ b/OpenAuth.App/ResourceManagerApp.cs @@ -6,103 +6,49 @@ using System.Collections.Generic; using System.Linq; using Infrastructure; using OpenAuth.App.ViewModel; +using OpenAuth.Domain.Service; namespace OpenAuth.App { public class ResourceManagerApp { - private IResourceRepository _repository; - private readonly ICategoryRepository _categoryRepository; - private IRelevanceRepository _relevanceRepository; + private ResManagerService _resManagerService; - public ResourceManagerApp(IResourceRepository repository, - ICategoryRepository categoryRepository, - IRelevanceRepository relevanceRepository) + public ResourceManagerApp(ResManagerService resManagerService) { - _repository = repository; - _categoryRepository = categoryRepository; - _relevanceRepository = relevanceRepository; + _resManagerService = resManagerService; } public int GetResourceCntInOrg(int orgId) { - if (orgId == 0) - { - return _repository.Find(null).Count(); - } - else - { - return _repository.GetResourceCntInOrgs(GetSubOrgIds(orgId)); - } + return _resManagerService.GetResourceCntInOrg(orgId); } public List LoadAll() { - return _repository.Find(null).ToList(); + return _resManagerService.LoadAll(); } /// /// 加载一个节点下面的一个或全部Resources /// - public dynamic Load(int categoryId, int pageindex, int pagesize) + public dynamic Load(string username, int categoryId, int pageindex, int pagesize) { - IEnumerable Resources; - int total = 0; - if (categoryId == 0) - { - Resources = _repository.LoadResources(pageindex, pagesize); - total = _repository.GetCount(); - } - else - { - Resources = _repository.LoadInOrgs(pageindex, pagesize,GetSubOrgIds(categoryId)); - total = _repository.GetResourceCntInOrgs(categoryId); - } - - return new - { - total = total, - list = Resources, - pageCurrent = pageindex - }; + return _resManagerService.Load(username, categoryId, pageindex, pagesize); } - /// - /// 获取当前节点的所有下级节点 - /// - private int[] GetSubOrgIds(int orgId) - { - var org = _categoryRepository.FindSingle(u => u.Id == orgId); - var orgs = _categoryRepository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); - return orgs; - } - public Resource Find(int id) - { - var resource = _repository.FindSingle(u => u.Id == id); - if (resource == null) return new Resource(); - - return resource; - } public void Delete(int id) { - _repository.Delete(id); + _resManagerService.Delete(id); } public void AddOrUpdate(Resource model) { Resource resource = new Resource(); model.CopyTo(resource); - - if (resource.Id == 0) - { - _repository.Add(resource); - } - else - { - _repository.Update(resource); - } + _resManagerService.AddOrUpdate(resource); } @@ -115,26 +61,9 @@ namespace OpenAuth.App /// 当为UserResource时,表示UserId /// /// 分类ID - public List LoadWithAccess(string accessType, int firstId, int cId) + public List LoadWithAccess(string username, string accessType, int firstId, int cId) { - var listVms = new List(); - // if (cId == 0) return listVms; - - foreach (var element in _repository.LoadInOrgs(cId)) - { - var accessed = _relevanceRepository.FindSingle(u => u.Key == accessType - && u.FirstId == firstId && u.SecondId == element.Id); - listVms.Add(new ResourceVM - { - Id = element.Id, - Name = element.Name, - IsBelongUser = accessed != null, - Description = element.Description, - Key = element.Key, - Status = element.Status - }); - } - return listVms; + return _resManagerService.LoadWithAccess(username, accessType, firstId, cId); } } diff --git a/OpenAuth.App/RoleManagerApp.cs b/OpenAuth.App/RoleManagerApp.cs index 6484b69c..21c72acf 100644 --- a/OpenAuth.App/RoleManagerApp.cs +++ b/OpenAuth.App/RoleManagerApp.cs @@ -98,7 +98,8 @@ namespace OpenAuth.App public List LoadForOrgAndUser(int orgId, int userId) { - var roleIds = _repository.Find(u => orgId == 0 || u.OrgId == orgId).ToList(); + var allorgs = GetSubOrgIds(orgId); + var roleIds = _repository.Find(u => orgId == 0 || allorgs.Contains(u.OrgId)).ToList(); var rolevms = new List(); foreach (var role in roleIds) { diff --git a/OpenAuth.App/ViewModel/ResourceVM.cs b/OpenAuth.App/ViewModel/ResourceVM.cs deleted file mode 100644 index d5b36832..00000000 --- a/OpenAuth.App/ViewModel/ResourceVM.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace OpenAuth.App.ViewModel -{ - public class ResourceVM - { - /// - /// 资源表ID - /// - /// - public int Id { get; set; } - - - /// - /// - /// - /// - public string Key { get; set; } - - /// - /// 组织名称 - /// - /// - public string Name { get; set; } - - /// - /// 资源分类标识 - /// - /// - public int Status { get; set; } - - - /// - /// 描述 - /// - /// - public string Description { get; set; } - - public bool IsBelongUser { get; set; } - } -} \ No newline at end of file diff --git a/OpenAuth.Domain/OpenAuth.Domain.csproj b/OpenAuth.Domain/OpenAuth.Domain.csproj index 4c837888..5cb1fa01 100644 --- a/OpenAuth.Domain/OpenAuth.Domain.csproj +++ b/OpenAuth.Domain/OpenAuth.Domain.csproj @@ -65,6 +65,7 @@ + diff --git a/OpenAuth.Domain/Service/ResManagerService.cs b/OpenAuth.Domain/Service/ResManagerService.cs new file mode 100644 index 00000000..c55fd69b --- /dev/null +++ b/OpenAuth.Domain/Service/ResManagerService.cs @@ -0,0 +1,152 @@ +using System.Collections.Generic; +using System.Linq; +using OpenAuth.Domain.Interface; + +namespace OpenAuth.Domain.Service +{ + /// + /// 领域服务 + /// 资源管理领域 + /// + public class ResManagerService + { + private IResourceRepository _repository; + private readonly ICategoryRepository _categoryRepository; + private IRelevanceRepository _relevanceRepository; + private AuthoriseService _authoriseService; + + public ResManagerService(IResourceRepository repository, + ICategoryRepository categoryRepository, + IRelevanceRepository relevanceRepository, + AuthoriseService authoriseService) + { + _repository = repository; + _categoryRepository = categoryRepository; + _relevanceRepository = relevanceRepository; + _authoriseService = authoriseService; + } + + public int GetResourceCntInOrg(int orgId) + { + if (orgId == 0) + { + return _repository.Find(null).Count(); + } + else + { + return _repository.GetResourceCntInOrgs(GetSubOrgIds(orgId)); + } + } + + public List LoadAll() + { + return _repository.Find(null).ToList(); + } + + /// + /// 加载用户一个节点下面的一个或全部Resources + /// + public dynamic Load(string username, int categoryId, int pageindex, int pagesize) + { + _authoriseService.GetUserAccessed(username); + if (_authoriseService.Resources.Count == 0) //用户没有任何资源 + { + return new + { + total = 0, + pageCurrent = pageindex + }; + } + var subIds = GetSubOrgIds(categoryId); + var query = _authoriseService.Resources.Where(u => categoryId == 0 || subIds.Contains(u.CategoryId)); + var Resources = query.Skip((pageindex - 1) * pagesize).Take(pagesize); + int total = query.Count(); + + return new + { + total = total, + list = Resources, + pageCurrent = pageindex + }; + } + + /// + /// 获取当前节点的所有下级节点 + /// + private int[] GetSubOrgIds(int orgId) + { + if (orgId == 0) + { + return _categoryRepository.Find(null).Select(u => u.Id).ToArray(); + } + var org = _categoryRepository.FindSingle(u => u.Id == orgId); + var orgs = _categoryRepository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); + return orgs; + } + + public Resource Find(int id) + { + var resource = _repository.FindSingle(u => u.Id == id); + if (resource == null) return new Resource(); + + return resource; + } + + public void Delete(int id) + { + _repository.Delete(id); + } + + public void AddOrUpdate(Resource resource) + { + if (resource.Id == 0) + { + _repository.Add(resource); + } + else + { + _repository.Update(resource); + } + + } + + /// + /// 获取带有授权状态的菜单列表 + /// + /// 授权类型,当前有RoleResource/UserResource + /// + /// 当为RoleResource时,表示RoleId + /// 当为UserResource时,表示UserId + /// + /// 分类ID + public List LoadWithAccess(string username, string accessType, int firstId, int cId) + { + var listVms = new List(); + _authoriseService.GetUserAccessed(username); + if (_authoriseService.Resources.Count == 0) //用户没有任何资源 + { + return listVms; + } + + var subIds = GetSubOrgIds(cId); + var query = _authoriseService.Resources.Where(u => cId == 0 || subIds.Contains(u.CategoryId)); + + foreach (var element in query) + { + var accessed = _relevanceRepository.FindSingle(u => u.Key == accessType + && u.FirstId == firstId && u.SecondId == element.Id); + listVms.Add(new + { + Id = element.Id, + Name = element.Name, + IsBelongUser = accessed != null, + Description = element.Description, + Key = element.Key, + Status = element.Status + }); + } + return listVms; + } + + } +} \ No newline at end of file diff --git a/OpenAuth.Mvc/AutofacExt.cs b/OpenAuth.Mvc/AutofacExt.cs index 4354cbff..fb4c2a74 100644 --- a/OpenAuth.Mvc/AutofacExt.cs +++ b/OpenAuth.Mvc/AutofacExt.cs @@ -30,11 +30,11 @@ namespace OpenAuth.Mvc { var builder = new ContainerBuilder(); - //����ע�� + //注册数据库基础操作和工作单元 builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IRepository<>)); builder.RegisterType(typeof (UnitWork)).As(typeof (IUnitWork)); - //Ӧ�ò�ע�� + //注册WebConfig中的配置 builder.RegisterModule(new ConfigurationSettingsReader("autofac")); //注册app层 diff --git a/OpenAuth.Mvc/Controllers/ResourceManagerController.cs b/OpenAuth.Mvc/Controllers/ResourceManagerController.cs index 5b0f4e47..e9f88718 100644 --- a/OpenAuth.Mvc/Controllers/ResourceManagerController.cs +++ b/OpenAuth.Mvc/Controllers/ResourceManagerController.cs @@ -46,7 +46,7 @@ namespace OpenAuth.Mvc.Controllers /// public string Load(int categoryId, int pageCurrent = 1, int pageSize = 30) { - return JsonHelper.Instance.Serialize(_app.Load(categoryId, pageCurrent, pageSize)); + return JsonHelper.Instance.Serialize(_app.Load(User.Identity.Name, categoryId, pageCurrent, pageSize)); } public string LoadForTree() @@ -94,7 +94,7 @@ namespace OpenAuth.Mvc.Controllers /// System.String. public string LoadWithAccess(int cId, int firstId, string key) { - return JsonHelper.Instance.Serialize(_app.LoadWithAccess(key,firstId, cId)); + return JsonHelper.Instance.Serialize(_app.LoadWithAccess(User.Identity.Name,key,firstId, cId)); } } } \ No newline at end of file diff --git a/OpenAuth.Mvc/Properties/AssemblyInfo.cs b/OpenAuth.Mvc/Properties/AssemblyInfo.cs index 73f43e70..36099d8d 100644 --- a/OpenAuth.Mvc/Properties/AssemblyInfo.cs +++ b/OpenAuth.Mvc/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // // 你可以指定所有值,也可以让修订版本和内部版本号采用默认值, // 方法是按如下所示使用 "*": -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/OpenAuth.Mvc/Views/OrgManager/Index.cshtml b/OpenAuth.Mvc/Views/OrgManager/Index.cshtml index a605d394..5d6b8236 100644 --- a/OpenAuth.Mvc/Views/OrgManager/Index.cshtml +++ b/OpenAuth.Mvc/Views/OrgManager/Index.cshtml @@ -6,7 +6,7 @@
-
    +