This commit is contained in:
yubaolee 2017-11-29 18:26:36 +08:00
parent 503f92d68e
commit e36664d5f6
27 changed files with 3565 additions and 3515 deletions

View File

@ -13,7 +13,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenAuth.Domain; using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
namespace OpenAuth.App namespace OpenAuth.App
{ {
@ -21,9 +20,9 @@ namespace OpenAuth.App
/// 领域服务 /// 领域服务
/// <para>用户授权服务</para> /// <para>用户授权服务</para>
/// </summary> /// </summary>
public class AuthoriseService public class AuthoriseService :BaseApp<User>
{ {
public IUnitWork _unitWork { get; set; }
protected User _user; protected User _user;
private List<string> _userRoleIds; //用户角色GUID private List<string> _userRoleIds; //用户角色GUID
@ -59,13 +58,13 @@ namespace OpenAuth.App
set set
{ {
_user = value; _user = value;
_userRoleIds = _unitWork.Find<Relevance>(u => u.FirstId == _user.Id && u.Key == "UserRole").Select(u => u.SecondId).ToList(); _userRoleIds = UnitWork.Find<Relevance>(u => u.FirstId == _user.Id && u.Key == "UserRole").Select(u => u.SecondId).ToList();
} }
} }
public void Check(string userName, string password) public void Check(string userName, string password)
{ {
var _user = _unitWork.FindSingle<User>(u => u.Account == userName); var _user = Repository.FindSingle(u => u.Account == userName);
if (_user == null) if (_user == null)
{ {
throw new Exception("用户帐号不存在"); throw new Exception("用户帐号不存在");
@ -79,11 +78,11 @@ namespace OpenAuth.App
/// <returns>IQueryable&lt;Org&gt;.</returns> /// <returns>IQueryable&lt;Org&gt;.</returns>
public virtual IQueryable<Org> GetOrgsQuery() public virtual IQueryable<Org> GetOrgsQuery()
{ {
var orgids = _unitWork.Find<Relevance>( var orgids = UnitWork.Find<Relevance>(
u => u =>
(u.FirstId == _user.Id && u.Key == "UserOrg") || (u.FirstId == _user.Id && u.Key == "UserOrg") ||
(u.Key == "RoleOrg" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId); (u.Key == "RoleOrg" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId);
return _unitWork.Find<Org>(u => orgids.Contains(u.Id)); return UnitWork.Find<Org>(u => orgids.Contains(u.Id));
} }
/// <summary> /// <summary>
@ -92,11 +91,11 @@ namespace OpenAuth.App
/// <returns>IQueryable&lt;Resource&gt;.</returns> /// <returns>IQueryable&lt;Resource&gt;.</returns>
public virtual IQueryable<Resource> GetResourcesQuery() public virtual IQueryable<Resource> GetResourcesQuery()
{ {
var resourceIds = _unitWork.Find<Relevance>( var resourceIds = UnitWork.Find<Relevance>(
u => u =>
(u.FirstId == _user.Id && u.Key == "UserResource") || (u.FirstId == _user.Id && u.Key == "UserResource") ||
(u.Key == "RoleResource" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId); (u.Key == "RoleResource" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId);
return _unitWork.Find<Resource>(u => resourceIds.Contains(u.Id)); return UnitWork.Find<Resource>(u => resourceIds.Contains(u.Id));
} }
/// <summary> /// <summary>
@ -104,11 +103,11 @@ namespace OpenAuth.App
/// </summary> /// </summary>
public virtual IQueryable<ModuleElement> GetModuleElementsQuery() public virtual IQueryable<ModuleElement> GetModuleElementsQuery()
{ {
var elementIds = _unitWork.Find<Relevance>( var elementIds = UnitWork.Find<Relevance>(
u => u =>
(u.FirstId == _user.Id && u.Key == "UserElement") || (u.FirstId == _user.Id && u.Key == "UserElement") ||
(u.Key == "RoleElement" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId); (u.Key == "RoleElement" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId);
return _unitWork.Find<ModuleElement>(u => elementIds.Contains(u.Id)); return UnitWork.Find<ModuleElement>(u => elementIds.Contains(u.Id));
} }
/// <summary> /// <summary>
@ -116,17 +115,17 @@ namespace OpenAuth.App
/// </summary> /// </summary>
public virtual IQueryable<Module> GetModulesQuery() public virtual IQueryable<Module> GetModulesQuery()
{ {
var moduleIds = _unitWork.Find<Relevance>( var moduleIds = UnitWork.Find<Relevance>(
u => u =>
(u.FirstId == _user.Id && u.Key == "UserModule") || (u.FirstId == _user.Id && u.Key == "UserModule") ||
(u.Key == "RoleModule" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId); (u.Key == "RoleModule" && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId);
return _unitWork.Find<Module>(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo); return UnitWork.Find<Module>(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo);
} }
//用户角色 //用户角色
public virtual IQueryable<Role> GetRolesQuery() public virtual IQueryable<Role> GetRolesQuery()
{ {
return _unitWork.Find<Role>(u => _userRoleIds.Contains(u.Id)); return UnitWork.Find<Role>(u => _userRoleIds.Contains(u.Id));
} }
} }
} }

24
OpenAuth.App/BaseApp.cs Normal file
View File

@ -0,0 +1,24 @@
using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
namespace OpenAuth.App
{
/// <summary>
/// 业务层基类UnitWork用于事务操作Repository用于普通的数据库操作
/// <para>如用户管理Class UserManagerApp:BaseApp<User></para>
/// </summary>
/// <typeparam name="T"></typeparam>
public class BaseApp<T> where T:Entity
{
/// <summary>
/// 用于事务操作
/// </summary>
/// <value>The unit work.</value>
public IUnitWork UnitWork { get; set; }
/// <summary>
/// 用于普通的数据库操作
/// </summary>
/// <value>The repository.</value>
public IRepository<T> Repository { get; set; }
}
}

View File

@ -81,6 +81,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="AuthoriseService.cs" /> <Compile Include="AuthoriseService.cs" />
<Compile Include="BaseApp.cs" />
<Compile Include="CategoryManagerApp.cs" /> <Compile Include="CategoryManagerApp.cs" />
<Compile Include="AuthorizeApp.cs" /> <Compile Include="AuthorizeApp.cs" />
<Compile Include="Extention\IWF_Runtime.cs" /> <Compile Include="Extention\IWF_Runtime.cs" />

View File

@ -2,6 +2,7 @@
using OpenAuth.Domain; using OpenAuth.Domain;
using OpenAuth.Domain.Interface; using OpenAuth.Domain.Interface;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace OpenAuth.App namespace OpenAuth.App
@ -89,5 +90,26 @@ namespace OpenAuth.App
}).ToArray()); }).ToArray());
_unitWork.Save(); _unitWork.Save();
} }
/// <summary>
/// 根据关联表的一个键获取另外键的值
/// </summary>
/// <param name="key">映射标识</param>
/// <param name="returnSecondIds">返回的是否为映射表的第二列,如果不是则返回第一列</param>
/// <param name="ids">已知的ID列表</param>
/// <returns>List&lt;System.String&gt;.</returns>
public List<string> Get(string key, bool returnSecondIds, params string[] ids)
{
if (returnSecondIds)
{
return _unitWork.Find<Relevance>(u => u.Key == key
&& ids.Contains(u.FirstId)).Select(u => u.SecondId).ToList();
}
else
{
return _unitWork.Find<Relevance>(u => u.Key == key
&& ids.Contains(u.SecondId)).Select(u => u.FirstId).ToList();
}
}
} }
} }

View File

@ -29,28 +29,28 @@ namespace OpenAuth.App
public override IQueryable<Org> GetOrgsQuery() public override IQueryable<Org> GetOrgsQuery()
{ {
return _unitWork.Find<Org>(null); return UnitWork.Find<Org>(null);
} }
public override IQueryable<Resource> GetResourcesQuery() public override IQueryable<Resource> GetResourcesQuery()
{ {
return _unitWork.Find<Resource>(null); return UnitWork.Find<Resource>(null);
} }
public override IQueryable<ModuleElement> GetModuleElementsQuery() public override IQueryable<ModuleElement> GetModuleElementsQuery()
{ {
return _unitWork.Find<ModuleElement>(null); return UnitWork.Find<ModuleElement>(null);
} }
public override IQueryable<Module> GetModulesQuery() public override IQueryable<Module> GetModulesQuery()
{ {
return _unitWork.Find<Module>(null); return UnitWork.Find<Module>(null);
} }
public override IQueryable<Role> GetRolesQuery() public override IQueryable<Role> GetRolesQuery()
{ {
//用户角色 //用户角色
return _unitWork.Find<Role>(null); return UnitWork.Find<Role>(null);
} }
} }
} }

View File

@ -1,6 +1,5 @@
using OpenAuth.App.ViewModel; using OpenAuth.App.ViewModel;
using OpenAuth.Domain; using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -9,15 +8,14 @@ using OpenAuth.App.Request;
namespace OpenAuth.App namespace OpenAuth.App
{ {
public class UserManagerApp public class UserManagerApp :BaseApp<User>
{ {
public IUnitWork _unitWork { get; set; }
public RevelanceManagerApp ReleManagerApp { get; set; } public RevelanceManagerApp ReleManagerApp { get; set; }
public User Get(string account) public User Get(string account)
{ {
return _unitWork.FindSingle<User>(u => u.Account == account); return Repository.FindSingle(u => u.Account == account);
} }
@ -26,20 +24,24 @@ namespace OpenAuth.App
/// </summary> /// </summary>
public GridData Load(QueryUserListReq request) public GridData Load(QueryUserListReq request)
{ {
if (request.page < 1) request.page = 1; //TODO:如果列表为空新增加一个用户后前端会传一个0过来奇怪
IEnumerable<User> users; IEnumerable<User> users;
int records = 0; int records = 0;
if (request.orgId ==string.Empty) if (string.IsNullOrEmpty(request.orgId))
{ {
users = _unitWork.Find<User>(null).OrderBy(u => u.Id).Skip((request.page - 1) * request.limit).Take(request.limit); users = UnitWork.Find<User>(null).OrderBy(u => u.Id).Skip((request.page - 1) * request.limit).Take(request.limit);
records = _unitWork.GetCount<User>(); records = UnitWork.GetCount<User>();
} }
else else
{ {
var ids = GetSubOrgIds(request.orgId); var ids = GetSubOrgIds(request.orgId);
users = _unitWork.Find<User>(u =>ids.Contains(u.Id)).OrderBy(u => u.Id).Skip((request.page - 1) * request.limit).Take(request.limit); List<string> userIds = ReleManagerApp.Get("UserOrg", false, ids);
records = _unitWork.GetCount<User>(); users = UnitWork.Find<User>(u =>userIds.Contains(u.Id))
.OrderBy(u => u.Name)
.Skip((request.page - 1) * request.limit)
.Take(request.limit);
records = UnitWork.GetCount<User>();
} }
var userviews = new List<UserView>(); var userviews = new List<UserView>();
foreach (var user in users) foreach (var user in users)
{ {
@ -62,14 +64,15 @@ namespace OpenAuth.App
/// </summary> /// </summary>
private string[] GetSubOrgIds(string orgId) private string[] GetSubOrgIds(string orgId)
{ {
var org = _unitWork.FindSingle<Org>(u => u.Id == orgId); var org = UnitWork.FindSingle<Org>(u => u.Id == orgId);
var orgs = _unitWork.Find<Org>(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); var orgs = UnitWork.Find<Org>(u => u.CascadeId.Contains(org.CascadeId))
.Select(u => u.Id).ToArray();
return orgs; return orgs;
} }
public UserView Find(string id) public UserView Find(string id)
{ {
var user = _unitWork.FindSingle<User>(u => u.Id == id); var user = Repository.FindSingle(u => u.Id == id);
if (user == null) return new UserView(); if (user == null) return new UserView();
UserView view = user; UserView view = user;
@ -85,7 +88,7 @@ namespace OpenAuth.App
public void Delete(string[] ids) public void Delete(string[] ids)
{ {
_unitWork.Delete<User>(u => ids.Contains(u.Id)); Repository.Delete(u => ids.Contains(u.Id));
} }
public void AddOrUpdate(UserView view) public void AddOrUpdate(UserView view)
@ -95,19 +98,18 @@ namespace OpenAuth.App
User user = view; User user = view;
if (string.IsNullOrEmpty(view.Id)) if (string.IsNullOrEmpty(view.Id))
{ {
if (_unitWork.IsExist<User>(u => u.Account == view.Account)) if (UnitWork.IsExist<User>(u => u.Account == view.Account))
{ {
throw new Exception("用户账号已存在"); throw new Exception("用户账号已存在");
} }
user.CreateTime = DateTime.Now; user.CreateTime = DateTime.Now;
user.Password = user.Account; //初始密码与账号相同 user.Password = user.Account; //初始密码与账号相同
_unitWork.Add(user); Repository.Add(user);
_unitWork.Save();
view.Id = user.Id; //要把保存后的ID存入view view.Id = user.Id; //要把保存后的ID存入view
} }
else else
{ {
_unitWork.Update<User>(u => u.Id == view.Id, u => new User UnitWork.Update<User>(u => u.Id == view.Id, u => new User
{ {
Account = user.Account, Account = user.Account,
BizCode = user.BizCode, BizCode = user.BizCode,
@ -128,8 +130,8 @@ namespace OpenAuth.App
/// </summary> /// </summary>
public IEnumerable<Org> LoadByUser(string userId) public IEnumerable<Org> LoadByUser(string userId)
{ {
var result = from userorg in _unitWork.Find<Relevance>(null) var result = from userorg in UnitWork.Find<Relevance>(null)
join org in _unitWork.Find<Org>(null) on userorg.SecondId equals org.Id join org in UnitWork.Find<Org>(null) on userorg.SecondId equals org.Id
where userorg.FirstId == userId && userorg.Key == "UserOrg" where userorg.FirstId == userId && userorg.Key == "UserOrg"
select org; select org;
return result; return result;

View File

@ -72,7 +72,7 @@ namespace OpenAuth.Mvc.Controllers
public string GetAccessedUsers() public string GetAccessedUsers()
{ {
IEnumerable<UserView> users = App.Load(new QueryUserListReq()).data; IEnumerable<UserView> users = App.Load(new QueryUserListReq()).data;
var result = new Dictionary<string , object>(); var result = new Dictionary<string, object>();
foreach (var user in users) foreach (var user in users)
{ {
var item = new var item = new

View File

@ -48,8 +48,8 @@ namespace OpenAuth.UnitTest
{ {
var request = new QueryUserListReq var request = new QueryUserListReq
{ {
orgId = "990cb229-cc18-41f3-8e2b-13f0f0110798", orgId = "543a9fcf-4770-4fd9-865f-030e562be238",
page = 2, page = 1,
limit = 30 limit = 30
}; };
var users = _app.Load(request); var users = _app.Load(request);

View File

@ -27,12 +27,8 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
/// </summary> /// </summary>
public class CheckController : ApiController public class CheckController : ApiController
{ {
private AuthorizeApp _app; public AuthorizeApp _app { get; set; }
private ObjCacheProvider<UserAuthSession> _objCacheProvider = new ObjCacheProvider<UserAuthSession>(); private ObjCacheProvider<UserAuthSession> _objCacheProvider = new ObjCacheProvider<UserAuthSession>();
public CheckController()
{
_app = AutofacExt.GetFromFac<AuthorizeApp>();
}
/// <summary> /// <summary>
/// 检验token是否有效 /// 检验token是否有效

View File

@ -11,12 +11,7 @@ namespace OpenAuth.WebApi.Areas.SSO.Controllers
/// </summary> /// </summary>
public class LoginController : Controller public class LoginController : Controller
{ {
private AppInfoService _appInfoService; public AppInfoService _appInfoService { get; set; }
public LoginController()
{
_appInfoService = new AppInfoService();
}
private const string AppInfo = "AppInfo"; private const string AppInfo = "AppInfo";

View File

@ -13,10 +13,11 @@
// *********************************************************************** // ***********************************************************************
using System.Reflection; using System.Reflection;
using System.Web.Http;
using System.Web.Mvc; using System.Web.Mvc;
using Autofac; using Autofac;
using Autofac.Configuration;
using Autofac.Integration.Mvc; using Autofac.Integration.Mvc;
using Autofac.Integration.WebApi;
using OpenAuth.App; using OpenAuth.App;
using OpenAuth.Domain.Interface; using OpenAuth.Domain.Interface;
using OpenAuth.Repository; using OpenAuth.Repository;
@ -50,8 +51,13 @@ namespace OpenAuth.WebApi
// OPTIONAL: Enable property injection into action filters. // OPTIONAL: Enable property injection into action filters.
builder.RegisterFilterProvider(); builder.RegisterFilterProvider();
// Set the dependency resolver to be Autofac. //注册所有的ApiControllers
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
var container = builder.Build(); var container = builder.Build();
HttpConfiguration config = GlobalConfiguration.Configuration;
//注册api容器需要使用HttpConfiguration对象
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
} }

View File

@ -57,6 +57,10 @@
<HintPath>..\packages\Autofac.Mvc5.3.3.4\lib\net45\Autofac.Integration.Mvc.dll</HintPath> <HintPath>..\packages\Autofac.Mvc5.3.3.4\lib\net45\Autofac.Integration.Mvc.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Autofac.Integration.WebApi, Version=3.4.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.WebApi2.3.4.0\lib\net45\Autofac.Integration.WebApi.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath> <HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
<Private>True</Private> <Private>True</Private>

View File

@ -4,6 +4,7 @@
<package id="Autofac" version="3.5.2" targetFramework="net45" /> <package id="Autofac" version="3.5.2" targetFramework="net45" />
<package id="Autofac.Configuration" version="3.3.0" targetFramework="net45" /> <package id="Autofac.Configuration" version="3.3.0" targetFramework="net45" />
<package id="Autofac.Mvc5" version="3.3.4" targetFramework="net45" /> <package id="Autofac.Mvc5" version="3.3.4" targetFramework="net45" />
<package id="Autofac.WebApi2" version="3.4.0" targetFramework="net45" />
<package id="bootstrap" version="3.0.0" targetFramework="net45" /> <package id="bootstrap" version="3.0.0" targetFramework="net45" />
<package id="EntityFramework" version="6.1.3" targetFramework="net45" /> <package id="EntityFramework" version="6.1.3" targetFramework="net45" />
<package id="jQuery" version="1.10.2" targetFramework="net45" /> <package id="jQuery" version="1.10.2" targetFramework="net45" />