1 完成用户部门权限分配处理,可以为用户分配可见部门,如果没有任何可见部门,则只能查看自己有关的数据;

2 完善进出库实例;
3 添加CodeSmith生成EF DbContext Entity Mapping;
This commit is contained in:
yubaolee
2016-01-07 11:47:43 +08:00
parent c2099cd337
commit f0b42e83d4
62 changed files with 5687 additions and 1592 deletions

View File

@@ -1,11 +1,9 @@
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using Infrastructure;
using Infrastructure.Helper;
using Infrastructure;
using OpenAuth.App.ViewModel;
using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System.Linq;
namespace OpenAuth.App
{
@@ -16,18 +14,21 @@ namespace OpenAuth.App
private IRelevanceRepository _relevanceRepository;
private IRepository<ModuleElement> _moduleElementRepository;
private IResourceRepository _resourceRepository;
private IOrgRepository _orgRepository;
public LoginApp(IUserRepository repository,
IModuleRepository moduleRepository,
IRelevanceRepository relevanceRepository,
IRepository<ModuleElement> moduleElementRepository,
IResourceRepository resourceRepository)
IRepository<ModuleElement> moduleElementRepository,
IResourceRepository resourceRepository,
IOrgRepository orgRepository)
{
_repository = repository;
_moduleRepository = moduleRepository;
_relevanceRepository = relevanceRepository;
_moduleElementRepository = moduleElementRepository;
_resourceRepository = resourceRepository;
_orgRepository = orgRepository;
}
public LoginUserVM Login(string userName, string password)
@@ -52,7 +53,7 @@ namespace OpenAuth.App
_relevanceRepository.Find(
u =>
(u.FirstId == user.Id && u.Key == "UserModule") ||
(u.Key == "RoleModule" && userRoleIds.Contains(u.FirstId))).Select(u =>u.SecondId).ToList();
(u.Key == "RoleModule" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
//用户角色与自己分配到的菜单ID
var elementIds =
_relevanceRepository.Find(
@@ -60,12 +61,12 @@ namespace OpenAuth.App
(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<ModuleView>();
loginVM.Modules = _moduleRepository.Find(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo).MapToList<ModuleView>();
//模块菜单权限
foreach (var module in loginVM.Modules)
{
module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id && elementIds.Contains( u.Id)).ToList();
module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id && elementIds.Contains(u.Id)).OrderBy(u => u.Sort).ToList();
}
//用户角色与自己分配到的资源ID
@@ -75,6 +76,13 @@ namespace OpenAuth.App
(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 == "RoleAccessdOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
loginVM.AccessedOrgs = _orgRepository.Find(u => orgids.Contains(u.Id)).ToList();
return loginVM;
}
@@ -94,10 +102,12 @@ namespace OpenAuth.App
//模块包含的菜单
foreach (var module in loginUser.Modules)
{
module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id).ToList();
module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id).OrderBy(u => u.Sort).ToList();
}
loginUser.Resources = _resourceRepository.Find(null).ToList();
loginUser.Resources = _resourceRepository.Find(null).OrderBy(u => u.SortNo).ToList();
loginUser.AccessedOrgs = _orgRepository.Find(null).OrderBy(u => u.SortNo).ToList();
return loginUser;
}
}

View File

@@ -52,7 +52,7 @@ namespace OpenAuth.App
public IEnumerable<ModuleElement> LoadByModuleId(int id)
{
var modules = _repository.Find(u => u.ModuleId == id);
var modules = _repository.Find(u => u.ModuleId == id).OrderBy(u =>u.Sort);
return modules;
}

View File

@@ -49,6 +49,7 @@
<Compile Include="ModuleManagerApp.cs" />
<Compile Include="ResourceManagerApp.cs" />
<Compile Include="RoleManagerApp.cs" />
<Compile Include="StockManagerApp.cs" />
<Compile Include="UserManagerApp.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="OrgManagerApp.cs" />

View File

@@ -9,10 +9,12 @@ namespace OpenAuth.App
public class OrgManagerApp
{
private IOrgRepository _repository;
private IRelevanceRepository _relevanceRepository;
public OrgManagerApp(IOrgRepository repository)
public OrgManagerApp(IOrgRepository repository, IRelevanceRepository relevanceRepository)
{
_repository = repository;
_relevanceRepository = relevanceRepository;
}
public IList<Org> GetAll()
@@ -81,6 +83,65 @@ namespace OpenAuth.App
_repository.Delete(u => u.CascadeId.Contains(delOrg.CascadeId));
}
/// <summary>
/// 加载特定用户的角色
/// TODO:这里会加载用户及用户角色的所有角色,“为用户分配角色”功能会给人一种混乱的感觉,但可以接受
/// </summary>
/// <param name="userId">The user unique identifier.</param>
public List<Org> 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 == "UserAccessedOrg") ||
(u.Key == "RoleAccessedOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
if (!moduleIds.Any()) return new List<Org>();
return _repository.Find(u => moduleIds.Contains(u.Id)).ToList();
}
/// <summary>
/// 为特定的用户分配角色
/// </summary>
/// <param name="userId">The user unique identifier.</param>
/// <param name="ids">角色ID</param>
public void AssignModuleForUser(int userId, int[] ids)
{
_relevanceRepository.DeleteBy("UserAccessedOrg", userId);
_relevanceRepository.AddRelevance("UserAccessedOrg", ids.ToLookup(u => userId));
}
/// <summary>
/// 加载特定角色的角色
/// </summary>
/// <param name="roleId">The role unique identifier.</param>
public List<Org> LoadForRole(int roleId)
{
var moduleIds =
_relevanceRepository.Find(u => u.FirstId == roleId && u.Key == "RoleAccessedOrg")
.Select(u => u.SecondId)
.ToList();
if (!moduleIds.Any()) return new List<Org>();
return _repository.Find(u => moduleIds.Contains(u.Id)).ToList();
}
/// <summary>
/// 为特定的角色分配角色
/// </summary>
/// <param name="roleId">The user unique identifier.</param>
/// <param name="ids">角色ID</param>
public void AssignModuleForRole(int roleId, int[] ids)
{
_relevanceRepository.DeleteBy("RoleAccessedOrg", roleId);
_relevanceRepository.AddRelevance("RoleAccessedOrg", ids.ToLookup(u => roleId));
}
#region
//修改对象的级联ID生成类似XXX.XXX.X.XX

View File

@@ -0,0 +1,107 @@

using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using Infrastructure;
namespace OpenAuth.App
{
public class StockManagerApp
{
private IStockRepository _repository;
private IOrgRepository _orgRepository;
public StockManagerApp(IStockRepository repository,
IOrgRepository orgRepository)
{
_repository = repository;
_orgRepository = orgRepository;
}
public int GetStockCntInOrg(int orgId)
{
if (orgId == 0)
{
return _repository.Find(null).Count();
}
else
{
return _repository.GetStockCntInOrgs(GetSubOrgIds(orgId));
}
}
public List<Stock> LoadAll()
{
return _repository.Find(null).ToList();
}
/// <summary>
/// 加载一个节点下面的一个或全部Stocks
/// </summary>
public dynamic Load(int orgId, int pageindex, int pagesize)
{
IEnumerable<Stock> Stocks;
int total = 0;
if (orgId == 0)
{
Stocks = _repository.LoadStocks(pageindex, pagesize);
total = _repository.GetCount();
}
else
{
Stocks = _repository.LoadInOrgs(pageindex, pagesize,GetSubOrgIds(orgId));
total = _repository.GetStockCntInOrgs(orgId);
}
return new
{
total = total,
list = Stocks,
pageCurrent = pageindex
};
}
/// <summary>
/// 获取当前节点的所有下级节点
/// </summary>
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);
if (stock == null) return new Stock();
return stock;
}
public void Delete(int id)
{
_repository.Delete(id);
}
public void AddOrUpdate(Stock model)
{
Stock stock = new Stock();
model.CopyTo(stock);
if (stock.Id == 0)
{
_repository.Add(stock);
}
else
{
_repository.Update(stock);
}
}
}
}

View File

@@ -34,7 +34,12 @@ namespace OpenAuth.App.ViewModel
/// <summary>
/// 用户所属机构
/// </summary>
public List<Org> Orgs { get; set; }
public List<Org> Orgs { get; set; }
/// <summary>
/// 用户可访问的机构
/// </summary>
public List<Org> AccessedOrgs { get; set; }
}
}