mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-12-26 22:25:39 +08:00
1 完成用户部门权限分配处理,可以为用户分配可见部门,如果没有任何可见部门,则只能查看自己有关的数据;
2 完善进出库实例; 3 添加CodeSmith生成EF DbContext Entity Mapping;
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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
|
||||
|
||||
107
OpenAuth.App/StockManagerApp.cs
Normal file
107
OpenAuth.App/StockManagerApp.cs
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user